0

我正在使用 kubeadm 构建 k8s 集群,默认 ssl 证书将在 1 年内使用。我计划使用 cfssl 或 opensll 生成使用 10 年的新证书。任何人都可以帮助我。

谢谢大家

4

2 回答 2

1

您可以使用 cfssl 或 openssl 生成证书并存储在一个目录中,并在 Kubeadm init 中指定该目录,并且 kubeadm 不会生成证书并使用提供的证书。

kubeadm init --cert-dir

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#custom-certificates

Kubeadm 还提供了证书续订机制,可将证书续订 1 年。

kubeadm alpha certs renew

由于您有一个正在运行的集群,它签署了有效期为 1 年的证书,您可以更改 kube 控制器管理器默认签名证书的此标志以签署 10 年的证书。

--experimental-cluster-signing-duration duration     Default: 8760h0m0s 

完成此操作后,您可以使用以下指南签署有效期为 10 年的证书。

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#renew-certificates-with-the-kubernetes-certificates-api

于 2020-03-31T07:31:07.383 回答
0

更新 Kubernetes 证书 10 年(不推荐)。

  • 检查证书过期

    kubeadm alpha certs check-expiration --config="/etc/kubernetes/kubeadm-config.yaml"

  • 备份现有的 Kubernetes 证书

    mkdir -p $HOME/fcik8s-old-certs/pki

    /bin/cp -p /etc/kubernetes/pki/*.* $HOME/fcik8s-old-certs/pki

  • 备份现有的配置文件

    /bin/cp -p /etc/kubernetes/*.conf $HOME/fcik8s-old-certs

  • 备份您的家庭配置

    mkdir -p $HOME/fcik8s-old-certs/.kube

    /bin/cp -p ~/.kube/config $HOME/fcik8s-old-certs/.kube/.

  • 为kube-controller-manager添加--cluster-signing-duration标志(--experimental-cluster-signing-duration 1.19 之前的版本)

    编辑 /etc/kubernetes/manifests/kube-controller-manager.yaml

     apiVersion: v1
     kind: Pod
     metadata:
       creationTimestamp: null
       labels:
         component: kube-controller-manager
         tier: control-plane
       name: kube-controller-manager
       namespace: kube-system
     spec:
       containers:
       - command:
         - kube-controller-manager
         ...
         - --experimental-cluster-signing-duration=87600h
         ...
     ...
    

    87600h ~ 10 年

  • 更新所有证书

    kubeadm alpha certs renew all --config /etc/kubernetes/kubeadm-config.yaml --use-api

  • 批准证书请求

    kubectl get csr

    kubectl certificate approve <cert_request>

  • 更新 kubeconfig 文件

    kubeadm init phase kubeconfig all --config /etc/kubernetes/kubeadm-config.yaml

  • 用新生成的管理配置文件覆盖原来的管理文件

    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    chown $(id -u):$(id -g) $HOME/.kube/config

  • 重启组件

    docker restart $(docker ps | grep etcd | awk '{ print $1 }')

    docker restart $(docker ps | grep kube-apiserver | awk '{ print $1 }')

    docker restart $(docker ps | grep kube-scheduler | awk '{ print $1 })

    docker restart $(docker ps | grep kube-controller | awk '{ print $1 }')

    systemctl daemon-reload && systemctl restart kubelet

  • 检查 api-server 证书过期

    echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2>/dev/null | openssl x509 -noout -enddate

于 2021-04-15T02:21:56.753 回答