概述
访问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