You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes的两个Pod之间建立SSH连接?

实现Kubernetes集群中两个Pod间的SSH连接方法

我来一步步拆解怎么让K8s集群里的两个Pod通过SSH互相访问,亲测有效,分基础操作和优化方案两部分:

一、基础前提准备

首先得确保两个Pod满足以下条件:

  • 处于同一个K8s集群,且集群网络插件(比如Flannel、Calico)已正常配置,保证Pod间网络互通
  • 目标Pod(要被SSH连接的那个)安装了openssh-server服务
  • 发起连接的Pod安装了openssh-client客户端

二、具体操作步骤

1. 给目标Pod配置SSH服务

先进入目标Pod,安装并启动SSH服务:

# 进入目标Pod,替换成你的Pod名称和Namespace
kubectl exec -it <target-pod-name> -n <namespace> -- /bin/bash

# 更新包列表(Debian/Ubuntu系为例)
apt update && apt install -y openssh-server

# 启动SSH服务
service ssh start

# 可选:设置SSH服务开机自启(避免Pod重启后失效)
update-rc.d ssh enable

接下来设置登录凭证,推荐用密钥登录更安全,当然也可以设置密码:

方式A:密码登录(简单但安全性低)

# 设置root密码(或者创建新用户,更推荐)
passwd root
# 输入你要设置的密码,确认两次

方式B:密钥登录(安全推荐)

在发起连接的Pod里生成密钥对:

kubectl exec -it <source-pod-name> -n <namespace> -- /bin/bash
ssh-keygen -t rsa -b 4096
# 一路回车默认设置即可

然后把公钥复制到目标Pod的~/.ssh/authorized_keys文件里:

# 在发起Pod里复制公钥内容
cat ~/.ssh/id_rsa.pub

# 切换到目标Pod,创建.ssh目录并写入公钥
mkdir -p ~/.ssh
echo "刚才复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

2. 获取目标Pod的IP地址

你可以通过kubectl命令直接查看:

kubectl get pods -n <namespace> -o wide

在输出结果里找到目标Pod的IP列,或者直接在目标Pod里执行hostname -i获取。

3. 发起SSH连接

进入发起连接的Pod,执行SSH命令:

# 密码登录方式
ssh root@<target-pod-ip>
# 输入之前设置的密码即可

# 密钥登录方式(如果用默认密钥路径,直接执行即可)
ssh root@<target-pod-ip>

三、优化与安全注意事项

  • 避免用root用户:尽量创建专用的普通用户来进行SSH登录,减少权限风险
  • 网络策略限制:如果集群启用了NetworkPolicy,要确保允许发起Pod的IP访问目标Pod的22端口
  • Pod重启后SSH服务失效?:可以把安装SSH服务的步骤写到Docker镜像里,或者用Init Container来初始化,这样Pod重启后服务会自动启动
  • 生产环境谨慎使用:K8s官方更推荐用kubectl exec直接进入Pod调试,SSH方式会增加攻击面,非必要不建议在生产集群使用

内容的提问来源于stack exchange,提问作者user2223296

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:51:28