kubernetes创建普通用户
案例:创建一个只能管理test空间下的Pods资源普通用户
普通用户并不是通过k8s来创建和维护,是通过创建证书和切换上下文环境的方式来创建和切换用户。
创建证书私钥文件
# openssl genrsa -out devuser.key 2048
用此私钥文件创建一个csr(证书签名请求)文件
# openssl req -new -key devuser.key -subj "/CN=devuser" -out devuser.csr
拿着证书签名请求文件向apiserver的证书去签署生成证书,签名申请的用户名是devuser
# openssl x509 -req -in devuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out devuser.crt -days 365
生成账号devuser
# kubectl config set-credentials devuser --client-certificate=./devuser.crt --client-key=./devuser.key --embed-certs=true
查看集群用户信息
kubectl config get-users
NAME
devuser
kubernetes-admin
设置账号上下文并指定名称空间, 信息默认会保存在 $HOME/.kube/config
# kubectl config set-context devuser@kubernetes --cluster=kubernetes --user=devuser --namespace
查看上下文信息
# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
devuser@kubernetes kubernetes devuser
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
提示:*表示当前所处的上下文环境用户
切换到账户devuser(通过上下文名称切换)
# kubectl config use-context devuser@kubernetes
Switched to context "devuser@kubernetes".
查看上下文信息
# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* devuser@kubernetes kubernetes devuser test
kubernetes-admin@kubernetes kubernetes kubernetes-admin
提示:*表示当前所处的上下文环境用户
使用devuser用户查看名称空间下的pod资源
# kubectl get po -n test
Error from server (Forbidden): pods is forbidden: User "devuser" cannot list resource "pods" in API group "" in the namespace "test"
#提示:禁止devuser用户列出test下API组中的pods资源
#解决方法:如果希望devuser用户对test下具备相应的权限,需要通过管理员身份进行授权
切换身份为管理员
# kubectl config use-context kubernetes-admin@kubernetes
# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
devuser@kubernetes kubernetes devuser test
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
openssl选项
openssl genrsa -out devuser.key 2048
这条命令使用Openssl工具来生产一个新的私钥文件
-out:指定加密后的文件存放路径
openssl req -new -key devuser.key -subj "/CN=devuser" -out devuser.csr
这条命令使用OpenSSL工具来生成一个新的证书签名请求(CSR)。下面是每个选项的详细解释:
req: 这个选项告诉OpenSSL工具执行证书请求操作。
-new: 这个选项指示OpenSSL生成一个新的证书请求。
-key devuser.key: 这个选项指定了私钥文件的路径和文件名。在这个例子中,私钥文件是devuser.key。
-subj "/CN=devuser": 这个选项指定了证书的主题(Subject)。在这个例子中,证书的主题是/CN=devuser,其中CN表示Common Name,即通用名称。
-out devuser.csr: 这个选项指定了生成的证书签名请求的输出文件路径和文件名。在这个例子中,输出文件是devuser.csr。
openssl x509 -req -in devuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out devuser.crt -days 365
这条命令使用OpenSSL工具来生成一个由证书签名请求(CSR)签署的证书。下面是每个选项的详细解释:
x509: 这个选项告诉OpenSSL工具执行X.509证书操作。
-req: 这个选项指示OpenSSL使用证书签名请求(CSR)来生成证书。
-in devuser.csr: 这个选项指定了输入文件的路径和文件名。在这个例子中,输入文件是devuser.csr,即之前生成的证书签名请求文件。
-CA /etc/kubernetes/pki/ca.crt: 这个选项指定了CA(Certificate Authority)的证书文件路径和文件名。在这个例子中,CA证书文件是/etc/kubernetes/pki/ca.crt。
-CAkey /etc/kubernetes/pki/ca.key: 这个选项指定了CA的私钥文件路径和文件名。在这个例子中,CA私钥文件是/etc/kubernetes/pki/ca.key。
-CAcreateserial: 这个选项告诉OpenSSL工具创建一个新的序列号文件,用于生成证书。
-out devuser.crt: 这个选项指定了生成的证书的输出文件路径和文件名。在这个例子中,输出文件是devuser.crt。
-days 365: 这个选项指定了证书的有效期,以天为单位。在这个例子中,证书的有效期是365天。
在OpenSSL中,-CA选项用于指定证书颁发机构(CA)的证书文件和私钥文件。这是因为在生成证书时,需要使用CA的证书和私钥来对证书签名请求进行签名,从而生成有效的证书。通过指定-CA选项,OpenSSL可以找到CA的证书和私钥文件,并将其用于证书生成过程。