环境信息:
K3s 版本: v1.19.3+k3s3
节点 CPU 架构、操作系统和版本:4.18.10-1.el7.elrepo.x86_64 #1 SMP Wed Sep 26 16:20:39 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
集群配置:2 server,20 agents
问题描述:
想根据k3s server CA生成客户端kubeconfig,k3s是否支持?
复现步骤:
- 安装 K3s 的命令:
创建私钥
openssl genrsa -out ops-user.key 2048
建一个csr(证书签名请求)文件
openssl req -new -key ops-user.key -subj “/CN=ops-user/O=ops” -out ops-user.csr
使用 openssl 工具生成用户证书
openssl x509 -req -in ops-user.csr
-CA /var/lib/rancher/k3s/server/tls/server-ca.crt
-CAkey /var/lib/rancher/k3s/server/tls/server-ca.key
-CAcreateserial
-out ops-user.crt -days 3650
设置集群参数变量
export KUBE_APISERVER=“https://192.168.100.100:6443”
kubectl config set-cluster kubernets
–certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt
–server=${KUBE_APISERVER}
–embed-certs=true
–kubeconfig=ops-user.yaml
设置客户端认证参数
kubectl config set-credentials ops-user
–client-certificate=ops-user.crt
–client-key=ops-user.key
–embed-certs=true
–kubeconfig=ops-user.yaml
设置上下文参数
kubectl config set-context kubernets
–cluster=kubernets
–user=ops-user
–kubeconfig=ops-user.yaml
设置上下文配置
kubectl config use-context kubernets --kubeconfig=ops-user.yaml
用户授权规则(RBAC)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ops-user
rules:
- apiGroups:
- ‘*’
resources: - ‘*’
verbs: - ‘*’
- ‘*’
- nonResourceURLs:
- ‘*’
verbs: - ‘*’
- ‘*’
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ops-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ops-user
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: ops-user
应用授权配置文件
kubectl apply -f k8s_create_kubeconfig_ClusterRoleUser.yaml
预期结果:
可以访问集群
实际结果:
error: You must be logged in to the server (Unauthorized)
附加上下文/日志:
日志