使用CSR API创建用户
k8s 支持 CSR API,通过创建 CertificateSigningRequest
资源就可以发起 CSR 请求,管理员审批通过之后 kube-controller-manager
就会为我们签发证书,确保 kube-controller-manager
配了根证书密钥对:
--cluster-signing-cert-file=/var/lib/kubernetes/ca.pem--cluster-signing-key-file=/var/lib/kubernetes/ca-key.pem
创建步骤
我们用 cfssl 来创建 key 和 csr 文件,所以需要先安装 cfssl:
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o cfsslcurl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o cfssljsoncurl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o cfssl-certinfo
chmod +x cfssl cfssljson cfssl-certinfosudo mv cfssl cfssljson cfssl-certinfo /usr/local/bin/
指定要创建的用户名:
USERNAME="roc"
再创建 key 和 csr 文件:
cat <<EOF | cfssl genkey - | cfssljson -bare ${USERNAME}{ "CN": "${USERNAME}", "key": { "algo": "rsa", "size": 2048 }}EOF
生成以下文件:
roc.csrroc-key.pem
创建 CertificateSigningRequest
(发起 CSR 请求):
cat <<EOF | kubectl apply -f -apiVersion: certificates.k8s.io/v1beta1kind: CertificateSigningRequestmetadata: name: ${USERNAME}spec: request: $(cat ${USERNAME}.csr | base64 | tr -d '\n') usages: - digital signature - key encipherment - client authEOF
管理员审批 CSR 请求:
# 查看 csr# kubectl get csr
# 审批 csrkubectl certificate approve ${USERNAME}
获取证书:
kubectl get csr ${USERNAME} -o jsonpath={.status.certificate} | base64 --decode > ${USERNAME}.pem
得到证书文件:
roc.pem
至此,我们已经创建好了用户,用户的证书密钥对文件:
roc.pemroc-key.pem
配置 kubeconfig
# 增加 userkubectl config set-credentials ${USERNAME} --embed-certs=true --client-certificate=${USERNAME}.pem --client-key=${USERNAME}-key.pem
# 如果还没配 cluster,可以通过下面命令配一下kubectl config set-cluster <cluster> --server=<apiserver-url> --certificate-authority=<ca-cert-file>
# 增加 context,绑定 cluster 和 userkubectl config set-context <context> --cluster=<cluster> --user=${USERNAME}
# 使用刚增加的 contextkubectl config use-context <context>