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

文档说明

在 Kubernetes(K8s)集群部署与日常运维过程中(如 kubeadm、Ansible、脚本化部署、批量运维等),控制节点与工作节点之间必须具备稳定的 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 单向免密(示例)

仅配置 node0 → node1 免密登录:

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

相关推荐
Ruiery7 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧7 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery7 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw8 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁10 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
是真的小外套13 小时前
网络安全实战第7期:Hydra爆破SSH实战
安全·web安全·ssh
沫璃染墨14 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AI_Lab0115 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by2099915 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风16 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip