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

相关推荐
吠品40 分钟前
高性能JS数组操作:何时选用push、unshift、splice或扩展运算符?
linux·服务器·数据库
fish_xk1 小时前
Linux中的指令和权限
linux·运维·服务器
暴力求解1 小时前
Linux---内核态
linux·运维·服务器
mounter6251 小时前
深入理解 Linux 网络新特性:netkit 中的 RX/TX Queue Leasing 与 TCP Devmem
linux·服务器·网络·tcp/ip·kernel
dvjr cloi2 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos
zhouwy1132 小时前
Linux系统管理命令大全
linux·运维
zhangrelay2 小时前
三分钟云课实践速通--单片机原理与应用--Arduino--SimulIDE--
linux·单片机·嵌入式硬件·学习·ubuntu
zzzyyy5382 小时前
Linux之缓冲区
linux·运维·服务器
hwscom2 小时前
Linux服务器如何进行安全加固,防止黑客攻击(Windows也适用)
linux·服务器·安全
lzh200409193 小时前
Linux管道(Pipe)深度指南:从原理到实战
linux·c++