You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Network Policy不生效问题求助(AWS EKS环境)

问题排查:EKS中NetworkPolicy未限制LoadBalancer访问Nginx的问题

在使用Amazon VPC CNI的AWS EKS集群中,应用指定的network_policy.yml配置后,Ingress规则仅开放了8080端口,但仍能通过LoadBalancer的URL访问到监听80端口的Nginx应用。

相关配置文件

app.yml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
        app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
 
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

network_policy.yml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-ingress-egress-app1
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - ports:
    - port: 8080
      protocol: TCP
  egress:
  - ports:
    - port: 3289
      protocol: TCP

原因分析

问题核心在于NetworkPolicy的默认规则和LoadBalancer的流量转发路径:

  1. 当Service的externalTrafficPolicy设为Local时,外部流量会直接路由到运行目标Pod的节点,由节点上的kube-proxy转发至Pod。此时流量源IP是客户端真实IP,但NetworkPolicy默认允许节点本地组件(如kube-proxy)发起的流量,不受配置的Ingress端口规则限制。
  2. 当前配置的NetworkPolicy仅声明了允许8080端口的Ingress流量,但未明确拒绝其他端口的节点来源流量,导致LoadBalancer的80端口请求仍能通过节点转发到Pod。

解决方案

要让NetworkPolicy生效并严格限制LoadBalancer流量,需修改配置明确约束Ingress规则,覆盖节点本地流量的默认允许行为:

修改后的network_policy.yml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-ingress-egress-app1
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  - Egress
  ingress:
  # 仅允许指定端口的Ingress流量,所有未匹配的流量会被默认拒绝
  - ports:
    - port: 8080
      protocol: TCP
  # 若需要允许特定来源的流量(如集群内指定应用),可添加from规则:
  # - from:
  #   - podSelector:
  #       matchLabels:
  #         app: allowed-internal-app
  #   ports:
  #   - port: 8080
  #     protocol: TCP
  egress:
  - ports:
    - port: 3289
      protocol: TCP
  # 建议添加必要的Egress规则(如DNS解析),避免Pod功能异常:
  # - ports:
  #   - port: 53
  #     protocol: UDP
  #   - port: 53
  #     protocol: TCP

额外优化建议:

  • 若不需要保留客户端真实IP,可将Service的externalTrafficPolicy改为Cluster,流量会先路由到任意节点再转发至Pod,此时NetworkPolicy可基于集群内部源IP更精准地限制访问。
  • 确保EKS集群版本在1.19及以上,Amazon VPC CNI默认支持NetworkPolicy;若版本较低,需部署Calico等第三方NetworkPolicy控制器。

内容的提问来源于stack exchange,提问作者Raghunath Dhara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:12:42