k8s kubeconfig配置及对普通用户进行权限配置
1、给现有kubeconfig中添加集群
# 设置集群信息
##注意:以下证书用的是k8s server的ca证书
kubectl config --kubeconfig=./config-test set-cluster {{clusterName}} --embed-certs=true --certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt
# 设置user信息
##注意:以下证书用的都是客户端用户对应的证书及密钥
kubectl config --kubeconfig=./config-test set-credentials {{userName}} --client-certificate=/var/lib/rancher/k3s/server/tls/client-admin.crt --client-key=/var/lib/rancher/k3s/server/tls/client-admin.key --embed-certs=true
# 设置上下文
kubectl config --kubeconfig=./config-test set-context {{userName}}@{{clusterName}} --cluster={{clusterName}} --user=admin@{{userName}}
2、授权kubectl用户能查看所有名称空间的pod的权限
2.1、在k8s集群中添加用户及认证
# 生成私钥文件
(umask 077; openssl genrsa -out getpod.key 2048)
# 生成证书请求文件
## 注意:这里的 CN 才是真正的用户名
openssl req -new -key getpod.key -out getpod.csr -subj "/CN=getpod"
# 生成证书文件
openssl x509 -req -in getpod.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out getpod.crt -days 3650
-CA 使用k8s集群server的ca证书文件
-CAkey 使用k8s集群server ca证书的密钥文件
- 使用以上授权文件添加新的kubeconfig配置文件
# 设置集群信息
##注意:以下证书用的是k8s server的ca证书
kubectl config --kubeconfig=./config-test set-cluster kubernetes-128 --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt
# 设置user信息
##注意:以下证书用的都是客户端用户对应的证书及密钥
##注意:这里的username必须和上面证书请求时的 CN 相同
kubectl config --kubeconfig=./config-test set-credentials getpod --client-certificate=getpod.crt --client-key=getpod.key --embed-certs=true
# 设置上下文
kubectl config --kubeconfig=./config-test set-context getpod@kubernetes-128 --cluster=kubernetes-128 --user=getpod
# 编辑config-test文件
[root@128-master tmp]# cat config-test
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: {省略}
server: https://192.168.1.20:6443 #编辑这里,填写自己集群的apiserver地址
name: kubernetes-128
contexts:
- context:
cluster: kubernetes-128
user: test
name: test@kubernetes-128
current-context: ""
kind: Config
preferences: {}
users:
- name: test
user:
client-certificate-data: {省略}
client-key-data: {省略}
2.2、给新用户授权
# 编辑配置文件,创建一个拥有所有名称空间下pod查看权限的clusterrole
[root@xianchaomaster1 sa]# vim getpod-clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: getpod-clusterrole
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
# 应用配置文件
[root@xianchaomaster1]# kubectl apply -f getpod-clusterrole.yaml
# 创建一个 clusterrolebinding 进行授权
[root@xianchaomaster1]# kubectl create clusterrolebinding getpod --clusterrole=getpod-clusterrole --user=getpod
2.3、使用新的kubeconfig文件访问集群
# 添加一个 getpod 的普通用户
useradd getpod
mkdir /home/getpod/.kube
cp config-test /home/getpod/.kube/config
chown -R getpod:getpod /home/getpod/.kube
# 测试查看集群pod
su - getpod
kubectl config use-context getpod@kubernetes-128
kubectl get pods -A
3、在 test 名称空间下给用户授予管理员权限
3.1、在k8s集群中添加用户及认证
# 生成私钥文件
(umask 077; openssl genrsa -out admin.key 2048)
# 生成证书请求文件
## 注意:这里的 CN 才是真正的用户名
openssl req -new -key admin.key -out admin.csr -subj "/CN=admin"
# 生成证书文件
openssl x509 -req -in admin.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out admin.crt -days 3650
-CA 使用k8s集群server的ca证书文件
-CAkey 使用k8s集群server ca证书的密钥文件
- 使用以上授权文件添加新的kubeconfig配置文件
# 设置集群信息
##注意:以下证书用的是k8s server的ca证书
kubectl config --kubeconfig=./config-test set-cluster kubernetes-128 --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt
# 设置user信息
##注意:以下证书用的都是客户端用户对应的证书及密钥
##注意:这里的username要和上面证书请求时的 CN 相同
kubectl config --kubeconfig=./config-test set-credentials admin --client-certificate=admin.crt --client-key=admin.key --embed-certs=true
# 设置上下文
kubectl config --kubeconfig=./config-test set-context admin@kubernetes-128 --cluster=kubernetes-128 --user=admin
# 编辑config-test文件
[root@128-master tmp]# cat config-test
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: {省略}
server: https://192.168.1.20:6443 #编辑这里,填写自己集群的apiserver地址
name: kubernetes-128
contexts:
- context:
cluster: kubernetes-128
user: test
name: test@kubernetes-128
current-context: ""
kind: Config
preferences: {}
users:
- name: test
user:
client-certificate-data: {省略}
client-key-data: {省略}
3.2、给新用户授权
# 创建一个 clusterrolebinding 进行授权
[root@128-master tmp]# kubectl create ns test
[root@128-master tmp]# kubectl -n test create rolebinding admin --clusterrole=cluster-admin --user=admin
3.3、使用新的kubeconfig文件访问集群
# 添加一个 admin的普通用户
useradd admin
mkdir /home/admin/.kube
cp config-test /home/admin/.kube/config
chown -R admin:admin /home/admin/.kube
# 测试
su - admin
kubectl config use-context admin@kubernetes-128
kubectl get rolebinding -n test
评论区