自学内容网 自学内容网

K8S如何让worker使用kubectl命令(RBAC方法)

背景

目前集群规划如下

1eb743bc6a1aeb9db5f17cf038b375f3.png

kubeadm安装集群master节点默认能使用kubectl命令,worker则不能使用。这是因为worker节点没授权。当然,你可以通过以下方式授权

mkdir .kube
scp master1:/root/.kube/config .kube/

但这样无疑给了worker节点非常大的权限,如何限制用户在worker的权限呢?(用户只有worker节点的登录密码,master节点用户是登录不上的)为了实现限制用户权限的需求,则要使用RBAC进行控制。

以下为worker使用者授权名称空间default的pod的查看权限

证书相关操作(生成与签名)

证书流程如下

在这里插入图片描述

申请者(test4)操作

# 创建私钥 保存在当前目录 文件名叫test4user.key
openssl genrsa -out test4user.key 2048
 
# 用此私钥创建一个csr(证书签名请求)文件
openssl req -new -key test4user.key -subj "/CN=test4user" -out test4user.csr

管理者(master)操作

以下可见,master节点有ca私钥,worker只有证书,所以签名证书只有管理员master才能做到

在这里插入图片描述
在这里插入图片描述

# 把签名请求文件csr给管理员(master),管理员用ca私钥、证书生成证书
openssl x509 -req -in test4user.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out test4user.crt -days 365

集群设置

# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!命令1命令2只执行其中一条即可

# !!!!!!!!!!!!!!!!!!!!命令1
# 添加集群信息(默认是在~/.kube/config,用--kubeconfig指定参数)
# k8s的worker节点也会有ca证书,默认位置在/etc/kubernetes/pki/ca.crt
kubectl config set-cluster kubernetes --server=https://10.0.2.18:8443 --certificate-authority=/etc/kubernetes/pki/ca.crt --kubeconfig=/root/.kube/test4user_config

# !!!!!!!!!!!!!!!!!!!!命令2
# 添加集群信息(此处是~/.kube/config)
# worker节点推荐执行这个
# --server=https://10.0.2.18:8443 这个是我集群的负载均衡,你们可以改成master的ip加6443端口
kubectl config set-cluster kubernetes --server=https://10.0.2.18:8443 --certificate-authority=/etc/kubernetes/pki/ca.crt

# 添加用户信息
kubectl config set-credentials test4user --client-certificate=test4user.crt --client-key=test4user.key --embed-certs=true

# 添加上下文信息(环境)
kubectl config set-context test4user@kubernetes --cluster=kubernetes --user=test4user

# 查看当前上下文(环境)
kubectl config get-contexts

# 使用上下文
kubectl config use-context test4user@kubernetes

# 查看当前上下文
kubectl config get-contexts

6f3910d1c1a9f0ea040357d612ff1c77.png

授权(master操作)

cat >test4user-role-bind.yaml<<EOF
kind: Role  # 角色
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: test4user-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"] #权限只读
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test4user-rolebinding
  namespace: default
subjects: #绑定主体
- kind: User
  name: test4user
  apiGroup: rbac.authorization.k8s.io
roleRef: #绑定角色
  kind: Role
  name: test4user-role
  apiGroup: rbac.authorization.k8s.io
EOF
kubectl apply -f test4user-role-bind.yaml

测试验证

kubectl get pods
kubectl get pods -n default
kubectl get pods -n kube-system
kubectl get nodes

原文地址:https://blog.csdn.net/m0_53683186/article/details/145277076

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!