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

时间:2019-04-25 13:17:58

标签: kubernetes kubeadm

因此,我知道如何向现有的Kubernetes 1.14集群(使用kubeadm设置)中添加一个工作节点:kubeadm token create --print-join-command将打印有效的kubeadm join命令,其中包含正确的值自变量--token--discovery-token-ca-cert-hash

我目前了解到,要将另一个节点添加到控制平面(主节点)kubeadm join,需要附加参数--experimental-control-plane(无值)和--certificate-key。这是用于堆叠的控制平面和etcd节点。

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

更新我的第一个(也是当前唯一的)主节点是在不带参数--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. 在新的主节点上运行带有附加参数kubeadm join的打印--experimental-control-plane命令

这是正确的程序吗?

3 个答案:

答案 0 :(得分:2)

我在1.17中为此苦苦挣扎,最终发现此命令将提供可以在SameSitekubeadmn init中都可以使用的证书密钥。为了使其正常工作,您需要通过kubeadmn join以及在运行--upload-certs时与您在1.14中注意到的类似。

kubeadmn init

# 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

答案 1 :(得分:2)

给出的答案的替代方法是使用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>

答案 2 :(得分:1)

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

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