我正在使用 kubeadm 构建 k8s 集群,默认 ssl 证书将在 1 年内使用。我计划使用 cfssl 或 opensll 生成使用 10 年的新证书。任何人都可以帮助我。
谢谢大家
我正在使用 kubeadm 构建 k8s 集群,默认 ssl 证书将在 1 年内使用。我计划使用 cfssl 或 opensll 生成使用 10 年的新证书。任何人都可以帮助我。
谢谢大家
您可以使用 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 年的证书。
更新 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