kubesphere安装过程中ssh报错

558 阅读2分钟

image.png

问题分析

SSH 连接失败通常由以下原因引起:

  1. SSH 密钥未正确配置:KubeKey 需要免密登录节点。
  2. SSH 服务未开放或配置错误:目标节点的 SSH 服务未运行或禁止密码/密钥登录。
  3. 防火墙或安全组阻止连接:端口 22 被阻断。
  4. 网络不可达:控制节点与目标节点之间网络不通。

逐步解决方案

1. 检查目标节点 SSH 服务状态

登录到目标节点 10.0.167.2,执行:

# 查看 SSH 服务状态
systemctl status sshd

# 如果未运行,启动 SSH 服务
systemctl start sshd
systemctl enable sshd

2. 配置 SSH 免密登录

在控制节点(执行 ./kk 的机器)生成 SSH 密钥并分发到目标节点:

# 生成密钥(如果尚未生成)
ssh-keygen -t rsa -b 4096

# 将公钥复制到目标节点
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.167.2

注意:如果目标节点用户不是 root,替换为实际用户名。


3. 检查 SSH 配置文件

在目标节点 10.0.167.2 上编辑 SSH 配置文件:

vi /etc/ssh/sshd_config

确保以下配置项启用:

PermitRootLogin yes          # 允许 root 登录
PubkeyAuthentication yes     # 启用密钥认证
PasswordAuthentication yes   # 临时启用密码认证(测试用)

保存后重启 SSH 服务:

systemctl restart sshd

4. 检查防火墙规则

在目标节点上开放 22 端口:

# 使用 firewalld
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload

# 或临时关闭防火墙(测试用)
systemctl stop firewalld

5. 验证网络连通性

从控制节点测试到目标节点的连通性:

# 测试 ICMP 连通性
ping 10.0.167.2

# 测试 SSH 端口连通性
telnet 10.0.167.2 22
  • 如果 telnet 失败,检查云服务商安全组或网络 ACL 规则。

6. 调整 KubeKey 命令参数

在 KubeKey 命令中显式指定 SSH 用户和私钥路径:

./kk create cluster \
  --with-kubernetes v1.22.10 \
  --with-kubesphere v3.3.0 \
  --user root \              # 指定 SSH 用户
  --pk-file ~/.ssh/id_rsa    # 指定私钥路径

验证 SSH 连接

手动测试 SSH 登录:

ssh -i ~/.ssh/id_rsa root@10.0.167.2

如果成功,继续执行 KubeKey 命令。


附录:KubeKey 配置文件示例

创建 config.yaml 文件,明确指定节点信息:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: my-cluster
spec:
  hosts:
    - {name: master, address: 10.0.167.2, internalAddress: 10.0.167.2, user: root, privateKeyPath: ~/.ssh/id_rsa}
  roleGroups:
    etcd:
      - master
    control-plane:
      - master
    worker:
      - master
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.22.10
    clusterName: cluster.local
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
  registry:
    registryMirrors: []
    insecureRegistries: []
  addons: []

执行命令:

./kk create cluster -f config.yaml

总结

通过上述步骤,确保:

  1. SSH 服务在目标节点正常运行。
  2. 控制节点可通过密钥免密登录目标节点。
  3. 防火墙和安全组开放端口 22
  4. KubeKey 配置文件中指定正确的节点信息和密钥路径。