記事ディレクトリ
1. PKI証明書管理ツールをダウンロードする
wget -O cfssl https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
chmod +x cfssl
mv cfssl /usr/local/bin/
wget -O cfssljson https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64
chmod +x cfssljson
mv cfssljson /usr/local/bin/
2. CA ルート証明書を作成する
- ca-config.json ファイルを作成する
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
- ca-csr.json ファイルを作成する
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "kubernetes",
"OU": "system"
}
],
"ca": {
"expiry": "87600h"
}
}
- ルート証明書を生成する
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
次の 3 つのファイルを生成します
* ca.csr
* ca-key.pem
* ca.pem
3. kube-apiserver の証明書を生成する
- kube-apiserver-csr.json ファイルを作成する
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"192.168.0.200",
"192.168.0.233",
"192.168.0.145",
"192.168.0.110",
"10.0.0.1",
"10.255.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "kubernetes",
"OU": "system"
}
]
}
このステップのホスト リストの内容は非常に重要であり、この範囲外のノードによるこの証明書へのアクセスは拒否されます。したがって、kubernetes クラスター内のノード IP または対応するドメイン名を追加してください。ホスト リストの値は汎用ドメイン名をサポートします。
- kube-apiserver の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-apiserver-csr.json | cfssljson -bare kube-apiserver
生成されるファイルは次のとおりです。
* kube-apiserver.csr
* kube-apiserver-key.pem
* kube-apiserver.pem
4. kube-controller-manager の証明書を生成する
- kube-controller-manager-csr.json ファイルを作成する
{
"CN": "system:kube-controller-manager",
"key": {
"algo": "rsa",
"size": 2048
},
"hosts": [
"127.0.0.1",
"192.168.0.200",
"192.168.0.233",
"192.168.0.110",
"192.168.0.145"
],
"names": [
{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "system:kube-controller-manager",
"OU": "system"
}
]
}
- kube-controller-manager の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager
生成されるファイルは次のとおりです。
* kube-controller-manager.csr
* kube-controller-manager-key.pem
* kube-controller-manager.pem
5. kube-scheduler の証明書を生成する
- kube-scheduler-csr.json ファイルを作成する
{
"CN": "system:kube-scheduler",
"hosts": [
"127.0.0.1",
"192.168.0.110",
"192.168.0.200",
"192.168.0.233",
"192.168.0.145"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "system:kube-scheduler",
"OU": "system"
}
]
}
- kube-scheduler の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler
生成されるファイルは次のとおりです。
* kube-scheduler.csr
* kube-scheduler-key.pem
* kube-scheduler.pem
6. kube-proxy の証明書を生成します - kube-proxy-csr.json ファイルを作成します
{
"CN": "system:kube-proxy",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "kubernetes",
"OU": "system"
}
]
}
- kube-proxy の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
生成されるファイルは次のとおりです。
* kube-proxy-key.pem
* kube-proxy.pem
* kube-proxy.csr
7. etcd の証明書を生成する
- etcd-csr.json ファイルを作成する
{
"CN": "etcd",
"hosts": [
"127.0.0.1",
"192.168.0.200",
"192.168.0.233",
"192.168.0.145",
"192.168.0.110"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "kubernetes",
"OU": "system"
}]
}
- etcd の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd
生成されるファイルは次のとおりです。
* etcd-key.pem
* etcd.pem
* etcd.csr
8. 管理証明書の生成
- admin-csr.json ファイルを作成する
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Hubei",
"L": "Wuhan",
"O": "system:masters",
"OU": "system"
}
]
}
- 管理証明書の生成
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
生成されるファイルは次のとおりです。
* admin.csr
* admin.pem
* admin-key.pem
9. 各ノードへの証明書配布
Kubernetes クラスター全体が、現在のステップで生成された証明書を使用します。まず証明書を /etc/kubernetes/ssl ディレクトリに保存します
mkdir -pv /etc/kubernetes/ssl
cp ./*.pem /etc/kubernetes/ssl
現在のノードで生成された証明書を他のノードにコピーし、次の操作を実行して証明書を他のノードにコピーします。
ssh root@其他节点IP地址或内网域名 "mkdir -pv /etc/kubernetes/ssl"
scp /etc/kubernetes/ssl/* root@其他节点IP地址或内网域名:/etc/kubernetes/ssl