您好,登錄后才能下訂單哦!
CFSSL是CloudFlare的PKI / TLS瑞士×××。它既是命令行工具,也是用于簽名,驗(yàn)證和捆綁TLS證書的HTTP API服務(wù)器.
1.下載安裝CFSSL(用于簽名,驗(yàn)證和捆綁TLS證書的HTTP API工具)(master節(jié)點(diǎn))
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssl-certinfo /usr/local/bin/cfssljson
2創(chuàng)建CA(Certificate Authority)(master節(jié)點(diǎn))
mkdir /root/ssl
cd /root/ssl
cfssl print-defaults config > config.json # 默認(rèn)配置模板
cfssl print-defaults csr > csr.json #默認(rèn)csr請求模板
# 根據(jù)config.json文件的格式創(chuàng)建如下的ca-config.json文件
# 過期時(shí)間設(shè)置成了 87600h
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
知識點(diǎn):
ca-config.json:可以定義多個(gè) profiles,分別指定不同的過期時(shí)間、使用場景等參數(shù);后續(xù)在簽名證書時(shí)使用某個(gè) profile;此實(shí)例只有一個(gè)kubernetes模板。
signing:表示該證書可用于簽名其它證書;生成的 ca.pem 證書中 CA=TRUE;
server auth:表示client可以用該 CA 對server提供的證書進(jìn)行驗(yàn)證;
client auth:表示server可以用該CA對client提供的證書進(jìn)行驗(yàn)證;
注意標(biāo)點(diǎn)符號,最后一個(gè)字段一般是沒有都好的。
3 創(chuàng)建證書請求
cat > ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "ShenZhen",
"O": "k8s",
"OU": "System"
}
],
"ca": {
"expiry": "87600h"
}
}
EOF
知識點(diǎn):
"CN":Common Name,kube-apiserver 從證書中提取該字段作為請求的用戶名 (User Name)
"O":Organization,kube-apiserver 從證書中提取該字段作為請求用戶所屬的組 (Group)
4 生成CA證書和私鑰
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
將會生成 ca-key.pem(私鑰) ca.pem(公鑰)
知識點(diǎn): cfssljson只是整理json格式,-bare主要的意義在于命名 (個(gè)人見解,以便理解,勿噴)
5 創(chuàng)建kubernetes證書請求文件
cat > kubernetes-csr.json <<EOF
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"10.192.44.129",
"10.192.44.128",
"10.192.44.126",
"10.192.44.127",
"10.254.0.1",
"*.kubernetes.master",
"localhost",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "ShenZhen",
"O": "k8s",
"OU": "System"
}
]
}
EOF
知識點(diǎn):
這個(gè)證書目前專屬于 apiserver加了一個(gè) *.kubernetes.master 域名以便內(nèi)部私有 DNS 解析使用(可刪除);至于很多人問過 kubernetes 這幾個(gè)能不能刪掉,答案是不可以的;因?yàn)楫?dāng)集群創(chuàng)建好后,default namespace 下會創(chuàng)建一個(gè)叫 kubenretes 的 svc,有一些組件會直接連接這個(gè) svc 來跟 api 通訊的,證書如果不包含可能會出現(xiàn)無法連接的情況;其他幾個(gè) kubernetes 開頭的域名作用相同
hosts包含的是授權(quán)范圍,不在此范圍的的節(jié)點(diǎn)或者服務(wù)使用此證書就會報(bào)證書不匹配錯(cuò)誤。
10.254.0.1是指kube-apiserver 指定的 service-cluster-ip-range 網(wǎng)段的第一個(gè)IP。
#hosts配置區(qū)域,即一個(gè)證書的網(wǎng)站可以是*.youku.com也是可以是*.google.com
6 kubernetes證書和私鑰
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
知識點(diǎn): -config 引用的是模板中的默認(rèn)配置文件,-profiles是指定特定的使用場景,比如ca-config.json中的kubernetes區(qū)域
7 創(chuàng)建admin證書
cat > admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "ShenZhen",
"O": "system:masters",
"OU": "System"
}
]
}
EOF
8 生成admin證書和私鑰
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
知識點(diǎn):
這個(gè)admin 證書,是將來生成管理員用的kube config 配置文件用的,現(xiàn)在我們一般建議使用RBAC 來對kubernetes 進(jìn)行角色權(quán)限控制, kubernetes 將證書中的CN 字段 作為User, O 字段作為 Group
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。