创建私钥
openssl genrsa -out kevin.key 2048
openssl req -new -key kevin.key -out kevin.csr
创建CSR
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: kevin
spec:
request: LS0tLS1CRUdJT.....tLQo=
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
EOF
Some points to note:
usages
必须是 ‘client auth
’request
是csr文件内容经过base64编码后的值。通过以下命令可得:cat kevin.csr | base64 | tr -d "\n"
批准证书签名请求
获取CSR列表
kubectl get csr
批准CSR
kubectl certificate approve kevin
获取证书
kubectl get csr kevin -o jsonpath='{.status.certificate}'| base64 -d > kevin.crt
绑定角色
这里图方便绑定的是cluster-admin
角色。如果需要可以自行创建角色在进行绑定。
kubectl create clusterrolebinding kevin --clusterrole=cluster-admin --user=kevin
如果不绑定角色,在执行kubectl get pod -A
等操作时,会出现以下结果:
Error from server (Forbidden): pods is forbidden: User "kevin" cannot list resource "pods" in API group "" at the cluster scope
添加到kubeconfig
- 添加新的凭据
kubectl config set-credentials kevin --client-key=kevin.key --client-certificate=kevin.crt --embed-certs=true
- 添加上下文
kubectl config set-context kevin --cluster=kubernetes --user=kevin
- 切换用户
kubectl config use-context kevin
一系列配置完成后就可以操作k8s集群了。