Kubernetes(K8S) 集羣安全機制

概述

訪問K8S集羣,需要經過三個步驟完成具體操作

  1. 認證
  2. 鑑權(授權)
  3. 准入控制

進行訪問時,過程中需要經過 ApiServer,做統一協調,比如門衛,訪問過程中需要證書、token、或者用戶名+密碼,如果訪問pod需要 ServiceAccount
image

認證

傳輸安全:對外不暴露8080端口,只能內部訪問,對外使用端口 6443
認證:客戶端身份認證常用方法,

  • https:證書認證,基於CA證書;
  • http: token 認證,通過 token 識別用戶(Node加入 master),基本認證(用戶名+密碼)

鑑權(授權)

基於RBAC進行鑑權操作
基於角色訪問控制

准入控制

是一個准入控制器列表,如果列表中有就通過,沒有不讓通過

RBAC

基於角色的訪問控制
image
角色

  • role:特定命名空間訪問權限
  • clusterRole:所有命名空間訪問權限

角色綁定

  • roleBinding: 角色綁定到主體
  • ClusterRoleBinding: 集羣角色綁定到主體

主體

  • user:用戶
  • group: 用戶組
  • serviceAccount: 服務帳號

RBAC 實現

rbac-role.yaml
image
rbac-bolebinding.yaml
image

# 創建命名空間
[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
使用證書識別身份

image
image

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

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章