如何为辅助控制平面节点生成kubeadm令牌

问题描述

启动主节点时,该节点会使用ttl为工作节点和主节点创建令牌。

根据文档kubeadm token(我也已经测试过并且可以正常工作),我们可以发出命令并获取新令牌(默认ttl 24h):

kubeadm token create --print-join-command

我试图弄清楚是否要添加一个新的平面节点(辅助主节点),如何创建相关令牌?

我尝试传递一些标志,例如:

kubeadm token create --print-join-command --control-plane

但是失败了(当然),因为无法识别此标志。

我还通过文档发现,我们可以通过直接链接到配置文件来做到这一点,例如ref kubeadm-join/file or https based discovery

kubeadm join --discovery-file path/to/file.conf # (local file)
kubeadm join --discovery-file https://url/file.conf # (remote HTTPS URL)

就我而言,我没有本地conf文件,也没有计划使用url链接。

还有其他方法可以使用平面节点而非工作节点的命令来创建新令牌吗?

解决方法

你需要在master上运行

kubeadm init phase upload-certs --upload-certs

记住输出。

然后你需要在master上运行

kubeadm token create --print-join-command

然后从这个输出中为 joining-master-node 编写加入命令并添加到它 --control-plane --certificate-key xxxx

观看此视频以举例说明: https://www.youtube.com/watch?v=27v36t-3afQ 最有趣的是从20:40开始。 由于版本较旧,视频中存在一些“实验性”字样。

,

根据用户的评论,似乎有人在运行此命令:

kubeadm token create --print-join-command

应填充两个字符串样本:

kubeadm join loadBalancerIP:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx
kubeadm join loadBalancerIP:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx --control-plane --certificate-key xxxx

不幸的是,事实并非如此。也许是因为我使用的是来自kubeadm的自签名证书,或者可能是因为部署是在裸机节点上进行的。

无论如何,我还是设法用另一种方式解决了问题。

根据官方文档Steps for the first control plane node

“您还可以在初始化期间指定一个自定义的--certificate-key,以后可以由join使用。要生成这样的密钥,可以使用以下命令:”

kubeadm alpha certs certificate-key

一旦用户在缩进的主主节点(尚未启动的节点)上运行命令,它应该会看到类似的内容:

# kubeadm alpha certs certificate-key
xxxx

然后如文档所述:

“注意:kubeadm初始化标志--config和--certificate-key不能混合使用,因此,如果要使用kubeadm配置,必须在适当的配置位置(在InitConfiguration和JoinConfiguration:controlPlane)。”

在我的情况下,我使用conf文件,因此将内容添加到文件中:

apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
certificateKey: xxxx
localAPIEndpoint:
  advertiseAddress:
  bindPort: 6443
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
---
etc etc

一旦用户拥有此密钥并使用此密钥启动主要主密钥(如上所示),下一步就是对次要主节点使用完全相同的证书密钥,例如:

kubeadm join loadBalancerIP:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx --control-plane --certificate-key xxxx

注意:建议您在销毁/创建主节点时使用脚本来生成此数据,以便使用新的证书密钥。

希望这对将来的其他人有帮助,以免花费比我多的钱。

,

命令kubeadm token create没有任何标志--control-plane

docs

运行命令kubeadm token create --print-join-command时,您会在输出中得到两个命令,并使用带有--control-plane标志的命令来加入控制平面节点。

,

我相信没有单独的令牌可用于添加更多的控制平面,您只需在添加时添加--control-plane

要获取加入命令kubeadm token create --print-join-command

假设证书已经上传并设置到位。 更多详细信息可以在这里找到。 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...