将节点添加到 Kubernetes 控制平面时的证书密钥

Certificate key when adding node to Kubernetes control plane

所以我知道如何将工作节点添加到现有的 Kubernetes 1.14 集群(使用 kubeadm 设置):kubeadm token create --print-join-command 将打印一个有效的 kubeadm join 命令参数 --token--discovery-token-ca-cert-hash.

的值

我目前了解到,要向控制平面(主节点)添加另一个节点 kubeadm join 需要额外的参数 --experimental-control-plane(w/o 值)和 --certificate-key。这适用于堆叠式控制平面和 etcd 节点。

如何(在哪个文件中)为现有集群获取 --certificate-key 的正确值?

UPDATE 我的第一个(也是目前唯一的)主节点是在没有参数 --experimental-upload-certskubeadm init 的情况下创建的(而是 kubeadm init --pod-network-cidr=10.244.0.0/16 ).因此 manual certificate distribution 应该适用,因此可能的步骤顺序可能是:

  1. /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-sa.*,etcd/ca.*} 中的证书和密钥从第一个复制到新的主节点
  2. 运行 kubeadm token create --print-join-command 在第一个主节点上
  3. 运行 在新主节点
  4. 上打印带有附加参数 --experimental-control-planekubeadm join 命令

这是正确的程序吗?

根据documentation,此命令提供了一个新的解密密钥:

kubeadm init phase upload-certs --experimental-upload-certs

我在 1.17 中一直在努力解决这个问题,最后发现这个命令会预先生成一个我可以在 kubeadmn initkubeadmn join 中使用的证书密钥。为了让它工作,你需要传递 --upload-certs 以及当你 运行 kubeadmn init 类似于你为 1.14.

注意到的

# generate a certificate-key to be used kubeadm alpha certs certificate-key

# initialize first master using above key, --upload-certs (and other parameters) kubeadm init --control-plane-endpoint $API_SERVER:6443 --upload-certs --apiserver-cert-extra-sans $API_SERVER --certificate-key $CERT-KEY

# join other masters using the same certificate-key kubeadm join $API_SERVER:6443 --token $TOKEN --discovery-token-ca-cert-hash $CAHASH --control-plane --certificate-key $CERT-KEY

给出答案的替代方法是使用 kubeadm 通过将证书作为秘密上传到 kube-system 来管理证书(它将在 2 小时后过期)。初始化阶段不需要传递证书密钥

所以你可以做到

kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"

稍后

kubeadm init phase upload-certs --upload-certs

该命令将输出可用于创建的秘密的证书密钥

kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT --token <token> \     
--discovery-token-ca-cert-hash <hash> \
--control-plane \
--certificate-key <key from previous commmand>