K8s 集群部署基础:Linux 三节点 SSH 互信(免密登录)配置指南

文档说明

在 Kubernetes(K8s)集群部署与日常运维过程中(如 kubeadmAnsible、脚本化部署、批量运维等),控制节点与工作节点之间必须具备稳定的 SSH 互信能力

本文档以 三台 Linux 节点 为示例,说明如何配置 节点之间的 SSH 免密登录(SSH Mutual Trust),为后续 Kubernetes 集群部署提供基础环境保障。


1. 节点规划示例

节点名 角色示例 说明
node0 control-plane Kubernetes 主节点
node1 worker 工作节点
node2 worker 工作节点

实际生产环境中可扩展为更多节点,配置方式一致。


2. 前提条件

在开始配置前,请确保以下条件已满足:

  1. 网络互通

    • 所有节点之间可通过 IP 或主机名互相访问
    bash 复制代码
    ping node1
    ping node2
  2. SSH 服务已安装并运行

    bash 复制代码
    sudo apt-get install -y openssh-server
    sudo systemctl enable ssh
    sudo systemctl start ssh
  3. 统一用户

    • 使用 root 用户,或具备 sudo 权限的同一普通用户
    • 下文默认使用当前登录用户操作

3. 生成 SSH 密钥对(每台节点)

每一台节点 上执行以下命令:

bash 复制代码
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

参数说明

  • -t rsa:使用 RSA 密钥算法
  • -b 4096:密钥长度 4096 位(生产环境推荐)
  • -N "":不设置密码(用于自动化)
  • -f ~/.ssh/id_rsa:指定密钥文件路径

生成结果

text 复制代码
~/.ssh/id_rsa      # 私钥(禁止泄露)
~/.ssh/id_rsa.pub  # 公钥(用于分发)

⚠️ 注意:每台节点都必须单独生成密钥,不要拷贝私钥。


4. 节点之间分发公钥(建立互信)

4.1 单向免密(示例)

仅配置 node0node1 免密登录:

bash 复制代码
ssh-copy-id -i ~/.ssh/id_rsa.pub node1

测试:

bash 复制代码
ssh node1

无需输入密码即表示成功。


4.2 三节点完全互信(推荐)

目标:node0 / node1 / node2 之间任意互相 SSH 免密

在任意一台管理节点执行:
bash 复制代码
for src in node0 node1 node2; do
  for dst in node0 node1 node2; do
    if [ "$src" != "$dst" ]; then
      ssh $src "ssh-copy-id -i ~/.ssh/id_rsa.pub $dst"
    fi
  done
done

执行过程中:

  • 首次连接会提示 yes/no
  • 需要输入一次目标节点密码
  • 完成后即永久免密

5. SSH 权限校验(非常重要)

所有节点 上执行:

bash 复制代码
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

否则可能出现:

text 复制代码
Permission denied (publickey)

6. 验证免密效果

在任意节点执行:

bash 复制代码
ssh node0
ssh node1
ssh node2

均应 无需输入密码即可登录


7. 常见问题排查

7.1 连接被拒绝

text 复制代码
ssh: connect to host xxx port 22: Connection refused

处理方式:

bash 复制代码
sudo systemctl status ssh
sudo systemctl start ssh

7.2 公钥无效 / 权限错误

text 复制代码
Permission denied (publickey)

检查:

  • ~/.ssh 权限是否为 700
  • authorized_keys 权限是否为 600
  • 公钥是否正确写入目标节点

8. 在 Kubernetes 中的作用

完成 SSH 免密后,可直接用于:

  • kubeadm init / join
  • Ansible 批量部署 Kubernetes
  • 节点初始化脚本(containerd / kubelet / sysctl)
  • 日志收集、批量升级、证书同步

👉 这是 Kubernetes 集群部署的"第一步基础设施能力"

相关推荐
蝎子莱莱爱打怪1 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
木心月转码ing4 天前
WSL+Cpp开发环境配置
linux
蝎子莱莱爱打怪5 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes