• k8s集群安全机制


    概述

    (1)访问k8s集群的时候,需要经过三个步骤完成具体操作:

    • 认证
    • 鉴权
    • 准入控制

    (2)进行访问时候,过程中都需要经过apiServer,apiServer做统一协调工作,访问过程需要证书、token、或者用户名+密码,如果访问Pod还需要serviceAccount

    (3)认证:

    • 传输安全:对外不暴露8080端口,只能内部访问,对外使用端口6443
    • 认证:客户端身份认证常用方式:
      • https证书认证(基于CA证书)
      • http token认证,通过token识别用户
      • http基本认证,用户名+密码认证

    (4)鉴权(授权):
    基于RBAC进行鉴权操作
    基于角色访问控制

    (5)准入控制:
    就是准入控制器的列表,如果列表有请求内容通过,没有则拒绝。

    RBAC介绍

    基于角色的访问控制

    角色:

    • role:特定命名空间访问权限
    • ClusterRole:所有命名空间访问权限

    角色绑定:

    • roleBinding:角色绑定到主体
    • ClusterRoleBinding:集群角色绑定到主体

    主体:

    • user:用户
    • group:用户组
    • serviceAccount:服务账号

    在这里插入图片描述

    RBAC实现鉴权

    创建命名空间

    kubectl create ns roledemo
    
    • 1

    在新创建的命名空间创建pod

    kubectl run nginx --image=nginx -n roledemo
    kubectl get pods -n roledemo
    
    • 1
    • 2

    创建角色

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata: 
      namespace: roledemo
      name: pod-reader
    rules:
    - apiGroups: [""] # ""indicates the core API group
      resources: ["pods"]
      verbs: ["get","watch","list"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    kubectl apply -f rbac-role.yaml
    kubectl get role -n roledemo
    
    • 1
    • 2

    创建角色绑定

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: read-pods
      namespace: roledemo
    subjects:
    - kind: User 
      name: lucy # Name is case sensitive
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role # this must be Role or ClusterRole
      name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
      apiGroup: rbac.authorization.k8s.io
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    kubectl apply -f rbac-rolebinding.yaml
    kubectl get role,rolebinding -n roledemo
    
    • 1
    • 2

    使用证书识别身份

    mkdir lucy
    vi rbac-user.sh
    cat > lucy-csr.json <<EOF
    {
      "CN": "lucy",
      "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 lucy-csr.json | cfssljson -bare lucy
    
    kubectl config set-cluster kubernetes \
      --certificate-authority=ca.pem \
      --embed-certs=true \
      --server=https://192.168.31.63:6443 \
      --kubeconfig=lucy-kubeconfig
    
    kubectl config set-credentials lucy \
      --client-key=lucy-key.pem \
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    bash rbac-user.sh
    
    • 1
  • 相关阅读:
    WebAssembly上手:基础指南
    我用规则引擎实现了消除if语句
    JavaWeb-day28_HTML
    支持向量机之松弛因子与线性支持向量机
    500 miles
    Java--Spring之IoC控制反转;基于注解的DI
    鼠标滚轮滚动切换内容
    Node.js如何处理多个请求?
    【目标检测】37、FreeAnchor: Learning to Match Anchors for Visual Object Detection
    [iOS]-网络请求总结
  • 原文地址:https://blog.csdn.net/qq_41242680/article/details/126536303