kubernetes useraccount 集群账号/用户账号 kubeconfig
查看集群账号
查看当前集群账号信息:
kubectl config view
集群和账号相关信息:
apiVersion: v1 clusters: # 集群 - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.1.140:6443 name: kubernetes contexts: - context: # 集群与账号之间的对应关系 cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetes # 集群名称 current-context: kubernetes-admin@kubernetes # 当前用的集群名称 kind: Config preferences: {} users: # 用户 - name: kubernetes-admin # 集群管理员 user: client-certificate-data: REDACTED # 客户端证书 client-key-data: REDACTED # 客户端私钥
切换当前使用的集群账号:
]# kubectl config use-context kubernetes-admin@kubernetes Switched to context "kubernetes-admin@kubernetes".
创建集群账号
创建集群账号 set-credentials:
创建一个新的集群账号来访问k8s集群,账号加入集群需要加密认证,所以需要先创建证书,创建证书使用到的ca在 /etc/kubernetes/pki 目录中的ca.crt 和 ca.key,证书的CN名称为账号名称。
openssl genrsa -out qiyang.key 2048 openssl req -new -key qiyang.key -subj "/CN=qiyang" -out qiyang.csr openssl x509 -req -in qiyang.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out qiyang.crt -days 5000
创建账号命令:
kubectl config set-credentials qiyang --client-certificate=/etc/kubernetes/pki/qiyang.crt --client-key=/etc/kubernetes/pki/qiyang.key --embed-certs=true User "qiyang" set.
kubectl config set-credentials qiyang #“qiyang”这个名称为创建证书的CN字段的名称。
--client-certificate=客户端证书
--client-key=客户端秘钥
--embed-certs=true # 为true时隐藏证书和秘钥,显示为 "REDACTED"
查看新创建的账号:
创建完证书就可以使用 kubectl config view 中的user字段下看到新创建的用户了。
users: - name: kubernetes-admin #原有的集群账号 user: client-certificate-data: REDACTED client-key-data: REDACTED - name: qiyang # 刚刚创建的集群账号。 user: client-certificate-data: REDACTED client-key-data: REDACTED
将新账号添加到集群中 set-context:设置上下文
使用新账号访问当前的集群需要使用如下命令去设置,账号的后面要跟上集群名称 qiyang@kubernetes。
kubectl config set-context qiyang@kubernetes --cluster=kubernetes --user=qiyang Context "qiyang@kubernetes" created.
可以看到新的账号已经创建好了:
]# kubectl config view apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.1.140:6443 name: kubernetes contexts: - context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetes - context: # 新账号 cluster: kubernetes user: qiyang name: qiyang@kubernetes current-context: kubernetes-admin@kubernetes kind: Config preferences: {} users: - name: kubernetes-admin user: client-certificate-data: REDACTED client-key-data: REDACTED - name: qiyang user: client-certificate-data: REDACTED client-key-data: REDACTED
使用新账号访问集群 use-context:切换账号
kubectl config use-context qiyang@kubernetes Switched to context "qiyang@kubernetes".
新创建的账号没有任何权限所以查看不到资源:
kubectl get pods --all-namespaces Error from server (Forbidden): pods is forbidden: User "qiyang" cannot list resource "pods" in API group "" at the cluster scope
赋予权限:要想给新账号权限就要创建角色并绑定到用户
kubectl config use-context kubernetes-admin@kubernetes # 切换到管理员账号 kubectl create clusterrole qiyang-ClusterRole --verb='*' --resource='*' kubectl create clusterrolebinding qiyang-ClusterRoleBinding --clusterrole=qiyang-ClusterRole --user=qiyang
权限中的角色创建和绑定详见:https://www.scriptjc.com/article/1015
多个人管理集群:
如果多个人管理一个k8s集群时就需要创建多个linux账号和多个k8s账号,只需要将$HOME/.kube 目录中的内容全部拷贝到linux新账号的目录下并改属组属主即可。过程如下:
# 复制文件 cp -R ~/.kube/ /home/k8s/ chown -R k8s:k8s /home/k8s/.kube/ su k8s # 切换k8s账号 kubectl config use-context qiyang@kubernetes
这样每个人就可以使用不同的账号管理k8s了。
添加或设置集群
设置集群 set-cluster:
在k8s中一个平台或者一个集群是可以访问另一个集群的,设置新的集群同样使用 kubectl config 命令。
kubectl config set-cluster mycluster --kubeconfig=kubeconfig --server="https://192.168.1.140:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
--kubeconfig=集群配置文件,默认位置在$HOME/.kube 中,测试的话可以指定其他位置,不过查看也要带上选项,否者查看的是默认的。
--server=集群访问地址,api server地址
--certificate-authority=集群ca证书,需要添加的集群中的 /etc/kubernetes/pki/ca.crt
--embed-certs=true 隐藏证书
查看刚刚添加的集群:
]# kubectl config view --kubeconfig=kubeconfig apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.1.140:6443 name: mycluster contexts: [] current-context: "" kind: Config preferences: {} users: []
将用户添加到组
将用户添加到组中需要在创建证书的时候将证书中的 O 字段设为组名system:masters ,这样创建出来的证书就在这个组当中,并拥有组的权限。
-subj "/CN=kubernetes-admin/O=system:masters"
实例:
# 创建证书 cd /etc/kubernetes/pki/ openssl genrsa -out qiyang-admin.key 2048 openssl req -new -key qiyang-admin.key -subj "/CN=qiyang-admin/O=system:masters" -out qiyang-admin.csr openssl x509 -req -in qiyang-admin.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out qiyang-admin.crt -days 5000 # 创建集群 kubectl --kubeconfig=kubeconfig config set-cluster kubernetes --server="https://192.168.1.140:6443" --certificate-authority=ssl/kube-ca.pem --embed-certs=true # 创建账号 kubectl --kubeconfig=kubeconfig config set-credentials qiyang-admin --client-certificate=/etc/kubernetes/pki/qiyang-admin.crt --client-key=/etc/kubernetes/pki/qiyang-admin.key --embed-certs=true kubectl --kubeconfig=kubeconfig config set-context qiyang-admin@kubernetes --cluster=kubernetes --user=qiyang-admin # 切换账号,这个账号就是超级管理员了,因为这个账号在管理员组system:masters中 kubectl --kubeconfig=kubeconfig config use-context qiyang-admin@kubernetes kubectl --kubeconfig=kubeconfig get pods --all-namespaces
用token创建配置文件
创建sa,再将sa绑定权限,再获取sa默认绑定的token:
kubectl create serviceaccount clusterviewer kubectl create clusterrolebinding clusterviewer --clusterrole=view --serviceaccount=default:clusterviewer kubectl describe serviceaccount clusterviewer kubectl describe secrets clusterviewer-token-fwq2n
创建配置文件:
# 这一步如果有ca则用ca,没有留空即可,之后用证书的token填上即可 kubectl --kubeconfig=kubeconfig config set-cluster kubernetes --server="https://192.168.1.31:6443" --certificate-authority="" # 使用token替代证书 kubectl --kubeconfig=kubeconfig config set-credentials clusterviewer --token="eyJhbGci......emxC6A" # 设置上下文 kubectl --kubeconfig=kubeconfig config set-context clusterviewer@kubernetes --cluster=kubernetes --user=clusterviewer 使用账号 kubectl --kubeconfig=kubeconfig config use-context clusterviewer@kubernetes kubectl --kubeconfig=kubeconfig get pods