Kubernetes CKA課程筆記 41
前面39篇提過Kubernetes雖不管理User或Groups
但是可以依賴外部來源來定義User或Groups
其中一個是憑證(Certificates)機制
甚至Kubernetes自己也可以是CA(Certificate Authority)做簽署
所以本篇大綱如下,將會製作出Client端憑證供User — hog使用
1.透過openssl工具製作出Client憑證私key(屬於hog的憑證私key),並以此key建憑證請求檔(csr)
2.將上述憑證請求檔(csr),裡面其實挾帶著未簽署的公鑰,並以此建立出K8s元件 — CertificateSigningRequest
3.以Admin身分批准(Approve)該CertificateSigningRequest
4.完成上述第三步同時將得到簽署後的公鑰憑證檔(crt),User — hog將可透過指定的ca.crt(描述K8s為簽署者),第一步的憑證私鑰,最後簽署得到的公鑰憑證檔(crt),有這三樣hog即可與K8s Cluster溝通了
1.透過openssl工具製作出Client憑證私key(屬於hog的憑證私key),並以此key建憑證請求檔(csr)
首先因為需要使用到openssl工具,所以先確認master機台上有這個工具
可以執行版本確認指令查看是否存在:
openssl verssion
看起來是AWS機台有裝這個工具,接著要用工具建Client憑證private key執行:
openssl genrsa -out {名稱}.key {size,通常是用2048}
dev-hog.key(憑證私鑰)內容如下:
接著有了Client憑證私鑰,再來要用這個私鑰建立憑證請求檔(csr),執行:
openssl req -new -key {私鑰} -subj “{給予主題名,通常格式為/CN={名稱}}” -out {名稱}.csr
(其中subj CN名稱是K8s辨識使用的名稱,這邊就用Client的名稱)
dev-hog.csr(憑證請求檔)內容如下:
至此就完成第一步了
2.將上述憑證請求檔(csr),裡面其實挾帶著未簽署的公鑰,並以此建立出K8s元件 — CertificateSigningRequest
接著要製作K8s元件 — CertificateSigningRequest 找到K8s官網:
直接在master機上面建立該Configuration File檔:
進去後貼上官網範例:
然後改改名稱:
接著還要回填request內容,其內容需要有base64加密,官網也有告知方式:
所以開另一個putty去拿,執行:
cat {憑證請求檔}|base64|tr -d "\n"
接著再改改裡面的有效期限:
儲存!
接著用常常使用的指令來實際建立K8s元件:
理由是我們參考的官方文件是1.22版的K8s,但是我們的K8s Cluster是1.21版:
這個屬性是1.22才實裝的,所以我們還不能用!所以:
接著再次建立元件:
並透過指令確認其狀態,執行:
kubectl get csr
如上圖,dev-hog的K8s"憑證簽署請求(CertificateSigningRequest)"元件
狀態是Pending,i.e.等待被簽署!
建立”憑證簽署請求(CertificateSigningRequest)”元件請求者是
kubernetes-admin(也是前面執行kubectl apply -f指令建立的身分)
至於為什麼會帶"kubernetes-admin"身分,在最早執行kubectl指令有談到
在位於目錄:~/.kube內有一個config是建立給admin使用
裡面描述了"執行者"是誰,並要跟"哪一個cluster"溝通的相關設定
用以指令查看大略的該檔案內容,執行(後面A2表示顯示兩行):
cat ~/.kube/config |grep kubernetes-admin -A2
並且其實”kubernetes-admin”身分
也可以簽署並Approve這個憑證簽署請求(CertificateSigningRequest)
3.以Admin身分批准(Approve)該CertificateSigningRequest
所以接著要繼續用”kubernetes-admin”身分來Approve
用指令查看該怎麼執行:
kubectl certificate --help
所以實際要approve的指令如下:
kubectl certificate approve {CertificateSigingRequest名稱}
CertificateSigingRequest元件就被
kubernetes-admin簽署成功了!
4.完成上述第三步同時將得到簽署後的公鑰憑證檔(crt),User — hog將可透過指定的ca.crt(描述K8s為簽署者),第一步的憑證私鑰,最後簽署得到的公鑰憑證檔(crt),有這三樣hog即可與K8s Cluster溝通了
所以現在要將簽署後的公鑰憑證檔(crt)拿給hog
其內容就在CertificateSigningRequest元件內,所以執行指令查看:
kubectl get csr {名稱} -o yaml
將上述由K8s status產出的"已簽署"的憑證內容作base64解密,執行:
echo '{上面那一大段貼過來}' |base64 --decode
看起來解出來沒問題,所以在將上述指令加上導入文字檔dev-hog.crt內:
echo '{上面那一大段貼過來}' |base64 --decode > dev-hog.crt
至此即完成!!
現在我有:
- hog的Client端憑證私鑰:dev-hog.key
- hog的Clinet端憑證請求檔:dev-hog.csr
- hog的Client端憑證(簽署後)公鑰檔:dev-hog.crt
有了以上三個檔案就可以跟簽署的K8s Cluster溝通了!!!