Azure NSG规则不生效:Kubernetes集群公网IP无法访问问题
问题背景
我部署了包含Nginx服务器的Kubernetes集群,通过LoadBalancer类型的服务绑定公网IP 8.8.8.8,域名已指向该IP。所有流向Kubernetes节点的流量均经过网络安全组(NSG),当前NSG规则如下:
| Priority | Name | Port | Protocol | Source | Destination | Action |
|---|---|---|---|---|---|---|
| 900 | AllowAllIngress | Any | Any | Any | 8.8.8.8 | Allow |
| 1000 | DenyAllInbound | Any | Any | Internet | Any | Deny |
预期结果
访问该公网IP或对应域名可正常连接到Nginx服务。
实际情况
无法连接该IP;将DenyAllInbound规则改为允许后连接正常,改回拒绝则连接失败。
问题原因
NSG规则按优先级数值越小越先执行,但当前第一条AllowAllIngress规则无法匹配实际入站流量:
- Kubernetes LoadBalancer的公网IP
8.8.8.8是流量转发入口,外部Internet流量到达该IP后,会被转发到Kubernetes节点的私网IP,而非直接以8.8.8.8作为目标地址流向节点。 - 第一条规则的
destination设置为8.8.8.8,完全匹配不到实际流向节点私网IP的流量,因此流量会触发后续优先级1000的DenyAllInbound规则被拒绝。
解决方案
修改AllowAllIngress规则的destination字段,使其覆盖Kubernetes节点的私网IP范围,同时建议缩小端口范围以提升安全性:
- 先获取集群所有节点的私网IP段(例如
10.0.0.0/24) - 更新NSG规则为:
Priority Name Port Protocol Source Destination Action 900 AllowNginxIngress 80,443 TCP Internet 10.0.0.0/24 Allow 1000 DenyAllInbound Any Any Internet Any Deny
若需快速验证,可临时将AllowAllIngress的destination改为Any,确认连接正常后再调整为精准的节点IP范围和端口。
内容的提问来源于stack exchange,提问作者Bok
相关产品推荐
相关产品推荐

