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的流量转发路径:
- 当Service的
externalTrafficPolicy设为Local时,外部流量会直接路由到运行目标Pod的节点,由节点上的kube-proxy转发至Pod。此时流量源IP是客户端真实IP,但NetworkPolicy默认允许节点本地组件(如kube-proxy)发起的流量,不受配置的Ingress端口规则限制。 - 当前配置的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
相关产品推荐
相关产品推荐

