来自节点而不是LB服务的GKE群集出口流量

问题描述

我是GKE和K8S的新手,所以请裸露自己和我的愚蠢。我目前有一个GKE群集,该群集在默认节点池中有两个节点,并且该群集通过LoadBalancer类型服务公开。

这些节点的任务是通过HTTP调用Compute Engine实例。我在GCP中设置了防火墙规则,以拒绝进入GCE实例的入口流量,但来自GKE群集的流量除外。

问题在于流量不是来自LoadBalancer的服务IP,而是来自节点本身,因此将服务的IP列入白名单无效,因此我必须将节点的IP列入白名单而不是群集。这是不理想的,因为每次创建新节点时,我都必须更改防火墙规则。我了解,一旦在群集中设置了服务,所有流量都将定向到该服务的IP,那么为什么会发生这种情况?我究竟做错了什么?如果需要更多详细信息,请提前告诉我。

服务的YAML:

https://i.stack.imgur.com/XBZmE.png

解决方法

在GKE上创建服务并将其公开到Internet时,将创建负载均衡器。此负载平衡器仅管理入口流量(从互联网到您的GKE群集的流量)。

当您的Pod发起通信时,流量不是由负载均衡器管理,而是由托管Pod的节点管理(如果该节点具有公共IP)(而不是拒绝对GCE实例的通信,只需删除公共IP,它更简单,更安全!)。

如果要管理由pod发起的出口流量的IP,则必须set up a Cloud NAT on your GKE cluster

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...