AKS节点池已禁用节点公网IP但VMSS节点仍存在公网IP的原因咨询
嘿,咱们来拆解下为啥你新添加的AKS节点池明明禁用了「为每个节点启用公网IP」选项,VMSS里的节点却还是有公网IP。结合你提到的细节——kubectl get nodes -o wide里看不到EXTERNAL-IP,但VMSS里能看到公网IP,而且该IP的443端口还能打通——以下是最可能的几个原因:
出站流量配置自动分配的IP
AKS集群需要访问外网拉取容器镜像、获取更新,还要和Azure控制平面通信。如果你的集群用的是LoadBalancer出站类型(很多默认部署都是这个配置),哪怕你禁用了节点的入站公网IP,Azure也会自动给VMSS节点分配公网IP用于出站流量。这些IP不会在kubectl get nodes结果里显示,因为它们绑定的是出站路由逻辑,不属于节点面向入站的网络接口配置。不过你能打通443端口,可能是因为节点池关联的网络安全组(NSG)允许了这个端口的入站流量——哪怕你没明确开启节点的入站公网IP,NSG的默认规则(比如用于kubelet和控制平面通信的规则)如果被放宽,就会被外部访问到。VMSS配置被手动修改过
虽然AKS会全权管理节点池对应的VMSS,但也存在小概率情况:有人在节点池创建后,直接在Azure门户或通过CLI修改了VMSS的实例级配置,比如手动开启了「分配公网IP」选项。这种情况下,不管AKS节点池的初始设置是什么,每个VMSS节点都会被分配公网IP。你可以去Azure门户找到对应的VMSS,进入「实例」页面选中一个节点,查看它的网络接口IP配置就能确认这点。对「为每个节点启用公网IP」选项的误解
得明确这个选项的作用:它控制的是节点是否获得用于入站连接的公网IP(比如直接SSH登录节点、或者在节点上直接暴露服务)。它并不会完全阻止节点被分配任何公网IP——AKS为了平台内部的必要操作(比如出站流量转发),还是可能会给节点分配公网IP。而kubectl get nodes里看不到EXTERNAL-IP的结果,正好印证了面向入站的公网IP确实是禁用状态,VMSS层面看到的那个IP是用于其他平台操作的。
想要进一步排查的话,可以试试这些操作:
- 用Azure CLI命令
az aks show -g <你的资源组名> -n <你的AKS集群名> --query outboundType查看集群的出站类型 - 检查节点池关联的NSG规则,确认443端口的入站规则是否被允许(默认是仅限控制平面IP段访问,若规则被修改则可能开放给外部)
- 查看VMSS实例的网络接口配置,确认该公网IP是仅用于出站,还是同时支持入站出站
备注:内容来源于stack exchange,提问作者faizan

