全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用TrafficPolicy管理Agent网络访问

更新时间:Apr 02, 2026

TrafficPolicy 用于控制ACKACS集群中 Agent 类应用的网络访问。TrafficPolicy可以基于优先级实现多级网络策略,支持 CIDR、Service、FQDN 等多种匹配方式,精细管理 Pod 出入方向流量。

工作原理

TrafficPolicy 与 GlobalTrafficPolicy

ACKACS集群提供两种网络策略资源:

资源类型

作用范围

适用场景

TrafficPolicy

命名空间级别,作用于指定命名空间中具有特定标签的 Pod

为特定应用配置精细化网络规则

GlobalTrafficPolicy

集群级别,作用于全集群中具有指定标签的Pod

实现全集群安全基线,如禁止访问元数据服务

策略执行规则

TrafficPolicy 的规则匹配遵循以下原则:

  1. 按优先级排序:优先级范围为 1-1000,数值越小优先级越高。高优先级策略先执行。

  2. 同优先级内按顺序匹配:同一策略内的规则按定义顺序从上到下依次匹配。

  3. 命中即止:匹配到第一条规则后立即终止,不再继续匹配后续规则。

  4. 默认拒绝:当 Pod 被任一策略选中后,未被显式允许的流量将被拒绝。

重要

规则顺序直接影响匹配结果。必须将具体的允许或拒绝规则放在最前,兜底规则放在最后。

支持的匹配条件

方向

匹配条件

说明

Ingress(入方向)

cidr

基于源 IP 网段匹配

service

基于来源 Service 匹配

Egress(出方向)

cidr

基于目标 IP 网段匹配

service

基于目标 Service 匹配

fqdn

基于目标域名匹配

Ingress 规则不支持 FQDN 匹配。

与 Kubernetes NetworkPolicy 的对比

相比原生 Kubernetes NetworkPolicy,TrafficPolicy与GlobalTrafficPolicy具有以下优势:

能力

Kubernetes NetworkPolicy

TrafficPolicy与GlobalTrafficPolicy

优先级控制

不支持

支持 1-1000 多级优先级

显式Deny

不支持

支持

FQDN 匹配

不支持

支持

支持的集群规模

集群节点数量不超过5000

集群Pod数量不超过20,000

集群Pod数量不超过50,000

Agent 快速扩缩容场景

管理复杂度高

专为此场景优化

适用范围

  • 集群版本为1.20或更高。

  • 仅适用于虚拟节点上的ACS或ECI Pod。

  • 已安装Poseidon组件,组件版本为v0.7.0或更高,已开启TrafficPolicy功能。

    Poseidon v0.7.0目前正在灰度发布中。

    安装组件或查看版本

    1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

    3. 登录容器计算服务控制台

    4. 集群列表页面,单击目标集群名称,进入该集群的管理页面。

    5. 组件管理页面查看Poseidon组件版本,确认已开启TrafficPolicy功能。

配置示例

快速开始

以下示例展示如何为 Agent 应用配置基础网络策略,允许访问 DNS 服务和公网。

步骤一:在Agent Pod中启用TrafficPolicy

将下方示例保存到agent-pod.yaml,然后执行kubectl apply -f agent-pod.yaml部署示例Pod。

Pod 需要配置 spec.tolerations 以调度到ACS虚拟节点。
  • network.alibabacloud.com/enable-network-policy-agent: "true":启用网络策略 Agent。

  • network.alibabacloud.com/network-policy-mode: "traffic-policy":指定使用 TrafficPolicy 模式。

apiVersion: v1
kind: Pod
metadata:
  name: agent-pod
  annotations:
    network.alibabacloud.com/enable-network-policy-agent: "true"
    network.alibabacloud.com/network-policy-mode: "traffic-policy"
  labels:
    app: agent
    alibabacloud.com/acs: "true"
spec:
  tolerations:
  - key: "virtual-kubelet.io/provider"
    operator: "Equal"
    value: "alibabacloud"
    effect: "NoSchedule"
  containers:
  - name: agent
    image: registry.aliyuncs.com/acs/ubuntu:latest
    command: ["sleep", "infinity"]

步骤二:创建 TrafficPolicy

创建以下 YAML 文件 agent-basic-policy.yaml,允许 Agent 访问 DNS 服务和公网。

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: agent-basic-policy
  namespace: default
spec:
  priority: 100
  selector:
    matchLabels:
      app: agent

  egress:
    rules:
      # 允许访问 DNS 服务
      - action: allow
        to:
          - service:
              namespace: kube-system
              name: kube-dns

      # 允许访问公网
      - action: allow
        to:
          - cidr: 0.0.0.0/0

步骤三:应用并验证

  1. 应用策略。

    kubectl apply -f agent-basic-policy.yaml
  2. 查看策略状态。

    kubectl get trafficpolicy -n default

    预期输出:

    NAME                 PRIORITY   AGE
    agent-basic-policy   100        10s
  3. 验证网络连通性。

    # 进入 Pod
    kubectl exec -it agent-pod -n default -- /bin/bash
    
    # 安装网络工具
    apt-get update && apt-get install -y curl dnsutils
    
    # 测试公网访问(应成功)
    curl -I https://www.aliyun.com
    
    # 测试 DNS 解析(应成功)
    nslookup www.aliyun.com

仅允许Pod访问指定服务和域名

以下策略允许 Agent 访问 DNS 服务、指定域名和指定网段,同时禁止访问云产品元数据服务和其他所有地址。

请将 rds-xxx.aliyuncs.com 替换为实际的 RDS 实例域名。
apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: agent-egress-policy
  namespace: default
spec:
  priority: 100
  selector:
    matchLabels:
      app: agent

  egress:
    rules:
      # 禁止访问云产品元数据服务
      - action: deny
        to:
          - cidr: 100.100.100.200/32

      # 允许访问指定网段
      - action: allow
        to:
          - cidr: 100.96.0.0/10

      # 允许访问指定域名
      - action: allow
        to:
          - fqdn: rds-xxx.aliyuncs.com

      # 允许访问 DNS 服务
      - action: allow
        to:
          - service:
              namespace: kube-system
              name: kube-dns

      # 兜底规则:禁止访问其他所有地址
      - action: deny
        to:
          - cidr: 0.0.0.0/0

禁止Pod访问私有网络

在允许公网访问的同时,显式禁止访问私有网络网段。

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: agent-internet-only-policy
  namespace: default
spec:
  priority: 100
  selector:
    matchLabels:
      app: agent
      
  egress:
    rules:
      # 允许 DNS
      - action: allow
        to:
          - service:
              namespace: kube-system
              name: kube-dns
  
      # 禁止访问私有网络
      - action: deny
        to:
          - cidr: 10.0.0.0/8
      - action: deny
        to:
          - cidr: 172.16.0.0/12
      - action: deny
        to:
          - cidr: 192.168.0.0/16
  
      # 允许公网
      - action: allow
        to:
          - cidr: 0.0.0.0/0

仅允许指定 Service 访问Pod

以下策略限制 Agent 仅接受来自 Gateway 服务的访问请求。

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: agent-ingress-policy
  namespace: default
spec:
  priority: 100
  selector:
    matchLabels:
      app: agent

  ingress:
    rules:
      # 允许来自 Gateway 的访问
      - action: allow
        from:
          - service:
              name: sandbox-gateway
              namespace: sandbox-system

      # 兜底规则:禁止其他所有来源
      - action: deny
        from:
          - cidr: 0.0.0.0/0

全集群维度的访问控制

以下全局策略禁止特定网段访问集群内 Pod,同时允许其他所有流量。

apiVersion: network.alibabacloud.com/v1alpha1
kind: GlobalTrafficPolicy
metadata:
  name: global-security-baseline
spec:
  priority: 1000    # 低优先级,作为兜底策略
  selector: {}      # 作用于全集群 Pod

  ingress:
    rules:
      # 禁止 Sandbox 网段访问
      - action: deny
        from:
          - cidr: 10.8.0.0/16

      # 允许其他所有来源
      - action: allow
        from:
          - cidr: 0.0.0.0/0

  egress:
    rules:
      - action: allow
        to:
          - cidr: 0.0.0.0/0
GlobalTrafficPolicy 的 selector 设置为空 {},表示作用于全集群所有匹配的 Pod。

组合多级安全策略

多个 TrafficPolicy 可以组合使用,通过不同优先级实现分层控制。以下是推荐的优先级分层方案及配置示例。

优先级范围

用途

示例场景

1-49(高优先级)

基础设施服务

DNS、监控、日志收集

50-499(中优先级)

业务服务

数据库、缓存、消息队列

500-1000(低优先级)

兜底策略

全局安全基线、公网访问控制

基础设施服务(高优先级)

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: infra-policy
  namespace: default
spec:
  priority: 10
  selector:
    matchLabels:
      app: agent
  egress:
    rules:
      - action: allow
        to:
          - service:
              namespace: kube-system
              name: kube-dns
      - action: allow
        to:
          - service:
              namespace: monitoring
              name: prometheus

业务服务(中优先级)

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: business-policy
  namespace: default
spec:
  priority: 100
  selector:
    matchLabels:
      app: agent
  egress:
    rules:
      - action: allow
        to:
          - service:
              namespace: default
              name: redis
      - action: allow
        to:
          - service:
              namespace: default
              name: mysql

公网访问控制(低优先级)

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: internet-policy
  namespace: default
spec:
  priority: 500
  selector:
    matchLabels:
      app: agent
  egress:
    rules:
      - action: allow
        to:
          - cidr: 0.0.0.0/0

为OpenClaw配置完整网络策略

以下是 OpenClaw 应用的完整网络隔离策略,同时包含 Ingress 和 Egress 规则。

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: openclaw-policy
  namespace: default
spec:
  priority: 100
  selector:
    matchLabels:
      app: openclaw

  ingress:
    rules:
      # 允许来自 Gateway 和 Sandbox Manager 的访问
      - action: allow
        from:
          - service:
              name: sandbox-gateway
              namespace: sandbox-system
          - service:
              name: sandbox-manager
              namespace: sandbox-system
      # 禁止其他所有来源
      - action: deny
        from:
          - cidr: 0.0.0.0/0

  egress:
    rules:
      # 禁止访问云产品元数据服务
      - action: deny
        to:
          - cidr: 100.100.100.200/32

      # 允许 DNS 服务
      - action: allow
        to:
          - service:
              namespace: kube-system
              name: kube-dns

      # 允许访问 LLM 代理服务
      - action: allow
        to:
          - service:
              namespace: llm-proxy
              name: llm-proxy

      # 禁止访问私有网络
      - action: deny
        to:
          - cidr: 10.0.0.0/8
      - action: deny
        to:
          - cidr: 172.16.0.0/12
      - action: deny
        to:
          - cidr: 192.168.0.0/16

      # 允许访问公网
      - action: allow
        to:
          - cidr: 0.0.0.0/0

最佳实践

遵循最小权限原则

只授予 Pod 必要的网络访问权限。显式列出允许访问的服务和地址,默认拒绝其余流量。

egress:
  rules:
    # 明确允许的服务
    - action: allow
      to:
        - service:
            namespace: kube-system
            name: kube-dns
    - action: allow
      to:
        - fqdn: api.aliyun.com

    # 禁止私有网络
    - action: deny
      to:
        - cidr: 10.0.0.0/8

    # 按需允许公网
    - action: allow
      to:
        - cidr: 0.0.0.0/0

设计精确的标签选择器

使用多维度标签精确匹配目标 Pod,避免策略误伤。

# 推荐:多维度标签
selector:
  matchLabels:
    app: agent
    environment: production
    team: ai-platform

# 避免:过于宽泛的标签
selector:
  matchLabels:
    app: agent

标签设计建议

  • app:标识应用类型

  • environment:区分环境(production、staging、development)

  • team:标识所属团队

结合 GlobalTrafficPolicy 使用

将 GlobalTrafficPolicy 作为全集群安全基线,TrafficPolicy 实现应用级精细控制:

策略层

类型

优先级

职责

应用层

TrafficPolicy

50-200

特定应用的精细网络规则

全局层

GlobalTrafficPolicy

1000

集群安全基线(如禁止 Sandbox 网段)

定期审计策略

建立定期的策略审计机制:

  • 检查 TrafficPolicy 是否符合最新安全要求

  • 审查被拒绝的连接日志,发现潜在问题

  • 清理不再使用的策略

  • 根据业务变化调整策略

  • 验证优先级设置是否合理

审计脚本示例:

#!/bin/bash

echo "=== 所有 TrafficPolicy ==="
kubectl get trafficpolicy --all-namespaces -o wide

echo -e "\n=== 所有 GlobalTrafficPolicy ==="
kubectl get globaltrafficpolicy -o wide

echo -e "\n=== Agent Pod 列表 ==="
kubectl get pods -l app=agent --all-namespaces

使用版本控制管理策略

将 TrafficPolicy 配置纳入 Git 管理,按用途组织目录。

traffic-policies/
├── base/                          # 基础策略
│   ├── global-security-baseline.yaml
│   └── dns-access.yaml
├── applications/                  # 应用策略
│   ├── openclaw-policy.yaml
│   └── agent-policy.yaml
└── environments/                  # 环境差异
    ├── production/
    │   └── overrides.yaml
    └── staging/
        └── overrides.yaml

常见问题

策略不生效

现象:TrafficPolicy 已创建,但网络访问未被限制。

排查步骤

  1. 检查 Poseidon 组件状态:确认已安装、组件版本为v0.7.0或更高、且开启了 TrafficPolicy 功能。

  2. 检查 Pod Annotations:确认 Pod 已配置必需的 Annotations。

  3. 检查 Pod 标签:确认 Pod 标签与策略的 selector.matchLabels 完全匹配。

    kubectl get pod <pod-name> --show-labels
  4. 检查规则顺序:确认具体规则在前,兜底规则在后。

    kubectl get trafficpolicy <policy-name> -o yaml

策略冲突

现象:多个策略作用于同一 Pod,网络行为不符合预期。

排查步骤

  1. 列出所有策略及其优先级:

    kubectl get trafficpolicy,globaltrafficpolicy -A -o wide
  2. 检查是否有相同优先级的策略作用于同一 Pod。

  3. 调整优先级数值,确保高优先级策略使用更小的数值。

  4. 合并冲突的策略以避免重复定义。

网络连接超时

现象:Pod 无法访问预期的地址或服务。

排查步骤

  1. 确认是否有策略遗漏了必要的允许规则(如 DNS 服务)。

  2. 检查兜底规则是否过于严格,阻止了必要的网络访问。

  3. 在策略中添加必要的允许规则:

    egress:
      rules:
        - action: allow
          to:
            - service:
                namespace: <namespace>
                name: <service-name>
  4. 确保允许规则的优先级高于拒绝规则,或在同一策略中将允许规则放在拒绝规则之前。

Pod 无法被访问

现象:其他服务无法访问目标 Pod。

排查步骤

  1. 检查 Ingress 规则是否允许了必要的来源服务。

  2. 添加来源服务的允许规则:

    ingress:
      rules:
        - action: allow
          from:
            - service:
                name: <source-service>
                namespace: <source-namespace>

CRD 参考

TrafficPolicy 字段说明

apiVersion: network.alibabacloud.com/v1alpha1
kind: TrafficPolicy
metadata:
  name: <policy-name>        # 策略名称,同一命名空间内唯一
  namespace: <namespace>     # 策略所在命名空间
spec:
  priority: <1-1000>         # 优先级,数值越小优先级越高
  selector:                  # Pod 选择器
    matchLabels:
      <label-key>: <label-value>

  ingress:                   # 入方向规则(可选)
    rules:
      - action: allow|deny
        from:
          - cidr: <cidr>
          - service:
              name: <name>
              namespace: <namespace>

  egress:                    # 出方向规则(可选)
    rules:
      - action: allow|deny
        to:
          - cidr: <cidr>
          - service:
              name: <name>
              namespace: <namespace>
          - fqdn: <domain>

GlobalTrafficPolicy 字段说明

apiVersion: network.alibabacloud.com/v1alpha1
kind: GlobalTrafficPolicy
metadata:
  name: <policy-name>        # 策略名称,集群内唯一
spec:
  priority: <1-1000>         # 优先级,数值越小优先级越高
  selector:                  # Pod 选择器(空 {} 表示全集群)
    matchLabels: {}

  ingress:                   # 入方向规则(可选)
    rules:
      - action: allow|deny
        from:
          - cidr: <cidr>
          - service:
              name: <name>
              namespace: <namespace>

  egress:                    # 出方向规则(可选)
    rules:
      - action: allow|deny
        to:
          - cidr: <cidr>
          - service:
              name: <name>
              namespace: <namespace>
          - fqdn: <domain>

匹配条件参考

Ingress 规则

字段

类型

说明

示例

cidr

string

源 IP 网段

10.0.0.0/8

service

object

来源 Service(包含 namenamespace

{"name": "gateway", "namespace": "default"}

namespace

string

来源命名空间

kube-system

Egress 规则

字段

类型

说明

示例

cidr

string

目标 IP 网段

192.168.0.0/16

service

object

目标 Service(包含 namenamespace

{"name": "redis", "namespace": "default"}

fqdn

string

目标域名

api.aliyun.com