连接国外网站做端口映射优化大师网页版
需求:
我作为Kubernetes的集群管理员,前一段时间有收到一个需求,需要我创建一个受限访问的用户kubeconfig,提供给跳板机的某用户。
该kubeconfig需要在非Kubernetes节点的某跳板机上由指定的非root用户使用,该用户仅能访问kubernetes集群中的某一个namespace下的资源,仅对该namespace下的资源有完整的权限。
实现:
前置条件:登录到kubernetes的主节点上,在主节点上做以下步骤。
第一步,准备kubeconfig的模板文件命名为"config-template",以下有一些占位符等,请注意:
apiVersion: v1
clusters:
- cluster:certificate-authority-data: LS0tLS1CRUdJTiBDRVJ....server: http://<your-addr-or-delegate-ip>:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: $USERnamespace: $NAMESPACEname: $USER@kubernetes
current-context: $USER@kubernetes
kind: Config
preferences: {}
users:
- name: $USERuser:client-certificate-data: $USER_CERT client-key-data: $USER_KEY
注意:关于certificate-authority-data这部分,此处为集群使用的CA证书,不用做修改,保持不变。
第二步,准备用于限制权限的RBAC模板文件,命名为"rb-template",同样有占位符,请注意:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: $USER_NAME-adminnamespace: $NAMESPACE
subjects:- kind: Username: $USER_NAMEapiGroup: rbac.authorization.k8s.io
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: admin
第三步,准备用于生成kubeconfig的脚本,该脚本会使用openssl结合主节点的CA证书和key生成签发kubeconfig所需的certificate和key,替换第一步中的占位符等,请仔细阅读后,用root权限执行:
#! /bin/bash
USER_NAME=<your_jumpserver_username> #请手动更改此处
NAMESPACE=<your_namespace> #请手动更改此处openssl genrsa -out $USER_NAME.key 2048 &&
openssl req -new -key $USER_NAME.key -out $USER_NAME.csr -subj "/CN=$USER_NAME" &&
openssl x509 -req -in $USER_NAME.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out $USER_NAME.crt -days 3650yes | cp config-template config-$USER_NAME
yes | cp rb-template rb-$USER_NAME.yaml
USER_CERT=`openssl base64 -A -in $USER_NAME.crt`
USER_KEY=`openssl base64 -A -in $USER_NAME.key`#USER_CERT=$(echo $USER_CERT)
#USER_KEY=$(echo $USER_KEY)echo $USER_CERT | base64 -d
echo $USER_KEY | base64 -dsed -i "s/\$USER_CERT/$USER_CERT/g" config-$USER_NAME
sed -i "s/\$USER_KEY/$USER_KEY/g" config-$USER_NAME
sed -i "s/\$USER/$USER_NAME/g" config-$USER_NAME
sed -i "s/\$NAMESPACE/$NAMESPACE/g" config-$USER_NAME
sed -i "s/\$USER/$USER_NAME/g" rb-$USER_NAME.yaml
sed -i "s/\$NAMESPACE/$NAMESPACE/g" rb-$USER_NAME.yaml
第四步,经过以上三步,会得到rb-xxx.yaml和config-xxx两个文件,执行以下命令,用于添加rolebinding的权限:
kubectl apply -f rb-xxx.yaml
第五步,将config-xxx的文件拷贝到跳板机的指定用户的家目录下,并放在.kube目录下改名为config,以上四步均在kubernetes的主节点上执行,该步骤需要在跳板机执行,举例如下:
mkdir -p /home/$USER_NAME/.kube
cp config-$USER_NAME /home/$USER_NAME/.kube/config
上一篇:K8S相关小技巧《三》
下一篇:K8S相关小技巧《五》