创建用户账号

  1. 登录k8s集群主机,生成用户证书
  1. cd /etc/kubernetes/pki/
  2. (umask 077; openssl genrsa -out carry.key 2048)
  3. openssl req -new -key carry.key -out carry.csr -subj "/CN=carry/O=carry"
  4. openssl x509 -req -in carry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out carry.crt -days 3650
  5. #验证以上生成的证书
  6. openssl x509 -in carry.crt -text -noout
  1. 为carry用户生成kubeconfig文件
  1. #配置集群信息,包括集群名称、API Server URL 和 CA证书,若集群信息已然存在,则可以省略此步骤。配置结果将默认保存于当前系统用户的 ~/.kube/config 文件中,也可以为kubectl 使用 --kubeconfig 选项指定自定义的专用文件路径。
  2. kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://172.16.0.187:6443"
  3. #配置客户端证书及秘钥,用户名信息会通过命令从证书Subject的CN值中自动提取,例如前面创建csr时使用的"CN=carry",而组名则来自于"O=carry"
  4. kubectl config set-credentials carry --embed-certs=true --client-certificate=/etc/kubernetes/pki/carry.crt --client-key=/etc/kubernetes/pki/carry.key
  5. #配置context,用来组合cluster和credentials,即访问的集群的上下文。
  6. kubectl config set-context carry@kubernetes --cluster=kubernetes --user=carry
  7. #切换剩下文使用carry用户访问k8s集群
  8. kubectl config get-contexts
  9. kubectl config use-context carry@kubernetes

使用 carry用户访问一下pod资源

  1. kubectl get pods
  2. Error from server (Forbidden): pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" in the namespace "default"

以上错误是因为carry用户并未获得集群资源的访问权限。

创建账号脚本,并自动赋予admin集群权限

  1. #! /bin/bash
  2. if [ $# -ne 2 ]
  3. then
  4. echo 'Usage:
  5. $1 username
  6. $2 k8s api ip address
  7. 会在/root/下创建 user的kubeconfig
  8. '
  9. exit 1
  10. fi
  11. cd /etc/kubernetes/pki/
  12. echo '生成用户证书'
  13. (umask 077; openssl genrsa -out $1.key 2048)
  14. openssl req -new -key $1.key -out $1.csr -subj "/CN=$1/O=$1"
  15. openssl x509 -req -in $1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out $1.crt -days 3650
  16. echo '配置kubeconfig,并保存到用户家目录'
  17. kubectl config set-cluster kubernetes --kubeconfig=/root/$1 --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://$2:6443"
  18. kubectl config set-credentials $1 --kubeconfig=/root/$1 --embed-certs=true --client-certificate=/etc/kubernetes/pki/$1.crt --client-key=/etc/kubernetes/pki/$1.key
  19. kubectl config set-context $1@kubernetes --kubeconfig=/root/$1 --cluster=kubernetes --user=$1
  20. kubectl config get-contexts --kubeconfig=/root/$1
  21. echo '设置上下文'
  22. kubectl create clusterrolebinding $1 --clusterrole=cluster-admin --user=$1
  23. kubectl config use-context $1@kubernetes --kubeconfig=/root/$1
文档更新时间: 2023-03-29 16:46   作者:张尚