一 創建CA證書和密鑰 1.1 安裝cfssl工具集 1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/cert 2 3 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd ...
一 創建CA證書和密鑰
1.1 安裝cfssl工具集
1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/cert 2 3 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /opt/k8s/bin/cfssl #下載cfssl軟體 4 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /opt/k8s/bin/cfssljson #下載json模板 5 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /opt/k8s/bin/cfssl-certinfo 6 [root@k8smaster01 ~]# chmod u+x /opt/k8s/bin/* 7 [root@k8smaster01 ~]# export PATH=/opt/k8s/bin:$PATH
1.2 創建根證書
1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/work 2 [root@k8smaster01 ~]# cd /opt/k8s/work 3 [root@k8smaster01 work]# cfssl print-defaults config > config.json 4 [root@k8smaster01 work]# cfssl print-defaults csr > csr.json #創建模版配置json文件 5 [root@k8smaster01 work]# cp config.json ca-config.json #複製一份作為CA的配置文件 6 [root@k8smaster01 work]# cat > ca-config.json <<EOF 7 { 8 "signing": { 9 "default": { 10 "expiry": "168h" 11 }, 12 "profiles": { 13 "kubernetes": { 14 "expiry": "87600h", 15 "usages": [ 16 "signing", 17 "key encipherment", 18 "server auth", 19 "client auth" 20 ] 21 } 22 } 23 } 24 } 25 EOF欄位解釋: config.json:可以定義多個profiles,分別指定不同的過期時間、使用場景等參數;後續在簽名證書時使用某個profile;
- signing: 表示該證書可用於簽名其它證書;生成的ca.pem 證書中CA=TRUE;
- server auth: 表示client 可以用該CA 對server 提供的證書進行校驗;
- client auth: 表示server 可以用該CA 對client 提供的證書進行驗證。
1 [root@k8smaster01 work]# cp csr.json ca-csr.json #複製一份作為CA的證書簽名請求文件
2 [root@k8smaster01 work]# cat > ca-csr.json <<EOF
3 {
4 "CN": "kubernetes",
5 "key": {
6 "algo": "rsa",
7 "size": 2048
8 },
9 "names": [
10 {
11 "C": "CN",
12 "ST": "Shanghai",
13 "L": "Shanghai",
14 "O": "k8s",
15 "OU": "System"
16 }
17 ]
18 }
19 EOF
欄位解釋:
- CN: Common Name,kube-apiserver 從證書中提取該欄位作為請求的用戶名(User Name);瀏覽器使用該欄位驗證網站是否合法;
- C:country;
- ST:state;
- L:city;
- O: Organization,kube-apiserver 從證書中提取該欄位作為請求用戶所屬的組(Group);
- OU:organization unit。
1 [root@k8smaster01 ~]# cd /opt/k8s/work 2 [root@k8smaster01 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca #生成CA密鑰(ca-key.pem)和證書(ca.pem)提示:生成證書後,Kubernetes集群需要雙向TLS認證,則可將ca-key.pem和ca.pem拷貝到所有要部署的機器的/etc/kubernetes/ssl目錄下。 更多TLS證書創建方式參考《附008.Kubernetes TLS證書介紹及創建》。
1.3 分發證書
1 [root@k8smaster01 ~]# cd /opt/k8s/work 2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh 3 [root@k8smaster01 work]# for all_ip in ${ALL_IPS[@]} 4 do 5 echo ">>> ${all_ip}" 6 ssh root@${all_ip} "mkdir -p /etc/kubernetes/cert" 7 scp ca*.pem ca-config.json root@${all_ip}:/etc/kubernetes/cert 8 done