首页/云/Kubernetes 速查/默认拒绝下放行 Ingress 控制器
网络与服务55 条

默认拒绝下放行 Ingress 控制器

给业务上默认拒绝策略后,Ingress 控制器到后端的入向流量也要显式放行,否则入口返回 503 且应用毫无请求日志。

Kubernetes 速查云更新于 2026-10-13

默认拒绝会挡住入口

给业务命名空间加默认拒绝策略后,不仅东西向流量被拦,从入口控制器到后端的请求也会被拦住。典型表现是入口返回服务不可用,而应用日志里一条请求记录都没有。放行入口控制器是收缩网络范围后必须同步完成的一步。

基本信息

所属接口组networking.k8s.io/v1
关键前提网络插件必须支持策略执行
放行对象入口控制器所在命名空间
依赖标签命名空间的名称标签通常由系统自动维护
验证方法从入口发起请求并确认后端日志出现记录

典型使用场景

  • 业务命名空间启用默认拒绝后补齐入口放行规则
  • 入口控制器与业务不在同一命名空间,需要跨命名空间放行
  • 新增第二个入口控制器后同步新增放行来源
  • 排查入口返回不可用:先确认是不是策略挡住了回源流量
  • 收紧策略时复核入口相关放行是否仍然完整

放行入口控制器

放行入口控制器
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-ingress-controller
  namespace: prod
spec:
  podSelector:
    matchLabels:
      app: web                 # 只作用于目标业务
  policyTypes: ["Ingress"]
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: ingress-nginx   # 按命名空间标签放行
      ports:
        - protocol: TCP
          port: 8080           # 后端容器实际监听端口

验证放行结果

验证放行结果
kubectl get networkpolicy -n prod                        # 现有策略
kubectl describe networkpolicy allow-ingress-controller -n prod
curl -s -o /dev/null -w '%{http_code}\n' http://app.example.com/health   # 从入口验证
kubectl logs -n prod deploy/web --tail=20                # 后端是否出现请求记录

现象与成因

现象可能原因确认方式
入口返回不可用回源流量被策略拦截后端日志无请求记录
部分版本正常部分异常放行规则未覆盖新端口核对策略中的端口号
放行后仍不通插件不执行策略或标签不匹配做拒绝场景对照验证
入口更换后失效放行来源仍是旧命名空间更新命名空间标签选择条件
按命名空间标签放行比按固定地址稳:入口控制器的副本地址会随重建与扩缩容变化,而命名空间名称标签由系统维护,引用更可靠。
不要用节点网段的方式放行入口:控制器回源使用的是它自己那组 Pod 地址,与节点网段往往不匹配,规则看起来合理却完全不生效。

易错点

  • 启用默认拒绝后忘记放行入口:业务对外不可访问,应用侧却没有任何错误日志
  • 按节点网段放行控制器:回源地址与节点网段不一致,规则形同虚设
  • 放行规则没写端口:后端监听端口不在允许范围内,连接仍被拒绝
  • 更换入口控制器后未更新策略:旧命名空间引用失效,入口重新变得不可用

数据来源与参考

  • Kubernetes 官方文档 · NetworkPolicy / ingress-nginx 网络要求
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌