四.CA證書與秘鑰
kubernetes集群安全訪問有兩種方式:"基於CA簽名的雙向數字證書認證"與"基於BASE或TOKEN的簡單認證",生產環境推薦使用"基於CA簽名的雙向數字證書認證"。
本文檔采用 CloudFlare 的 PKI 工具集 cfssl 來生成 Certificate Authority (CA) 證書和秘鑰文件,CA 是自簽名的證書,用來簽名后續創建的其它 TLS 證書。
以kubenode1為例,kubenode2&kubenode3做適當小調整。
1. 安裝CFSSL
[root@kubenode1 ~]# mkdir -p /usr/local/cfssl [root@kubenode1 ~]# cd /usr/local/cfssl/ # cfssl [root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 [root@kubenode1 cfssl]# mv cfssl_linux-amd64 cfssl [root@kubenode1 cfssl]# chmod +x cfssl # cfssl-certinfo [root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 [root@kubenode1 cfssl]# mv cfssl-certinfo_linux-amd64 cfssl-certinfo [root@kubenode1 cfssl]# chmod +x cfssl-certinfo # cfssljson [root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 [root@kubenode1 cfssl]# mv cfssljson_linux-amd64 cfssljson [root@kubenode1 cfssl]# chmod +x cfssljson
2. 生成CA模板
# kubenode1節點完成即可 [root@kubenode1 ~]# cd /usr/local/cfssl/ # 生產CA配置文件模板 [root@kubenode1 cfssl]# cfssl print-defaults config > config.json # 生產CA證書簽名請求文件模板 [root@kubenode1 cfssl]# cfssl print-defaults csr > csr.json
3. CA配置文件
# kubenode1節點完成即可,以下的CA證書,簽名等可通過scp分發到kubenode2&kubenode3; # ca-config.json:1個profiles,分別指定不同的過期時間,使用場景等參數,根據需要在不同場景使用不同的profile簽名證書;這里以生成的模板為基礎修改; # “signing”:表示該證書可用於簽名其他證書,生成的ca.pem證書中CA=TRUE; # ”server auth“:client可用該CA對server提供的證書進行驗證; # “client auth”:server可用該CA對client提供的證書進行驗證; # 注意每個模塊或每行有或沒有“,”的區別 [root@kubenode1 cfssl]# cp config.json ca-config.json [root@kubenode1 cfssl]# vim ca-config.json { "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "expiry": "8760h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } }
4. CA證書簽名請求
# “CN”:Common Name,kube-apiserver從證書中提取該字段作為請求的用戶名(User Name);瀏覽器使用該字段驗證網站是否合法; # “O”:Organization,kube-apiserver從證書中提取該字段作為請求用戶所屬的組(Group) [root@kubenode1 cfssl]# cp csr.json ca-csr.json [root@kubenode1 cfssl]# vim ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "ChengDu", "L": "ChengDu", "O": "k8s", "OU": "cloudteam" } ] }
5. 生成CA證書與秘鑰
[root@kubenode1 cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca [root@kubenode1 cfssl]# ls ca*
# 簡單查看 [root@kubenode1 cfssl]# cfssl-certinfo -cert ca.pem
6. 分發CA證書
# 將生成的CA證書,秘鑰,配置文件等分發到所有機器; # ca-key.pem與ca.pem重要 [root@kubenode1 ~]# mkdir -p /etc/kubernetes/ssl [root@kubenode1 ~]# cp /usr/local/cfssl/ca* /etc/kubernetes/ssl/ [root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.22:/etc/kubernetes/ssl/ [root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.23:/etc/kubernetes/ssl/