下面的操作依托於上一篇文章
安裝cfssl工具集
本文章使用CloudFlare的PKI工具cfssl創建所有證書。
cd /opt/k8s/bin/
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
# 批量修改文件名
rename _linux-amd64 '' cfssl*
chmod +x /opt/k8s/bin/*
創建CA證書和秘鑰
為確保安全,kubernetes各個組件需要使用x509證書對通信進行加密和認證
CA(Certificate Authority)是自簽名的根證書,用來簽名后續創建的其他證書。
注意: 如果沒有特殊指明,本文檔的所有操作均在node01節點執行,遠程分發到其他節點
創建根證書 (CA)
CA證書是集群所有節點共享的,只需要創建一個CA證書,后續創建的所有證書都是由它簽名
創建配置文件
CA配置文件用於配置根證書的使用場景(profile)和具體參數(usage、過期時間、服務端認證、客戶端認證、加密等)
cd /opt/k8s/work
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
######################
signing 表示該證書可用於簽名其它證書,生成的ca.pem證書找中CA=TRUE
server auth 表示client可以用該證書對server提供的證書進行驗證
client auth 表示server可以用該證書對client提供的證書進行驗證
創建證書簽名請求文件
cd /opt/k8s/work
cat > ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "4Paradigm"
}
],
"ca": {
"expiry": "876000h"
}
}
EOF
#######################
CN CommonName,kube-apiserver從證書中提取該字段作為請求的用戶名(User Name),瀏覽器使用該字段驗證網站是否合法
O Organization,kube-apiserver 從證書中提取該字段作為請求用戶和所屬組(Group)
kube-apiserver將提取的User、Group作為RBAC授權的用戶和標識
生成CA證書和私鑰
cd /opt/k8s/work
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
ls ca*
分發證書
將生成的CA證書、秘鑰文件、配置文件拷貝到所有節點的/etc/kubernetes/cert目錄下
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "mkdir -p /etc/kubernetes/cert"
scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert
done
下載安裝包並解壓
cd /opt/k8s/work/
wget https://dl.k8s.io/v1.15.6/kubernetes-server-linux-amd64.tar.gz
wget https://github.com/etcd-io/etcd/releases/download/v3.3.13/etcd-v3.3.13-linux-amd64.tar.gz
wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
mkdir flannel-v0.11
tar xf flannel-v0.11.0-linux-amd64.tar.gz -C flannel-v0.11
tar xf etcd-v3.3.13-linux-amd64.tar.gz
tar xf kubernetes-server-linux-amd64.tar.gz
