kubeadm join --token, Failed to request cluster info

本文记录了在尝试向Kubernetes集群中添加新节点时遇到的连接问题,并详细描述了解决过程,包括调整API Server配置及重启kubelet服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天想向kubernetes中增加一个节点,利用命令行:

kubeadm join --token c93b06.2cddb224a8931cb3 162.3.160.61:6443

但是加入节点的时候居然报错了,如下:

[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.

[preflight] Running pre-flight checks

[preflight] Starting the kubelet service

[discovery] Trying to connect to API Server "162.3.160.61:6443"

[discovery] Created cluster-info discovery client, requesting info from "https://162.3.160.61:6443"

[discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

    [discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

[discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

[discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

[discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

[discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

[discovery] Failed to request cluster info, will try again: [the server has asked for the client to provide credentials (get configmaps cluster-info)]

 

获取cluster-info获取不到,为什么呢?

Google了很久也没查到具体的原因,难道token过期了?

kubeadm token list

TOKEN TTL EXPIRES USAGES DESCRIPTION

c93b06.2cddb224a8931cb3 <forever> <never> authentication,signing The default bootstrap token generated by 'kubeadm init'.

 

Kubeadm token list 可以看到token没有过期。

为什么为什么为什么?灵光一现,我们在kubeadm部署kubernetes, 部署dashborad不能访问的问题博客中,关闭了匿名访问,是不是这个原因呢?赶快把修改的api-server的启动参数在改回去,如下图所示

重启kubelet, service kubelet restart

再次加入节点

[root@node2 ~]# kubeadm join --token c93b06.2cddb224a8931cb3 162.3.160.61:6443

[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.

[preflight] Running pre-flight checks

[preflight] Starting the kubelet service

[discovery] Trying to connect to API Server "162.3.160.61:6443"

[discovery] Created cluster-info discovery client, requesting info from "https://162.3.160.61:6443"

[discovery] Cluster info signature and contents are valid, will use API Server "https://162.3.160.61:6443"

[discovery] Successfully established connection with API Server "162.3.160.61:6443"

[bootstrap] Detected server version: v1.7.6

[bootstrap] The server supports the Certificates API (certificates.k8s.io/v1beta1)

[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request

[csr] Received signed certificate from the API server, generating KubeConfig...

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

 

Node join complete:

* Certificate signing request sent to master and response

received.

* Kubelet informed of new secure connection details.

 

Run 'kubectl get nodes' on the master to see this machine join.

 

Oh, yes, 能够正常加入节点了,自己给自己挖的坑啊。

<think>我们正在配置Kubernetes控制平面节点(即master节点)加入集群。根据用户提供的`kubeadm join`命令模板和引用内容,控制平面节点的加入需要额外的证书信息。普通节点(worker节点)和控制平面节点的加入命令有所不同,控制平面节点需要`--control-plane`标志和`--certificate-key`参数。根据引用[3],在初始化master节点时使用了`--upload-certs`选项,这会将证书上传到一个临时位置,并生成一个用于加入控制平面节点的证书密钥。这个证书密钥在加入控制平面节点时必须提供。用户提供的命令模板是:kubeadm joincluster-endpoint:6443--token63xza1.0qp2nkzbd61oedxx \--discovery-token-ca-cert-hash sha256:f368ceeb91b38bddcbdaab51581ff7a44e02da15993829e3a3d10bb85002cd3b但这是用于普通节点的。对于控制平面节点,我们需要额外的参数。步骤:1.确保在初始化主节点时使用了`--upload-certs`,这样会生成一个证书密钥(certificate-key),该密钥在加入控制平面节点时需要。2.获取证书密钥:在初始化主节点的输出中,会有一行类似于:Youcan nowjoin anynumber ofcontrol-planenodeby runningthefollowing commandon eachas root:kubeadm joincluster-endpoint:6443 --token ...--discovery-token-ca-cert-hash... --control-plane --certificate-key ...3.如果初始化时没有记录证书密钥,可以通过以下命令重新生成(但注意,证书密钥的有效期只有2小时):kubeadm initphase upload-certs--upload-certs或者,如果初始化时指定了`--certificate-key`,那么需要记住该密钥,因为重新生成会得到不同的密钥。4.加入控制平面节点的命令格式为:kubeadmjoin <control-plane-endpoint>:<port>\--token<token> \--discovery-token-ca-cert-hash <hash>\--control-plane \--certificate-key <certificate-key>5.如果token过期,可以按照引用[2]中所述创建新的tokenkubeadm tokencreate获取discovery-token-ca-cert-hash的方式(如引用[2]):openssl x509 -pubkey-in/etc/kubernetes/pki/ca.crt |opensslrsa-pubin -outformder2>/dev/null| openssl dgst-sha256 -hex |sed 's/^.*//'6.注意:控制平面节点需要运行在具有足够权限的机器上(如root),并且需要满足与主节点相同的先决条件(如关闭swap、正确的网络设置等)。因此,用户需要提供以下信息来构造加入控制平面节点的命令:-控制平面端点(cluster-endpoint:6443)-有效的token-discovery-token-ca-cert-hash-有效的证书密钥(certificate-key)如果用户是在初始化主节点后立即加入控制平面节点,那么初始化输出的命令可以直接使用。否则,需要重新获取token和证书密钥。根据引用[3],初始化时指定了`--token`和`--token-ttl`,但证书密钥是单独生成的。如果用户没有证书密钥,可以重新上传证书以获取新的证书密钥(注意:这不会影响已经加入的节点):kubeadminit phaseupload-certs --upload-certs示例命令(使用实际获取的参数):kubeadm joincluster-endpoint:6443--token63xza1.0qp2nkzbd61oedxx --discovery-token-ca-cert-hash sha256:f368ceeb91b38bddcbdaab51581ff7a44e02da15993829e3a3d10bb85002cd3b--control-plane --certificate-key <your-certificate-key>注意:证书密钥是一个字符串,通常由多个字符组成,例如:`a1b2c3d4e5f6g7h8i9j0`引用说明:[^1]提供了一个普通节点的加入命令示例。[^2]提供了如何管理token和获取discovery-token-ca-cert-hash的方法。[^3]提供了初始化主节点时的命令示例,其中包含`--upload-certs`选项,这是生成证书密钥所必需的。[^4]展示了加入节点后集群的状态。因此,用户需要根据实际情况替换命令中的参数。</think>### Kubernetes控制平面节点加入集群指南 要将控制平面节点(master节点)加入Kubernetes集群,需要使用包含`--control-plane`和`--certificate-key`参数的`kubeadm join`命令。以下是详细步骤: #### 1. 获取必要参数 - **Token**:从主节点获取(有效期通常24小时) ```bash kubeadm token list # 查看可用token kubeadm token create --ttl 0 # 创建永久token(如引用[2]所示) ``` - **CA证书哈希**:从主节点获取 ```bash openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' ``` - **证书密钥**:初始化主节点时生成(引用[3]中`--upload-certs`生成) ```bash kubeadm init phase upload-certs --upload-certs # 重新生成证书密钥 ``` #### 2. 完整加入命令格式 ```bash kubeadm join <cluster-endpoint>:6443 \ --token <your-token> \ --discovery-token-ca-cert-hash sha256:<your-ca-hash> \ --control-plane \ --certificate-key <your-certificate-key> ``` #### 3. 参数说明 | 参数 | 作用 | 示例值 | |------|------|--------| | `--control-plane` | 声明加入控制平面节点 | 固定标志 | | `--certificate-key` | 证书解密密钥(引用[3]) | `abcdef.0123456789abcdef` | | `--token` | 节点认证令牌(引用[2]) | `8ewj1p.9r9hcjoqgajrj4gi` | | `--discovery-token-ca-cert-hash` | CA证书指纹(引用[1]) | `sha256:f368ceeb91...` | #### 4. 验证加入结果 ```bash kubectl get nodes # 应显示新控制平面节点Ready状态(如引用[4]) ``` > **关键注意事项**: > 1. 所有节点需满足相同前置条件(容器运行时、kubeadm版本等) > 2. 证书密钥默认有效期2小时,超时需重新生成 > 3. 控制平面节点需要负载均衡配置(引用[3]中`--control-plane-endpoint`) > 4. 网络插件(如Calico/Flannel)需提前部署 [^1]: 普通节点加入命令示例 [^2]: Token管理及CA哈希获取方法 [^3]: 控制平面初始化参数规范 [^4]: 节点状态验证方法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XR风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值