kubeadm join 用于将新节点加入现有 Kubernetes 集群,核心前提是双向信任:节点需验证控制平面(Discovery),控制平面需验证节点(TLS Bootstrap)。
用途与场景:适用于添加工作节点、为高可用添加控制平面节点、排查节点加入失败,以及理解 TLS Bootstrap 机制。
基本命令(来自 kubeadm init 输出):
kubeadm join 192.168.10.100:6443
--token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:xxxx...
其中 192.168.10.100:6443 为 API Server 端点,--token 为 Bootstrap Token,--discovery-token-ca-cert-hash 为 CA 证书指纹(防 MITM)。
工作节点加入分为 preflight、discovery、TLS bootstrap、kubelet-start 四个阶段;控制平面(HA)加入额外包含 control-plane-prepare(下载证书、生成清单)、etcd-join、control-plane-join(应用标签/污点),并使用 --control-plane 与 --certificate-key。证书密钥可通过在现有控制平面执行 kubeadm init phase upload-certs --upload-certs 获取,或在初次 kubeadm init 时加 --upload-certs。
Token 管理:kubeadm token list 列出;kubeadm token create 创建,可配合 --print-join-command 输出完整加入命令,或用 --ttl 2h 自定义有效期。CA 哈希通过 openssl 从 /etc/kubernetes/pki/ca.crt 计算。
Discovery 方式有三种:默认基于 Token(从 kube-public 的 cluster-info ConfigMap 获取信息并用哈希校验 CA);基于文件(--discovery-file,适用于离线或高安全环境);以及不安全方式 --discovery-token-unsafe-skip-ca-verification(跳过 CA 校验,存在 MITM 风险)。TLS Bootstrap 流程为:获取 cluster-info → 用 Token 认证 → 提交 CSR(自动批准)→ 获得签名证书 → 以证书访问 kubelet。也可使用 JoinConfiguration 配置文件(apiVersion: kubeadm.k8s.io/v1beta4),设置 discovery.bootstrapToken、nodeRegistration.kubeletExtraArgs 的 node-ip 与 criSocket 等,然后执行 kubeadm join --config=join-config.yaml。
常见问题:6443 连接拒绝(防火墙需放行 6443/tcp、10250/tcp);Token 过期(默认 24 小时,错误提示为找不到 JWS 签名);CA 哈希不匹配;TLS bootstrap 超时(网络/防火墙);节点 IP 错误(多网卡时设置 node-ip);x509 证书错误(时钟偏移,需同步 NTP)。
排障步骤包括:从工作节点 curl -k https://<API>:6443/healthz 验证可达性;在控制平面检查 Token 有效期;检查网络连通性;检查 firewalld 并放行端口;查看 journalctl -u kubelet -f 日志。失败后可执行 kubeadm reset -f,删除 /etc/kubernetes 与 /var/lib/kubelet,清空 iptables 后重新 join。
验证清单:kubectl get nodes 中节点出现、安装 CNI 后变为 Ready、kubelet 服务运行、kube-proxy 运行、/etc/kubernetes/kubelet.conf 与 /var/lib/kubelet/config.yaml 存在。
限制:未提供版本兼容范围、平台支持、性能或收费信息;所有操作需具备对应节点 root 权限与网络访问。