代码之家  ›  专栏  ›  技术社区  ›  Prafull Ladha

即使我的所有服务器证书都有效,也无法访问我的Kubernetes群集

  •  0
  • Prafull Ladha  · 技术社区  · 6 年前

    我正在努力实现我的Kubernetes集群应该有5年的有效期,所以我已经 ca.crt、apiserver.crt、kubelet-client.crt、front-proxy.crt 有效期为5年,并将其置于 /ETC/Kubernetes/PKI公司 .

    此外,我还启用了我的Kubelet和客户端证书轮换

    Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki --feature-gates=RotateKubeletClientCertificate=true"
    

    因此,为了验证集群是否正常工作,我将系统上的日期更改为1年到期前的1天,并正确完成证书轮换。

    Oct 22 06:00:16 ip-10-0-1-170.ec2.internal kubelet[28887]: I1022 06:00:16.806115   28887 reconciler.go:154] Reconciler: start to sync state
    Oct 22 06:00:23 ip-10-0-1-170.ec2.internal kubelet[28887]: I1022 06:00:23.546154   28887 transport.go:126] certificate rotation detected, shutting down client connections to start using new credentials
    

    但是一旦我的集群通过一年,它就会在任何kubectl get nodes/pods命令上显示错误: “错误:您必须登录到服务器(未经授权)”

    我想可能的问题是 /etc/kubernetes/admin.conf.等 只有一年的有效期证书。谢谢你的帮助

    2 回复  |  直到 6 年前
        1
  •  2
  •   hoque    6 年前

    你的 client-certificate ( /etc/kubernetes/admin.conf.等 )生成一年。可以使用以下命令生成客户端证书:

    kubeadm alpha phase kubeconfig admin --cert-dir /etc/kubernetes/pki --kubeconfig-dir /etc/kubernetes/
    
        2
  •  1
  •   Prafull Ladha    6 年前

    我已经找到了在集群到期之前重新生成新admin.conf证书的方法。

    使用openssl生成admin.key和admin.csr

    openssl genrsa -out admin.key 2048 
    openssl req -new -key admin.key -out admin.csr -subj "/O=system:masters/CN=kubernetes-admin"
    

    现在使用上面的openssl admin.csr在kubernetes中创建csr

    cat <<EOF | kubectl create -f -
    apiVersion: certificates.k8s.io/v1beta1
    kind: CertificateSigningRequest
    metadata:
      name: admin_csr
    spec:
      groups:
      - system:authenticated
      request: $(cat admin.csr | base64 | tr -d '\n')
      usages:
      - digital signature
      - key encipherment
      - client auth
    EOF
    

    现在批准使用 Kubectl证书批准管理员

    现在从已批准的CSR中提取admin.crt kubectl get csr admin_csr-o jsonpath='..status.certificate'base64-d>admin.crt

    现在更改当前用户和上下文以使用新的管理密钥和证书。

    kubectl config set-credentials kubernetes-admin --client-certificate=/home/centos/certs/admin.crt  --client-key=/home/centos/certs/admin.key
    kubectl config set-context kubernetes-admin@kubernetes --cluster=kubernetes --user=kubernetes-admin
    

    在这个步骤之后,您的kube config(在我的例子中是/root/.kube/config)有了新的客户机证书数据和密钥。

    希望这有帮助。