K8S集群创建用户并赋权访问特定namespace

说明

具体参考K8S集群创建用户并赋权访问特定namespace
这里主要提供脚本。

创建用户以及配置环境

在任意目录编辑create.sh

# 创建wcuser1的key
openssl genrsa -out wcuser1.key 2048
openssl req -new -key wcuser1.key -out wcuser1.csr -subj "/CN=wcuser1"
openssl x509 -req -in wcuser1.csr -CA /opt/cluster/ssl/rootca/rootca.pem -CAkey /opt/cluster/ssl/rootca/rootca-key.pem -CAcreateserial -out wcuser1.crt -days 365
openssl x509 -in wcuser1.crt -text -noout

# 更改集群配置和用户上下文环境
## 设置集群
kubectl config set-cluster wecloud-dev-cluster --server=https://xxx.xxx.xxx.xxx:6443 --certificate-authority=/opt/cluster/ssl/rootca/rootca.pem --embed-certs=true
## 为wcuser1用户项设置基础认证选项
kubectl config set-credentials wcuser1 --client-certificate=/opt/wecloud/dev/config/user/wcuser1.crt --client-key=/opt/wecloud/dev/config/user/wcuser1.key --embed-certs=true
## 设置上下文
kubectl config set-context wcuser@wecloud-dev --cluster=wecloud-dev-cluster --user=wcuser1 --namespace=wecloud-dev
## 切换到wcuser@wecloud-dev环境
kubectl config use-context wcuser@wecloud-dev

执行该脚本之前需要先创建wecloud-dev命名空间。

执行完脚本后,k8s的上下文环境已经切换到wcuser@wecloud-dev,可以使用kubectl get pods,svc等命令去验证。

没赋权状态下,pod、service等信息都无法获取,需要进行授权。

授权

k8s需要先切换回到管理员身份,编辑wecloud-dev.yaml

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: wecloud-dev
  name: wecloud-dev-role
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: wecloud-dev-rolebinding
  namespace: wecloud-dev
subjects:
- kind: User
  name: wcuser1
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: wecloud-dev-role
  apiGroup: rbac.authorization.k8s.i

这里对该namespace下所有的资源都可以进行操作。

执行kubectl apply -f wecloud-dev.yaml即可完成授权。

导出config配置文件

如果需要提供给外部使用该namespace的配置文件,可以执行以下脚本

server=https://xxx.xxx.xxx.xxx:6443
namespace=wecloud-dev
cluster_ca=$(cat /opt/cluster/ssl/rootca/rootca.pem |base64 -w 0)
user_ca=$(cat wcuser1.crt | base64 -w 0)
token=$(cat wcuser1.key | base64 -w 0)
 
echo "apiVersion: v1
kind: Config
clusters:
 - name: wecloud-dev-cluster
   cluster:
     certificate-authority-data: ${cluster_ca}
     server: ${server}
contexts:
 - name: wcuser@wecloud-dev
   context:
     cluster: wecloud-dev-cluster
     namespace: ${namespace}
     user: wcuser1
current-context: wcuser@wecloud-dev
users:
 - name: wcuser1
   user:
     client-certificate-data: ${user_ca}
     client-key-data: ${token}
"> wecloud-dev.kubeconfig

wecloud-dev.kubeconfig文件就是提供操作该namespace的配置文件。

posted @ 2022-02-19 14:59  塵埃飛揚  阅读(611)  评论(0)    收藏  举报