普通用戶的信息無法通過 API 調用添加到集群中。Kubernetes 能夠提供由集群的證書 機構簽名的合法證書的用戶是通過身份認證的用戶。基於這樣的配置,Kubernetes 使用證書中的 'subject' 的通用名稱(Common Name)字段(例如,"/CN=bob")來 確定用戶名。接下來,基於角色訪問控制(RBAC)子系統會確定用戶是否有權針對 某資源執行特定的操作。
1、創建證書
1.1、k8s證書和私鑰:
kubeasz安裝的k8s集群:
kubernetes-ca的私鑰和公鑰:ca.pem和ca-key.pem
管理服務器上/etc/kubeasz/clusters/myland-01/ssl/ ca.pem和ca-key.pem #myland-01為k8s集群名稱
master節點:在/etc/kubernetes/ssl/下
kubeadm安裝的k8s集群:
私鑰和公鑰:ca.key和ca.crt
位置: master節點:在/etc/kubernetes/pki/ 下
1.2、新建文件夾用於工作目錄,為了輸入簡單也可以把上述ca.pem和ca-key.pem也復制到這個文件夾
mkdir pki
cd pki
cp /etc/kubeasz/clusters/myland-01/ssl/ca.pem ./
cp /etc/kubeasz/clusters/myland-01/ssl/ca-key.pem ./
1.3、創建用戶的私鑰(如:user1)
(umask 077;openssl genrsa -out user1.key 2048)
1.4、創建證書簽署請求
openssl req -new -key user1.key -out user1.csr -subj "/O=myland-01 /CN=user1"
O:組織名 CN:用戶名
1.5、簽署證書
openssl x509 -req -in user1.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out user1.crt -days 365
2、創建配置文件
2.1、集群配置
kubectl config set-cluster myland-01 --server=https://10.0.8.101:6443 \
--certificate-authority=ca.pem \
--embed-certs=true \
--kubeconfig=/data/project/pki/user1.conf
2.2、用戶配置
kubectl config set-credentials user1 \
--client-certificate=/data/project/pki/user1.crt \
--client-key=user1.key \
--embed-certs=true \
--kubeconfig=/data/project/pki/user1.conf
2.3、創建context
kubectl config set-context user1@myland-01 \
--cluster=myland-01 \
--user=user1 \
--kubeconfig=/data/project/pki/user1.conf
查看該kubeconfig信息
2.4、切換context
kubectl config use-context user1@myland-01 --kubeconfig=/data/project/pki/user1.conf
3、綁定角色
上述操作完成后,用戶還沒有具體的訪問權限,創建Role和RoleBinding,為該用戶授權
只有test名稱空間的相關權限

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: test
name: pods-reader
rules:
- apiGroups: [""]
resources: ["pods","services","pods/*"]
verbs: ["get","watch","list","create"]

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: user1
namespace: test
subjects:
- kind: User
name: user1
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pods-reader
apiGroup: rbac.authorization.k8s.io
4、驗證
kubectl --kubeconfig /data/project/pki/user1.conf get pods -n test