在Kubernetes集群中访问公网PostgreSQL服务器遇端口问题求助
Azure PostgreSQL防火墙规则未包含K8s集群出口IP
Azure PostgreSQL的防火墙默认只放行指定IP访问,你的本地机器IP已经在允许列表里,但K8s Pod的出口IP(通常是集群节点公网IP或NAT网关IP)大概率不在。
排查:登录Azure Portal,找到目标PostgreSQL服务器,进入「连接安全」页面查看防火墙规则。
解决:将K8s集群的出口IP/IP段添加到防火墙允许列表中。Kubernetes网络策略拦截出站流量
集群中可能存在NetworkPolicy规则,禁止Pod对外访问5432端口或目标PostgreSQL的IP地址。
排查:执行命令kubectl get networkpolicies --all-namespaces,检查是否有针对Pod出站流量的限制规则。
解决:修改对应NetworkPolicy,允许Pod访问目标PostgreSQL的IP和5432端口;若无需严格限制,可直接删除相关限制策略。AKS节点NSG出站规则限制
Azure Kubernetes集群的节点VM对应的网络安全组(NSG)可能未配置允许访问目标PostgreSQL 5432端口的出站规则。
排查:在Azure Portal找到AKS集群的节点资源组,查看节点VM的NSG出站规则列表。
解决:添加NSG出站规则,允许目标PostgreSQL IP的5432端口流量。Pod内DNS解析或端口连通性问题
提示"端口未开放"也可能是Pod无法解析PostgreSQL公网域名,导致连接失败被误判。
排查:进入Pod内部执行nslookup <你的PostgreSQL公网域名>验证解析;再用nc -zv <PostgreSQL_IP> 5432直接测试IP和端口的连通性,区分是解析还是端口问题。
解决:若解析失败,检查集群DNS配置确保可解析公网域名;若端口不通,回到前面的防火墙/安全组排查。PostgreSQL监听地址配置限制(低概率)
若PostgreSQL的listen_addresses仅绑定本地IP或特定IP,会导致仅允许指定来源访问,但这种情况本地机器也无法正常访问,可能性较低。
排查:登录PostgreSQL服务器执行SHOW listen_addresses;,确认是否设置为*或包含公网IP。
解决:修改postgresql.conf中的listen_addresses为*,重启PostgreSQL服务。
内容的提问来源于stack exchange,提问作者Aarsh

