为何HTTP负载均衡转发规则排除已封锁GKE节点?如何禁用该行为?
首先得明确:GKE的HTTP负载均衡默认会自动把处于NodeNotSchedulable状态的节点从转发规则的节点列表中移除,这是GKE负载均衡控制器的内置逻辑——它认为这类节点无法接收新的调度请求,也就默认不会再把流量转发过去,避免无效的流量分发。
遗憾的是,目前没有官方支持的配置项可以直接禁用这个自动移除行为,因为这是GKE平台层面的默认机制。
不过针对你提到的「封锁节点但仍要让节点上的nginx Pod保持可访问」的场景,有几个替代方案可以解决问题:
使用
ExternalTrafficPolicy=Local配置服务
如果你使用的是NodePort或LoadBalancer类型的Service,给Service添加externalTrafficPolicy: Local字段。这样负载均衡会直接将流量转发到运行着目标Pod的节点上,即使节点处于NodeNotSchedulable状态,只要Pod本身健康且在运行,流量就能正常到达。这个配置还能保留客户端的源IP,不过可能会影响流量的均匀分布。改用Pod级别的负载均衡后端
借助GKE的Gateway API或者直接配置Cloud Load Balancer的Pod后端(需要确保Pod有合适的标签和健康检查),让负载均衡直接瞄准Pod而非节点。这种情况下,节点的调度状态不会影响Pod的可达性,只要Pod处于健康状态,流量就会被转发过去。临时手动调整(不推荐长期使用)
如果只是临时需要让节点留在LB列表中,你可以手动编辑负载均衡的后端服务,把被移除的节点重新添加回去。但要注意,GKE的控制器可能会在后续的同步操作中再次覆盖这个配置,所以这只能作为临时应急手段。
附上你提供的负载均衡转发规则截图:
内容的提问来源于stack exchange,提问作者erkez

