概述
訪問K8S集羣,需要經過三個步驟完成具體操作
- 認證
- 鑑權(授權)
- 准入控制
進行訪問時,過程中需要經過 ApiServer,做統一協調,比如門衛,訪問過程中需要證書、token、或者用戶名+密碼,如果訪問pod需要 ServiceAccount
認證
傳輸安全:對外不暴露8080端口,只能內部訪問,對外使用端口 6443
認證:客戶端身份認證常用方法,
- https:證書認證,基於CA證書;
- http: token 認證,通過 token 識別用戶(Node加入 master),基本認證(用戶名+密碼)
鑑權(授權)
基於RBAC進行鑑權操作
基於角色訪問控制
准入控制
是一個准入控制器列表,如果列表中有就通過,沒有不讓通過
RBAC
基於角色的訪問控制
角色
- role:特定命名空間訪問權限
- clusterRole:所有命名空間訪問權限
角色綁定
- roleBinding: 角色綁定到主體
- ClusterRoleBinding: 集羣角色綁定到主體
主體
- user:用戶
- group: 用戶組
- serviceAccount: 服務帳號
RBAC 實現
rbac-role.yaml
rbac-bolebinding.yaml
# 創建命名空間
[root@k8smaster ~]# kubectl create ns roledemo
# 創建pod
[root@k8smaster ~]# kubectl run nginx --image=nginx -n roledemo
[root@k8smaster ~]# vi rbac-role.yaml
# 創建 rbac-role.yaml,內容見上圖
[root@k8smaster ~]# kubectl apply -f rbac-role.yaml
# 查看角色
[root@k8smaster ~]# kubectl get role -n roledemo
# 創建角色綁定 rbac-rolebinding.yaml
[root@k8smaster ~]# vi rbac-rolebinding.yaml
# 創建 rbac-rolebinding.yaml
[root@k8smaster ~]# kubectl apply -f rbac-rolebinding.yaml
# 查看角色
[root@k8smaster ~]# kubectl get role,rolebinding -n roledemo
使用證書識別身份
rabc-user.sh
cat > mary-csr.json <<EOF
{
"CN": "mary",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes mary-csr.json | cfssljson -bare mary
kubectl config set-cluster kubernetes \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://192.168.31.63:6443 \
--kubeconfig=mary-kubeconfig
kubectl config set-credentials mary \
--client-key=mary-key.pem \
--client-certificate=mary.pem \
--embed-certs=true \
--kubeconfig=mary-kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=mary \
--kubeconfig=mary-kubeconfig
kubectl config use-context default --kubeconfig=mary-kubeconfig
[root@k8smaster ~]# mkdir mary
[root@k8smaster ~]# cd mary
# 詳細內容見上文
[root@k8smaster mary]# vi rabc-user.sh
# 將證書複製到 mary 目錄中,具體文件(私聊)
[root@k8smaster mary]# cp ./k8s/ca* ./
[root@k8smaster mary]# ls
ca-config.json ca.scr ca-csr.json ca-key.pem ca.pem rabc-user.sh
# 會多出一些 myar* 證書
[root@k8smaster mary]# bash rabc-user.sh
# 查看 mary-kubeconfig
[root@k8smaster mary]# bash mary-kubeconfig
# 查看 pod
[root@k8smaster mary]# kubectl get pods -n roledemo