溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

發(fā)布時(shí)間:2020-07-29 12:42:06 來(lái)源:網(wǎng)絡(luò) 閱讀:206 作者:IT人故事 欄目:云計(jì)算

原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì),謝謝!
原文鏈接地址:『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

接上次的繼續(xù)認(rèn)證版的k8s搭建。

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

kubectl

準(zhǔn)備證書(shū)
#kubectl證書(shū)放在這,由于kubectl相當(dāng)于系統(tǒng)管理員,老鐵使用admin命名
mkdir -p /etc/kubernetes/ca/admin
#準(zhǔn)備admin證書(shū)配置 - kubectl只需客戶端證書(shū),因此證書(shū)請(qǐng)求中 hosts 字段可以為空
cp ~/kubernetes-starter/target/ca/admin/admin-csr.json /etc/kubernetes/ca/admin/
cd /etc/kubernetes/ca/admin/
#使用根證書(shū)(ca.pem)簽發(fā)admin證書(shū)
cfssl gencert \
        -ca=/etc/kubernetes/ca/ca.pem \
        -ca-key=/etc/kubernetes/ca/ca-key.pem \
        -config=/etc/kubernetes/ca/ca-config.json \
        -profile=kubernetes admin-csr.json | cfssljson -bare admin
#老鐵最終要的是admin-key.pem和admin.pem
ls
admin.csr  admin-csr.json  admin-key.pem  admin.pem
8.2 配置kubectl
#指定apiserver的地址和證書(shū)位置(ip自行修改)
kubectl config set-cluster kubernetes \
        --certificate-authority=/etc/kubernetes/ca/ca.pem \
        --embed-certs=true \
        --server=https://192.168.68.101:6443
#設(shè)置客戶端認(rèn)證參數(shù),指定admin證書(shū)和秘鑰
kubectl config set-credentials admin \
        --client-certificate=/etc/kubernetes/ca/admin/admin.pem \
        --embed-certs=true \
        --client-key=/etc/kubernetes/ca/admin/admin-key.pem
#關(guān)聯(lián)用戶和集群
kubectl config set-context kubernetes \
        --cluster=kubernetes --user=admin
#設(shè)置當(dāng)前上下文
kubectl config use-context kubernetes

#設(shè)置結(jié)果就是一個(gè)配置文件,可以看看內(nèi)容
cat ~/.kube/config

驗(yàn)證master節(jié)點(diǎn)

#可以使用剛配置好的kubectl查看一下組件狀態(tài)
kubectl get componentstatus

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

calico-node(主節(jié)點(diǎn)生成證書(shū),102,103通過(guò)scp拷貝過(guò)去)

準(zhǔn)備證書(shū)

后續(xù)可以看到calico證書(shū)用在四個(gè)地方:

  • calico/node 這個(gè)docker 容器運(yùn)行時(shí)訪問(wèn) etcd 使用證書(shū)
  • cni 配置文件中,cni 插件需要訪問(wèn) etcd 使用證書(shū)
  • calicoctl 操作集群網(wǎng)絡(luò)時(shí)訪問(wèn) etcd 使用證書(shū)
  • calico/kube-controllers 同步集群網(wǎng)絡(luò)策略時(shí)訪問(wèn) etcd 使用證書(shū)
    #calico證書(shū)放在這
    mkdir -p /etc/kubernetes/ca/calico
    #準(zhǔn)備calico證書(shū)配置 - calico只需客戶端證書(shū),因此證書(shū)請(qǐng)求中 hosts 字段可以為空
    cp ~/kubernetes-starter/target/ca/calico/calico-csr.json /etc/kubernetes/ca/calico/
    cd /etc/kubernetes/ca/calico/
    #使用根證書(shū)(ca.pem)簽發(fā)calico證書(shū)
    cfssl gencert \
        -ca=/etc/kubernetes/ca/ca.pem \
        -ca-key=/etc/kubernetes/ca/ca-key.pem \
        -config=/etc/kubernetes/ca/ca-config.json \
        -profile=kubernetes calico-csr.json | cfssljson -bare calico
    #老鐵最終要的是calico-key.pem和calico.pem
    ls

    『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

拷貝主節(jié)點(diǎn)證書(shū)calico

由于calico服務(wù)是所有節(jié)點(diǎn)都需要啟動(dòng)的,需要把這幾個(gè)文件拷貝到每臺(tái)服務(wù)器
** 通過(guò)主節(jié)點(diǎn)拷貝到102,103兩臺(tái)機(jī)器上

#root的密碼都是vagrant
scp -r /etc/kubernetes/ca/ root@192.168.68.102:/etc/kubernetes/ca/
scp -r /etc/kubernetes/ca/ root@192.168.68.103:/etc/kubernetes/ca/

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

確定下主節(jié)點(diǎn)的/etc/kubernetes/ca/ 和 102,103內(nèi)的目錄一致。

更新calico服務(wù)

cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/
systemctl daemon-reload
service kube-calico start

#驗(yàn)證calico(能看到其他節(jié)點(diǎn)的列表就對(duì)啦)
calicoctl node status

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

kubelet

老鐵這里讓kubelet使用引導(dǎo)token的方式認(rèn)證,所以認(rèn)證方式跟之前的組件不同,它的證書(shū)不是手動(dòng)生成,而是由工作節(jié)點(diǎn)TLS BootStrap 向api-server請(qǐng)求,由主節(jié)點(diǎn)的controller-manager 自動(dòng)簽發(fā)。

創(chuàng)建角色綁定(主節(jié)點(diǎn))

引導(dǎo)token的方式要求客戶端向api-server發(fā)起請(qǐng)求時(shí)告訴他你的用戶名和token,并且這個(gè)用戶是具有一個(gè)特定的角色:system:node-bootstrapper,所以需要先將 bootstrap token 文件中的 kubelet-bootstrap 用戶賦予這個(gè)特定角色,然后 kubelet 才有權(quán)限發(fā)起創(chuàng)建認(rèn)證請(qǐng)求。
在主節(jié)點(diǎn)執(zhí)行下面命令

#可以通過(guò)下面命令查詢clusterrole列表
kubectl -n kube-system get clusterrole

#可以回顧一下token文件的內(nèi)容
cat /etc/kubernetes/ca/kubernetes/token.csv

#創(chuàng)建角色綁定(將用戶kubelet-bootstrap與角色system:node-bootstrapper綁定)
kubectl create clusterrolebinding kubelet-bootstrap \
         --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

創(chuàng)建bootstrap.kubeconfig(102,103工作節(jié)點(diǎn))

這個(gè)配置是用來(lái)完成bootstrap token認(rèn)證的,保存了像用戶,token等重要的認(rèn)證信息,這個(gè)文件可以借助kubectl命令生成:(也可以自己寫(xiě)配置)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)
很重要。
0b1bd95b94caa5534d1d4a7318d51b0e
上邊有說(shuō)明這個(gè)咋來(lái)的

#設(shè)置集群參數(shù)(注意替換ip)
kubectl config set-cluster kubernetes \
        --certificate-authority=/etc/kubernetes/ca/ca.pem \
        --embed-certs=true \
        --server=https://192.168.68.101:6443 \
        --kubeconfig=bootstrap.kubeconfig
#設(shè)置客戶端認(rèn)證參數(shù)(注意替換token)
kubectl config set-credentials kubelet-bootstrap \
        --token=0b1bd95b94caa5534d1d4a7318d51b0e\
        --kubeconfig=bootstrap.kubeconfig
#設(shè)置上下文
kubectl config set-context default \
        --cluster=kubernetes \
        --user=kubelet-bootstrap \
        --kubeconfig=bootstrap.kubeconfig
#選擇上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
mkdir -p /var/lib/kubelet
mkdir -p /etc/kubernetes
mkdir -p /etc/cni/net.d
#將剛生成的文件移動(dòng)到合適的位置
mv bootstrap.kubeconfig /etc/kubernetes/
準(zhǔn)備cni配置(102,103工作節(jié)點(diǎn))

copy配置


cp ~/kubernetes-starter/target/worker-node/10-calico.conf /etc/cni/net.d/
kubelet服務(wù)

更新服務(wù)

cp ~/kubernetes-starter/target/worker-node/kubelet.service /lib/systemd/system/
systemctl daemon-reload
service kubelet start

** 登錄101主節(jié)點(diǎn)輸入命令查看狀態(tài)

kubectl get csr
#啟動(dòng)kubelet之后到master節(jié)點(diǎn)允許worker加入(批準(zhǔn)worker的tls證書(shū)請(qǐng)求)
#--------*在主節(jié)點(diǎn)執(zhí)行*---------
kubectl get csr|grep 'Pending' | awk '{print $1}'| xargs kubectl certificate approve
#-----------------------------

#檢查日志
journalctl -f -u kubelet

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

加入到主節(jié)點(diǎn)中。102

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

103請(qǐng)求加入,102已經(jīng)加入

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

kube-proxy(子節(jié)點(diǎn)102,103)

準(zhǔn)備證書(shū)
#proxy證書(shū)放在這
mkdir -p /etc/kubernetes/ca/kube-proxy

#準(zhǔn)備proxy證書(shū)配置 - proxy只需客戶端證書(shū),因此證書(shū)請(qǐng)求中 hosts 字段可以為空。
#CN 指定該證書(shū)的 User 為 system:kube-proxy,預(yù)定義的 ClusterRoleBinding system:node-proxy 將User system:kube-proxy 與 Role system:node-proxier 綁定,授予了調(diào)用 kube-api-server proxy的相關(guān) API 的權(quán)限
cp ~/kubernetes-starter/target/ca/kube-proxy/kube-proxy-csr.json /etc/kubernetes/ca/kube-proxy/
cd /etc/kubernetes/ca/kube-proxy/

#使用根證書(shū)(ca.pem)簽發(fā)calico證書(shū)
cfssl gencert \
        -ca=/etc/kubernetes/ca/ca.pem \
        -ca-key=/etc/kubernetes/ca/ca-key.pem \
        -config=/etc/kubernetes/ca/ca-config.json \
        -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
#老鐵最終要的是kube-proxy-key.pem和kube-proxy.pem
ls

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

生成kube-proxy.kubeconfig配置
#設(shè)置集群參數(shù)(注意替換ip)
kubectl config set-cluster kubernetes \
        --certificate-authority=/etc/kubernetes/ca/ca.pem \
        --embed-certs=true \
        --server=https://192.168.68.101:6443 \
        --kubeconfig=kube-proxy.kubeconfig
#置客戶端認(rèn)證參數(shù)
kubectl config set-credentials kube-proxy \
        --client-certificate=/etc/kubernetes/ca/kube-proxy/kube-proxy.pem \
        --client-key=/etc/kubernetes/ca/kube-proxy/kube-proxy-key.pem \
        --embed-certs=true \
        --kubeconfig=kube-proxy.kubeconfig
#設(shè)置上下文參數(shù)
kubectl config set-context default \
        --cluster=kubernetes \
        --user=kube-proxy \
        --kubeconfig=kube-proxy.kubeconfig
#選擇上下文
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
#移動(dòng)到合適位置
mv kube-proxy.kubeconfig /etc/kubernetes/kube-proxy.kubeconfig
kube-proxy服務(wù)

啟動(dòng)服務(wù)

 mkdir -p /var/lib/kube-proxy
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
systemctl daemon-reload

#安裝依賴軟件
yum -y install conntrack

#啟動(dòng)服務(wù)
service kube-proxy start
#查看日志
journalctl -f -u kube-proxy

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

12. kube-dns

kube-dns有些特別,因?yàn)樗旧硎沁\(yùn)行在kubernetes集群中,以kubernetes應(yīng)用的形式運(yùn)行。所以它的認(rèn)證授權(quán)方式跟之前的組件都不一樣。它需要用到service account認(rèn)證和RBAC授權(quán)。
service account認(rèn)證:
每個(gè)service account都會(huì)自動(dòng)生成自己的secret,用于包含一個(gè)ca,token和secret,用于跟api-server認(rèn)證
RBAC授權(quán):
權(quán)限、角色和角色綁定都是kubernetes自動(dòng)創(chuàng)建好的。老鐵只需要?jiǎng)?chuàng)建一個(gè)叫做kube-dns的 ServiceAccount即可,官方現(xiàn)有的配置已經(jīng)把它包含進(jìn)去了。

準(zhǔn)備配置文件

在官方的基礎(chǔ)上添加的變量,生成適合老鐵我們集群的配置。直接copy就可以啦

cd ~/kubernetes-starter

新的配置沒(méi)有設(shè)定api-server。不訪問(wèn)api-server,它是怎么知道每個(gè)服務(wù)的cluster ip和pod的endpoints的呢?這就是因?yàn)閗ubernetes在啟動(dòng)每個(gè)服務(wù)service的時(shí)候會(huì)以環(huán)境變量的方式把所有服務(wù)的ip,端口等信息注入進(jìn)來(lái)。

創(chuàng)建kube-dns(主節(jié)點(diǎn)101)
kubectl create -f ~/kubernetes-starter/target/services/kube-dns.yaml
#看看啟動(dòng)是否成功
kubectl -n kube-system get pods

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

PS:終于,安全版的kubernetes集群部署完成了。 涉及到的細(xì)節(jié)也非常多,就這都對(duì)了兩篇博文了,如果每個(gè)配置都詳細(xì)解釋估計(jì)得寫(xiě)本書(shū)了。從入門(mén)的角度了解認(rèn)證和授權(quán)。
下面老鐵們使用新集群先溫習(xí)一下之前學(xué)習(xí)過(guò)的命令,然后再認(rèn)識(shí)一些新的命令,新的參數(shù),新的功能。

『高級(jí)篇』docker之kubernetes搭建集群添加認(rèn)證授權(quán)(下)(39)

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI