一、使用 rbac授權,token的方式連接k8s
1、rbac授權
Jenkins通過kubernetes-plugin對k8s進行操作,需要在k8s內提前進行rbac授權。為方便管理,我們為其綁定cluster-admin
角色。當然也可以進一步縮小使用權限。
#創建serviceaccounts kubectl create sa jenkins #對jenkins做cluster-admin綁定 kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=default:jenkins
2、獲取token
kubernetes-plugin與k8s連接時,並不是直接使用serviceaccount,而是通過token。因此我們需要獲取serviceaccount:jenkins對應的token。
# 1.查看sa [root@k8s-master updates]# kubectl get sa -n default NAME SECRETS AGE default 1 116d jenkins 1 20s # 2.查看secret [root@k8s-master updates]# kubectl describe sa jenkins -n default Name: jenkins Namespace: default Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: jenkins-token-kgxch Tokens: jenkins-token-kgxch Events: <none> 3.獲取token [root@k8s-master updates]# kubectl describe secrets jenkins-token-kgxch -n default Name: jenkins-token-kgxch Namespace: default Labels: <none> Annotations: kubernetes.io/service-account.name: jenkins kubernetes.io/service-account.uid: 07d8890d-12cc-11eb-8ca1-000c29824e3f Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 7 bytes token: ####這里就是所需的token
3.添加認證
獲取到的token解密值,需要在Jenkins master中添加為secret text類型的secret,才能被kubernetes-plugin使用。
4、kubernetes plugin與k8s連接配置
- kubernetes地址:為k8s api server地址,通過調用apiserver操作k8s。可通過以下來查看:
-
[root@k8s-master images]# kubectl cluster-info Kubernetes master is running at https://192.168.0.211:6443 KubeDNS is running at https://192.168.0.211:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
-
- 憑據:kubernetes plugin可以通過key或憑據的方式與k8s進行認證,方便起見,我們采用憑據的方式,使用我們此前創建的
secret text
憑據,此時我們需要禁用HTTPS證書檢查
。 - kubernetes命令空間:使用默認的default,同時serviceaccount也在此空間內。
點擊連接測試,可以看到k8s已經連接成功
二、使用證書的方式連接k8s
1、通過解碼獲取kubectl使用的admin證書
查看 /root/.kube/config文件,文件中有三個值 certificate-authority-data 、client-certificate-data 、 client-key-data
解碼它們獲得證書 ,注意將上面的值替換稱自己的一大長傳字符串
echo certificate-authority-data | base64 -d > ca.crt echo client-certificate-data | base64 -d > client.crt echo client-key-data | base64 -d > client.key
根據這三個文件生成一個PKCS12格式的客戶端證書文件
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
注意生成證書的時候,一定要填寫密碼,后面會用到
2、添加認證
將生成的 cert.pfx 上傳到憑證
3、kubernetes plugin與k8s連接配置
將ca.crt中的內容填寫到 Kubernetes server certificate key 字段
完成后點擊測試連接查看是否成功