You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AWS Kubernetes集群Pod无法访问同网络VM服务的问题咨询

这种情况我在AWS环境里踩过好几次坑了——能Ping通但端口连不上,基本都是网络层面的拦截在搞怪,咱们一步步排查解决:

排查步骤与解决方案

1. 先检查VM本地的防火墙设置

Ping走的是ICMP协议,而wget用的是TCP,很多时候本地防火墙只放行了ICMP但没开对应TCP端口。

  • 先查看当前防火墙规则:
    # 针对Amazon Linux/CentOS系统
    sudo firewall-cmd --list-all
    # 针对Ubuntu/Debian系统
    sudo ufw status
    
  • 如果看不到目标端口的允许条目,赶紧添加规则:
    # Amazon Linux/CentOS 永久添加并生效规则
    sudo firewall-cmd --add-port=<你的端口>/tcp --permanent
    sudo firewall-cmd --reload
    # Ubuntu/Debian
    sudo ufw allow <你的端口>/tcp
    

2. 核对AWS安全组与网络ACL

AWS的安全组是网络访问的第一道关卡,别忽略了:

  • 检查VM所属的安全组,入站规则必须允许K8s集群节点的IP段访问目标TCP端口。因为Pod的出站流量是通过节点IP转发的,所以节点IP得能打通VM的端口。
  • 同时检查K8s集群节点的安全组,出站规则要放行到VM IP和目标端口的流量。
  • 要是你的VPC配置了网络ACL,也要确认ACL的入站、出站规则都允许对应IP段和端口的TCP流量(ACL是双向管控的,入站和出站都得设置)。

3. 排查Kubernetes网络策略

如果你的集群用了Calico、Cilium这类支持网络策略的CNI插件,可能存在限制Pod出站流量的策略:

  • 先查看Pod所在命名空间的网络策略:
    kubectl get networkpolicies -n <你的Pod所在命名空间>
    
  • 要是有拒绝出站到VM IP的策略,要么修改策略添加允许规则,要么先临时删除策略测试连通性——如果删了就正常,那就是策略的问题。

4. 确认应用的监听地址

有时候应用本身只绑定了127.0.0.1,导致只能VM本地访问,外部(包括Pod)连不上:

  • 在VM上执行命令查看应用的监听情况:
    ss -tulpn | grep <你的端口>
    
  • 如果输出里的地址是127.0.0.1:<端口>,赶紧修改应用配置,让它绑定0.0.0.0或者VM的内网IP,这样外部才能访问。

5. 先测试节点到VM的连通性

把问题拆解简化:先在K8s集群的任意节点上执行wget http://<VM_IP>:<port>/status

  • 如果节点也连不上,那问题出在节点到VM的网络(安全组、防火墙),和Pod无关,专注解决节点到VM的连通问题即可。
  • 如果节点能连上,再回头排查Pod的网络策略或者CNI配置是否存在限制。

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

火山引擎 最新活动