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

AWS EKS出口NetworkPolicy无法允许流量访问Redis服务Pod

问题分析与解决方案

一、Redis连接失败的核心原因

从VPC CNI日志可见,后端Pod的流量目标是Redis Service的ClusterIP(192.168.28.141),但你配置的后端Network Policy出口规则仅允许访问符合标签选择器的Redis Pod(目标IP为198.18.7.113)。

AWS VPC CNI的Network Policy是基于实际数据包的目标Pod IP做规则匹配的,而Service ClusterIP不属于任何Pod的IP范围,因此这条发往Service IP的流量无法匹配你的出口规则,最终被myapp-netpol-denyall-branch-develop的默认拒绝策略拦截。

二、修复方案

你需要在后端的Network Policy中添加允许访问Redis Service ClusterIP的出口规则,或放宽规则覆盖集群Service IP段:

方案1:允许访问Redis具体Service IP

修改myapp-netpol-allow-backend-branch-develop的Egress规则,新增针对Redis Service ClusterIP的规则:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: myapp-netpol-allow-backend-branch-develop
  namespace: mynamespace
spec:
  podSelector:
    matchLabels:
      app: backend-branch-develop
      release-name: branch-develop
      software-name: myapp
  policyTypes:
  - Ingress
  - Egress
  ingress:
  # 保留原有Ingress规则
  - ports:
    - port: 1337
      protocol: TCP
    from:
    - podSelector:
        matchLabels:
          app.kubernetes.io/component: controller
          app.kubernetes.io/name: ingress-nginx
  egress:
  # 保留原有Redis Pod访问规则
  - ports:
    - port: 6379
      protocol: TCP
    to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: mynamespace
      podSelector:
        matchLabels:
          app: redis-branch-develop
          release-name: branch-develop
          software-name: myapp
  # 新增允许访问Redis Service IP的规则
  - ports:
    - port: 6379
      protocol: TCP
    to:
    - ipBlock:
        cidr: 192.168.28.141/32

方案2:允许访问集群Service CIDR段

若集群内有多个Service需要访问,可直接允许访问整个集群的Service CIDR(集群创建时指定,通常为类似192.168.0.0/16的网段):

# 在Egress规则中新增
- ports:
  - port: 6379
    protocol: TCP
  to:
  - ipBlock:
      cidr: 192.168.0.0/16  # 替换为你的集群Service CIDR

三、查看Network Policy选择器匹配的Pod

kubectl没有直接通过describe networkpolicy展示匹配Pod的功能,但可通过以下原生命令实现:

  1. 查看Network Policy自身选中的Pod
    针对Network Policy的podSelector,直接用标签筛选:
# 查看后端Network Policy选中的Pod
kubectl get pods -n mynamespace -l app=backend-branch-develop,release-name=branch-develop,software-name=myapp

# 查看Redis Network Policy选中的Pod
kubectl get pods -n mynamespace -l app=redis-branch-develop,release-name=branch-develop,software-name=myapp
  1. 查看Ingress/Egress规则中To/From匹配的Pod
    比如查看允许访问Redis的后端Pod:
kubectl get pods -n mynamespace -l app=backend-branch-develop,release-name=branch-develop,software-name=myapp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:59:52