Kubernetes User Account

Kubernetes的User Account用于从 集群外部 访问 api-server 时 使用

kubectl命令就是作为kubernetes-admin用户来执行的,默认使用x509客户端证书方式,x509 是双向认证的

参考 https://kubernetes.io/docs/reference/access-authn-authz/authentication/

查看当前集群中的用户信息

kubectl config view
This image has an empty alt attribute; its file name is image-57.png

下面我们在集群中添加新的 user account

现在3台机器,k8s1、k8s2 和 k8s_user ,

k8s_user 上生成私钥

openssl genrsa -out client.key 2048

生成csr

openssl req -new -key client.key -out client.csr -subj "/CN=lizhe"

确认服务器上的 Kubernetes 根证书

我这里是 /etc/kubernetes/ssl

在Kubernetes节点 k8s1 上找到下面两个文件,转存到 k8s_user

kube-ca-key.pem 和 kube-ca.pem

k8s_user上

生成 client.crt

openssl x509 -req -in client.csr -CA /home/lizhe/works/ssl/kube-ca.pem -CAkey /home/lizhe/works/ssl/kube-ca-key.pem -CAcreateserial -out client.crt -days 365

这是错误的情况

如果一切顺利的话

不校验server端证书

curl --cert ./client.crt --key ./client.key --insecure -s https://k8s1.me:6443/api

校验server端证书

curl --cert ./client.crt --key ./client.key --cacert /home/lizhe/works/ssl/kube-ca.pem -s https://k8s1.me:6443/api

上面的用户 lizhe 会被分配到 group system:authenticated

这个 group 默认携带 以下 3 个 clusterrole

system:public-info-viewer
system:discovery
system:basic-user

访问 api 还是可以的,但是要访问 pod,基本没戏

curl --cert ./client.crt --key ./client.key --cacert /home/lizhe/works/ssl/kube-ca.pem -s https://k8s1.me:6443/api/v1/namespaces/default/pods

创建一个可以 list pod 的 clusterrole,然后绑定 用户 lizhe 到 podrole

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  namespace: default
  name: podrole
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]
EOF
kubectl create rolebinding podrolebinding  -n default --clusterrole podrole --user lizhe
curl --cert ./client.crt --key ./client.key --cacert /home/lizhe/works/ssl/kube-ca.pem -s https://k8s1.me:6443/api/v1/namespaces/default/pods
Send a Message