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

相关推荐
Hard but lovely16 小时前
Linux: 线程同步-- 基于条件变量 &&生产消费模型
linux·开发语言·c++
m0_7381207216 小时前
应急响应——知攻善防靶场Linux-1详细应急过程
linux·运维·服务器·网络·web安全·ssh
Guistar~~16 小时前
【Linux驱动开发IMX6ULL】WS73 驱动移植的详细教程基于USB协议--WIFi网卡、蓝牙BLE、星闪SLE
linux·驱动开发
GHL28427109016 小时前
无法连接服务端socket
linux·服务器·网络
Fortune_yangyang16 小时前
Kubernetes 操作管理
云原生·容器·kubernetes
阿华hhh16 小时前
项目(购物商城)
linux·服务器·c语言·c++
摸鱼仙人~17 小时前
大模型文章生成的风格个性化与多文体写作:一套可落地的方法论
linux·运维·服务器
煤球王子17 小时前
浅学文件系统4(页面缓存)
linux
peixiuhui17 小时前
Iotgateway技术手册-1. 项目概述
linux·网关·iot·modbus·数据采集网关·iotgateway·采集软件