Kubernetes中不可修改NetPol时跨Namespace Pod Ingress/Egress通信问题
可行解决方案
以下方案均满足不修改现有已部署K8s对象、不调整原有NetPol规则的要求:
- 节点主机层插入高优先级放行规则
现有NetPol的流量控制逻辑本质是CNI插件在集群节点的网络栈(iptables/OVS/eBPF)中生成的规则,你可以直接登录对应节点,插入优先级高于NetPol规则的放行规则,直接允许两个目标Pod的IP双向通信,该操作不会修改任何K8s层面的已部署对象。 - 新增中转Namespace和代理服务
新建一个独立的Namespace,在该Namespace内部署TCP/UDP双向代理(比如Nginx、Envoy、socat等),同时新增仅针对该新Namespace的NetPol规则,允许其和两个目标Pod所在Namespace的对应端口通信。新建对象不属于修改现有已部署对象的范畴,完全符合要求。 - hostNetwork代理中继
在两个Pod所在的节点上,启动使用hostNetwork: true的临时代理进程,NetPol默认不会过滤hostNetwork模式下进程的流量。两个代理分别监听节点的空闲端口,将收到的流量转发到本地对应Pod的目标端口,两个Pod通过访问对方节点的代理端口即可实现双向通信。 - 第三方中间服务间接通信
如果集群内存在不受现有NetPol限制的公共中间服务(比如集群级缓存、消息队列、对象存储等),可以让两个Pod均通过访问该中间服务来交换数据,实现间接的双向通信,全程不需要修改任何现有部署配置。 - 底层辅助网卡直通通信
如果集群底层支持Underlay网络或SR-IOV等硬件直通能力,可以为两个Pod额外分配不经过NetPol过滤的底层网络辅助网卡,两个Pod直接通过辅助网卡的IP进行通信,流量不会触发现有NetPol的拦截规则。
内容的提问来源于stack exchange,提问作者user9356263
相关产品推荐
相关产品推荐

