您好,登錄后才能下訂單哦!
CFSSL是CloudFlare的PKI / TLS瑞士×××。它既是命令行工具,也是用于簽名,驗證和捆綁TLS證書的HTTP API服務器.
1.下載安裝CFSSL(用于簽名,驗證和捆綁TLS證書的HTTP API工具)(master節點)
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創建CA(Certificate Authority)(master節點)
mkdir /root/ssl
cd /root/ssl
cfssl print-defaults config > config.json # 默認配置模板
cfssl print-defaults csr > csr.json #默認csr請求模板
# 根據config.json文件的格式創建如下的ca-config.json文件
# 過期時間設置成了 87600h
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
知識點:
ca-config.json:可以定義多個 profiles,分別指定不同的過期時間、使用場景等參數;后續在簽名證書時使用某個 profile;此實例只有一個kubernetes模板。
signing:表示該證書可用于簽名其它證書;生成的 ca.pem 證書中 CA=TRUE;
server auth:表示client可以用該 CA 對server提供的證書進行驗證;
client auth:表示server可以用該CA對client提供的證書進行驗證;
注意標點符號,最后一個字段一般是沒有都好的。
3 創建證書請求
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
知識點:
"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(公鑰)
知識點: cfssljson只是整理json格式,-bare主要的意義在于命名 (個人見解,以便理解,勿噴)
5 創建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
知識點:
這個證書目前專屬于 apiserver加了一個 *.kubernetes.master 域名以便內部私有 DNS 解析使用(可刪除);至于很多人問過 kubernetes 這幾個能不能刪掉,答案是不可以的;因為當集群創建好后,default namespace 下會創建一個叫 kubenretes 的 svc,有一些組件會直接連接這個 svc 來跟 api 通訊的,證書如果不包含可能會出現無法連接的情況;其他幾個 kubernetes 開頭的域名作用相同
hosts包含的是授權范圍,不在此范圍的的節點或者服務使用此證書就會報證書不匹配錯誤。
10.254.0.1是指kube-apiserver 指定的 service-cluster-ip-range 網段的第一個IP。
#hosts配置區域,即一個證書的網站可以是*.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
知識點: -config 引用的是模板中的默認配置文件,-profiles是指定特定的使用場景,比如ca-config.json中的kubernetes區域
7 創建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
知識點:
這個admin 證書,是將來生成管理員用的kube config 配置文件用的,現在我們一般建議使用RBAC 來對kubernetes 進行角色權限控制, kubernetes 將證書中的CN 字段 作為User, O 字段作為 Group
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。