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 集群部署的"第一步基础设施能力"

相关推荐
开开心心就好11 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
予枫的编程笔记12 小时前
【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖
linux·sed·grep·awk·shell编程·文本处理三剑客·管道命令
Sheep Shaun12 小时前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区
Tfly__12 小时前
在PX4 gazebo仿真中加入Mid360(最新)
linux·人工智能·自动驾驶·ros·无人机·px4·mid360
陈桴浮海12 小时前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible
生活很暖很治愈12 小时前
Linux——环境变量PATH
linux·ubuntu
?re?ta?rd?ed?12 小时前
linux中的调度策略
linux·运维·服务器
深圳市九鼎创展科技12 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
hweiyu0013 小时前
Linux 命令:tr
linux·运维·服务器
Trouvaille ~13 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议