创建用户账号
- 登录k8s集群主机,生成用户证书
cd /etc/kubernetes/pki/
(umask 077; openssl genrsa -out carry.key 2048)
openssl req -new -key carry.key -out carry.csr -subj "/CN=carry/O=carry"
openssl x509 -req -in carry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out carry.crt -days 3650
#验证以上生成的证书
openssl x509 -in carry.crt -text -noout
- 为carry用户生成kubeconfig文件
#配置集群信息,包括集群名称、API Server URL 和 CA证书,若集群信息已然存在,则可以省略此步骤。配置结果将默认保存于当前系统用户的 ~/.kube/config 文件中,也可以为kubectl 使用 --kubeconfig 选项指定自定义的专用文件路径。
kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://172.16.0.187:6443"
#配置客户端证书及秘钥,用户名信息会通过命令从证书Subject的CN值中自动提取,例如前面创建csr时使用的"CN=carry",而组名则来自于"O=carry"
kubectl config set-credentials carry --embed-certs=true --client-certificate=/etc/kubernetes/pki/carry.crt --client-key=/etc/kubernetes/pki/carry.key
#配置context,用来组合cluster和credentials,即访问的集群的上下文。
kubectl config set-context carry@kubernetes --cluster=kubernetes --user=carry
#切换剩下文使用carry用户访问k8s集群
kubectl config get-contexts
kubectl config use-context carry@kubernetes
使用 carry用户访问一下pod资源
kubectl get pods
Error from server (Forbidden): pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" in the namespace "default"
以上错误是因为carry用户并未获得集群资源的访问权限。
创建账号脚本,并自动赋予admin集群权限
#! /bin/bash
if [ $# -ne 2 ]
then
echo 'Usage:
$1 username
$2 k8s api ip address
会在/root/下创建 user的kubeconfig
'
exit 1
fi
cd /etc/kubernetes/pki/
echo '生成用户证书'
(umask 077; openssl genrsa -out $1.key 2048)
openssl req -new -key $1.key -out $1.csr -subj "/CN=$1/O=$1"
openssl x509 -req -in $1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out $1.crt -days 3650
echo '配置kubeconfig,并保存到用户家目录'
kubectl config set-cluster kubernetes --kubeconfig=/root/$1 --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://$2:6443"
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
kubectl config set-context $1@kubernetes --kubeconfig=/root/$1 --cluster=kubernetes --user=$1
kubectl config get-contexts --kubeconfig=/root/$1
echo '设置上下文'
kubectl create clusterrolebinding $1 --clusterrole=cluster-admin --user=$1
kubectl config use-context $1@kubernetes --kubeconfig=/root/$1
文档更新时间: 2023-03-29 16:46 作者:张尚