如何在AKS上为回环IP 127.0.0.1开放22端口
问题根因
AKS默认节点镜像(Ubuntu/Azure Linux)和普通自建Linux VM的默认配置存在两处差异,会导致回环IP 22端口连接被关闭:
- sshd服务默认仅监听节点主网卡IP,未绑定回环地址
127.0.0.1 - 节点内置的
iptables/nftables规则默认拦截lo接口上未显式放行的22端口TCP流量,连接会被直接重置返回Connection closed报错
解决方案
根据操作场景选择对应配置即可:
场景1:节点主机层面访问127.0.0.1:22
- 修改sshd监听配置
可通过kubectl debug启动特权Pod挂载节点文件系统、或通过Azure串口控制台/SSH直连节点,编辑/etc/ssh/sshd_config文件,在原有ListenAddress配置下新增一行:
不要删除原有节点主网卡IP的ListenAddress配置,避免影响节点正常SSH登录能力。ListenAddress 127.0.0.1 - 添加防火墙放行规则
执行对应命令添加lo接口22端口的放行规则:
上述规则临时生效,节点重启、kubelet重置规则后会失效,持久化可通过特权DaemonSet配置开机/规则重置时自动重添。# Ubuntu节点使用iptables iptables -I AKS-INPUT -i lo -p tcp --dport 22 -j ACCEPT # Azure Linux节点使用nftables nft add rule inet filter AKS-INPUT iif lo tcp dport 22 accept - 重启sshd加载配置
执行systemctl restart sshd,之后再通过telnet 127.0.0.1 22测试即可正常连通。
场景2:Pod内部访问自身回环IP的22端口
- 先执行
ss -tulnp | grep :22确认Pod内是否有进程监听127.0.0.1:22,无监听则先在Pod内启动sshd服务并配置绑定回环地址。 - 若已存在监听仍报错,先检查Pod是否配置
hostNetwork: true使用主机网络,是则参考场景1配置节点防火墙规则;若为普通Pod网络,检查是否启用了服务网格Sidecar(Istio/Linkerd等)拦截22端口流量,临时关闭Sidecar注入重建Pod即可验证。
注意:不要直接清空AKS节点默认防火墙规则做全放行,节点升级、kubelet重启时会自动重置默认规则,所有自定义节点配置建议通过DaemonSet做常驻同步,避免配置丢失。
内容的提问来源于stack exchange,提问作者SAURAV KUMAR
相关产品推荐
相关产品推荐

