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

aydmsdu9  于 2023-02-07  发布在  Kubernetes
关注(0)|答案(6)|浏览(169)

当我们启动一个主主节点时,该节点会使用ttl为工作节点和主节点创建令牌。
根据文档kubeadm token(我也测试过,它工作正常),我们可以发出一个命令,并获得一个新的令牌(默认ttl 24 h):

kubeadm token create --print-join-command

我试图弄清楚如果我想添加一个新的平面节点(第二主节点),我如何创建一个相关的令牌?
我尝试传递一些标志,例如:

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

但是由于该标志未被识别,所以它失败(当然)。
我还通过文档发现,我们可以通过直接链接到配置文件来完成此操作,例如ref kubeadm-join/file或基于https的发现:

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

在我的情况下,我没有本地conf文件或计划使用url链接。
是否有其他方法可以使用命令为平面节点而不是工作节点创建新令牌?

7lrncoxx

7lrncoxx1#

你得去找主人

kubeadm init phase upload-certs --upload-certs

记住输出。
那你就去找师傅

kubeadm token create --print-join-command

然后根据此输出编写joining-master-node的joining命令,并将其添加到--control-plane --certificate-key xxxx
请观看此视频,以示例进行解释:https://www.youtube.com/watch?v=27v36t-3afQ最有趣的是从20:40开始。由于版本较旧,视频中有一些“实验性”的单词。

vzgqcmou

vzgqcmou2#

下面将为您的其他控制器创建join命令。

echo $(kubeadm token create --print-join-command) --control-plane --certificate-key $(kubeadm init phase upload-certs --upload-certs | grep -vw -e certificate -e Namespace)
ycl3bljg

ycl3bljg3#

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

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的自签名证书,也可能是因为部署在裸机节点上。
尽管如此,我还是设法用另一种方法解决了我的问题。
根据官方文档,第一控制平面节点的步骤:

  • “您还可以在初始化期间指定自定义的--certificate-key,以后可供join使用。要生成此类密钥,可以使用以下命令:“*
kubeadm alpha certs certificate-key

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

# kubeadm alpha certs certificate-key
xxxx

然后,正如文档所述:

  • “注意:kubeadm初始化标志--config和--certificate-key不能混用,因此如果要使用kubeadm配置,必须在相应的配置位置添加certificateKey字段(在InitConfiguration和JoinConfiguration下:控制面板)。"*

在我的例子中,我使用了一个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

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

希望这对未来的其他人有所帮助,以免像我一样花那么多钱。

8fq7wneg

8fq7wneg4#

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

x7rlezfr

x7rlezfr5#

我相信没有单独的令牌来添加更多的控制平面,您只需在添加时添加--control-plane
获取连接命令kubeadm token create --print-join-command
假设证书已上载并设置到位。更多详细信息可在此处找到。https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
编辑:抱歉更新延迟kubeadm alpha certs certificate-key可用于创建密钥
然后上传然后使用kubeadm init phase upload-certs --upload-certs --certificate-key=<above key>
并使用它创建连接命令kubeadm token create --print-join-command --certificate-key <key created above>
对于其他控制平面,您可以将--control-plane传递给上述join命令,而对于工作节点则忽略此标志

xoshrz7s

xoshrz7s6#

我认为您需要下面的命令。
显示命令:

echo "$(kubeadm token create --print-join-command) --control-plane"
kubeadm join 192.168.5.50:8443 --token b99yno.3ju18t22w80ishlz --discovery-token-ca-cert-hash sha256:8f16b6d5304f070de0d32a6663ffaa30ac58163f9cfd38be4af405ac78c93b73  --control-plane

运行以下命令:

echo "$(kubeadm token create --print-join-command) --control-plane"|sh

相关问题