文档说明
在 Kubernetes(K8s)集群部署与日常运维过程中(如kubeadm、Ansible、脚本化部署、批量运维等),控制节点与工作节点之间必须具备稳定的 SSH 互信能力。
本文档以三台 Linux 节点为示例,说明如何配置节点之间的 SSH 免密登录(SSH Mutual Trust),为后续 Kubernetes 集群部署提供基础环境保障。
1. 节点规划示例
| 节点名 | 角色示例 | 说明 |
|---|---|---|
| node0 | control-plane | Kubernetes 主节点 |
| node1 | worker | 工作节点 |
| node2 | worker | 工作节点 |
实际生产环境中可扩展为更多节点,配置方式一致。
2. 前提条件
在开始配置前,请确保以下条件已满足:
网络互通
- 所有节点之间可通过 IP 或主机名互相访问
pingnode1pingnode2SSH 服务已安装并运行
sudoapt-getinstall-y openssh-serversudosystemctlenablesshsudosystemctl startssh统一用户
- 使用
root用户,或具备 sudo 权限的同一普通用户 - 下文默认使用当前登录用户操作
- 使用
3. 生成 SSH 密钥对(每台节点)
在每一台节点上执行以下命令:
ssh-keygen -t rsa -b4096-N""-f ~/.ssh/id_rsa参数说明
-t rsa:使用 RSA 密钥算法-b 4096:密钥长度 4096 位(生产环境推荐)-N "":不设置密码(用于自动化)-f ~/.ssh/id_rsa:指定密钥文件路径
生成结果
~/.ssh/id_rsa # 私钥(禁止泄露) ~/.ssh/id_rsa.pub # 公钥(用于分发)⚠️注意:每台节点都必须单独生成密钥,不要拷贝私钥。
4. 节点之间分发公钥(建立互信)
4.1 单向免密(示例)
仅配置node0→node1免密登录:
ssh-copy-id -i ~/.ssh/id_rsa.pub node1测试:
sshnode1无需输入密码即表示成功。
4.2 三节点完全互信(推荐)
目标:node0 / node1 / node2 之间任意互相 SSH 免密
在任意一台管理节点执行:
forsrcinnode0 node1 node2;dofordstinnode0 node1 node2;doif["$src"!="$dst"];thenssh$src"ssh-copy-id -i ~/.ssh/id_rsa.pub$dst"fidonedone执行过程中:
- 首次连接会提示
yes/no - 需要输入一次目标节点密码
- 完成后即永久免密
5. SSH 权限校验(非常重要)
在所有节点上执行:
chmod700~/.sshchmod600~/.ssh/authorized_keys否则可能出现:
Permission denied (publickey)6. 验证免密效果
在任意节点执行:
sshnode0sshnode1sshnode2均应无需输入密码即可登录。
7. 常见问题排查
7.1 连接被拒绝
ssh: connect to host xxx port 22: Connection refused处理方式:
sudosystemctl statussshsudosystemctl startssh7.2 公钥无效 / 权限错误
Permission denied (publickey)检查:
~/.ssh权限是否为700authorized_keys权限是否为600- 公钥是否正确写入目标节点
8. 在 Kubernetes 中的作用
完成 SSH 免密后,可直接用于:
kubeadm init / join- Ansible 批量部署 Kubernetes
- 节点初始化脚本(containerd / kubelet / sysctl)
- 日志收集、批量升级、证书同步
👉这是 Kubernetes 集群部署的“第一步基础设施能力”