创建项目内网络政策

本页面介绍了如何在 Google Distributed Cloud (GDC) 网闸隔离配置中配置项目内流量网络政策。

项目网络政策定义了入站流量规则或出站流量规则。您可以定义允许在项目内、项目之间以及与外部 IP 地址进行通信的政策。

默认情况下,这些政策会全局应用于所有可用区。如需详细了解 GDC 领域中的全球资源,请参阅多可用区概览。

如果需要在单个可用区内强制执行项目内流量,请参阅创建单可用区工作负载级项目内政策。

准备工作

如需配置项目内流量网络政策,您必须具备以下条件:

  • 必要的身份和访问角色。如需管理项目网络政策,您需要拥有 Project Network Policy Admin (global-project-networkpolicy-admin) 角色。如需了解详情,请参阅准备预定义角色和访问权限。
  • 现有项目。如需了解详情,请参阅创建项目。
  • 对于出站流量网络政策,您还必须为项目停用数据渗漏防护。

创建项目内政策

对于项目内的流量,GDC 会向每个项目应用预定义的项目网络政策,即默认的项目内政策。默认情况下,项目命名空间中的工作负载能够相互通信,而不会向外部资源公开任何内容。

默认情况下,系统不配置出站流量政策,因此允许所有项目内流量的出站流量。不过,在您应用出站流量政策后,该政策选择的工作负载只能发送出站流量政策允许的流量。如需保持与同一项目中其他工作负载和服务的连接,请在应用出站流量政策之前创建出站流量项目内政策。如果数据渗漏防护功能仍处于启用状态,请在停用数据渗漏防护功能之前创建出站流量项目内政策,因为现有出站流量政策会在此时生效。如需了解详情,请参阅默认项目内政策。

创建入站项目内政策

创建项目时,GDC 会自动在项目命名空间中创建一个名为 base-policy-allow-intra-project-traffic 的默认 ProjectNetworkPolicy 资源。此 Ingress 政策会选择项目中的所有用户工作负载,并允许来自同一项目中其他工作负载的入站流量。GDC 只会创建此政策一次,如果您更改或删除此政策,GDC 不会恢复此政策。

如需移除默认政策,请使用 kubectl delete 命令:

kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT

您可以通过应用以下清单来重新添加默认政策:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: base-policy-allow-intra-project-traffic
spec:
  policyType: Ingress
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

清单省略了 spec.subject,因此该政策适用于项目中的所有用户工作负载,就像原始默认政策一样。

替换以下内容:

  • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
  • PROJECT:您的项目的名称。

如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

创建出站流量项目内政策

停用数据渗漏防护功能并对项目应用 ProjectNetworkPolicy 出站流量政策(例如阻止访问外部资源)时,请使用以下必需政策来允许项目内出站流量:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-intra-project-outbound-traffic
spec:
  policyType: Egress
  egress:
  - to:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

替换以下内容:

  • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
  • PROJECT:您的项目的名称。

如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

创建工作负载级项目内政策

工作负载级网络政策可精细控制项目内各个工作负载之间的通信。这种精细度可让您更严格地控制网络访问,从而提高安全性和资源利用率。

创建入站工作负载级项目内政策

创建项目时,GDC 会自动创建一个名为 base-policy-allow-intra-project-traffic 的默认 ProjectNetworkPolicy 资源,该资源允许项目中所有工作负载之间的入站流量。

只有在您删除默认基本政策后,工作负载级项目内政策才会限制流量。为避免中断,请创建政策并验证其是否已准备就绪,然后删除默认基本政策:

  1. 如需创建入站流量工作负载级项目内政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-workload-level-intra-project-inbound-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • PROJECT:您的项目的名称。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签键。例如 app、tier 或 role。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 backend,则带有标签 app: backend 的工作负载正在接收流量。
    • PEER_LABEL_KEY:用于选择对等工作负载的标签的键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • PEER_LABEL_VALUE:与 PEER_LABEL_KEY 关联的值。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

  2. 政策准备就绪后,删除默认基本政策,以便政策生效:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    

创建出站流量工作负载级项目内政策

  • 如需创建出站流量工作负载级项目内政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-workload-level-intra-project-outbound-traffic
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • PROJECT:您的项目的名称。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签键。例如 app、tier 或 role。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 backend,则带有标签 app: backend 的工作负载正在发送流量。
    • PEER_LABEL_KEY:用于选择对等工作负载的标签的键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • PEER_LABEL_VALUE:与 PEER_LABEL_KEY 关联的值。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

创建单可用区工作负载级项目内政策

工作负载级网络政策可以沿单个可用区强制执行 PNP。您可以向单个可用区中的工作负载添加特定标签,从而控制该可用区中单个项目内或不同项目中的工作负载之间的通信。

创建单可用区入站流量工作负载级项目内政策

创建项目时,GDC 会自动创建一个名为 base-policy-allow-intra-project-traffic 的默认 ProjectNetworkPolicy 资源,该资源允许项目中所有工作负载之间的入站流量。

只有在您删除默认基本政策后,单可用区工作负载级项目内政策才会限制流量。为避免中断,请创建政策并验证其是否已准备就绪,然后删除默认基本政策:

  1. 如需创建单可用区入站工作负载级项目内流量网络政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-single-zone-intra-project-inbound-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
                ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
                    ZONE_PEER_LABEL_KEY: ZONE_PEER_LABEL_VALUE
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • PROJECT:您的项目的名称。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签键。例如 app、tier 或 role。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 backend,则带有标签 app: backend 的工作负载正在接收流量。
    • PEER_LABEL_KEY:用于选择对等工作负载的标签的键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • PEER_LABEL_VALUE:与 PEER_LABEL_KEY 关联的值。
    • ZONE_SUBJECT_LABEL_KEY:用于选择主题可用区的标签键。例如 zone 或 region。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • ZONE_SUBJECT_LABEL_VALUE:与 ZONE_SUBJECT_LABEL_KEY 关联的值。例如,如果 ZONE_SUBJECT_LABEL_KEY 为 zone,ZONE_SUBJECT_LABEL_VALUE 为 us-central1-a,则带有标签 zone: us-central1-a 的工作负载正在接收流量。
    • ZONE_PEER_LABEL_KEY:用于选择与对等方关联的可用区的标签键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • ZONE_PEER_LABEL_VALUE:与 ZONE_PEER_LABEL_KEY 关联的值。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

  2. 政策准备就绪后,删除默认基本政策,以便政策生效:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    

创建单可用区出站流量工作负载级项目内政策

  • 如需创建单可用区出站流量工作负载级项目内政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-single-zone-intra-project-outbound-traffic
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
                ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
                    ZONE_PEER_LABEL_KEY: ZONE_PEER_LABEL_VALUE
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • PROJECT:您的项目的名称。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签键。例如 app、tier 或 role。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 backend,则带有标签 app: backend 的工作负载正在接收流量。
    • PEER_LABEL_KEY:用于选择对等工作负载的标签的键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • PEER_LABEL_VALUE:与 PEER_LABEL_KEY 关联的值。
    • ZONE_SUBJECT_LABEL_KEY:用于选择主题可用区的标签键。例如 zone 或 region。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • ZONE_SUBJECT_LABEL_VALUE:与 ZONE_SUBJECT_LABEL_KEY 关联的值。例如,如果 ZONE_SUBJECT_LABEL_KEY 为 zone,ZONE_SUBJECT_LABEL_VALUE 为 us-central1-a,则带有标签 zone: us-central1-a 的工作负载正在接收流量。
    • ZONE_PEER_LABEL_KEY:用于选择与对等方关联的可用区的标签键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • ZONE_PEER_LABEL_VALUE:与 ZONE_PEER_LABEL_KEY 关联的值。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

为标准集群创建项目内政策

标准集群是项目级 Kubernetes 集群,可提供更强的控制力、更高的灵活性和集群管理员权限。创建项目内政策后,标准集群会默认继承该政策。此政策允许位于同一项目中的标准集群内的所有通信。

为标准集群创建入站项目内政策

创建项目时,GDC 会自动创建一个名为 base-policy-allow-intra-project-traffic 的默认 ProjectNetworkPolicy 资源,该资源允许项目中的所有工作负载之间进行入站流量通信,包括项目中标准集群内所有工作负载之间的集群内通信。

只有在您删除默认基本政策后,Standard 集群的入站流量项目内政策才会限制流量。为避免中断,请按照以下步骤创建政策并验证其是否已准备就绪,然后删除默认基本政策:

  1. 如需在标准集群中创建入站集群内 Pod 到 Pod 政策,请创建并应用以下自定义资源

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-ingress-from-intra-cluster-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - STANDARD_CLUSTER_PROJECT
            workloadSelector:
              labelSelector:
                clusters:
                  matchLabels:
                    kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
                namespaces:
                  matchLabels:
                    kubernetes.io/metadata.name: PEER_NAMESPACE
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • STANDARD_CLUSTER_PROJECT:标准集群项目的名称。
    • STANDARD_CLUSTER_NAME:标准集群的名称。
    • SUBJECT_NAMESPACE:标准集群中的主体命名空间。
    • PEER_NAMESPACE:标准集群中的对等命名空间。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签键。例如 app、tier 或 role。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 backend,则带有标签 app: backend 的工作负载正在接收流量。
    • PEER_LABEL_KEY:用于选择对等工作负载的标签的键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • PEER_LABEL_VALUE:与 PEER_LABEL_KEY 关联的值。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

  2. 使用 ipBlocks 字段控制 Pod 与特定集群节点之间的流量是一项预览版功能。如需了解详情和规模注意事项,请参阅使用 IP 地址块定位集群节点。如需在标准集群中创建入站集群内节点到 Pod 政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-ingress-from-node-to-pod-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - ipBlocks:
          - cidr: NODE_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • STANDARD_CLUSTER_PROJECT:标准集群项目的名称。
    • STANDARD_CLUSTER_NAME:标准集群的名称。
    • SUBJECT_NAMESPACE:标准集群中的主体命名空间。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签的键。例如 app、tier 或 role。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 webhook,则带有标签 app: webhook 的工作负载会接收流量。
    • NODE_IP:允许流量通过的来源集群节点的 IP 地址(采用 /32 表示法)或 CIDR 范围。
    • PORT:允许流量的主体工作负载上的端口(例如 8443 或 443)。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

  3. 政策准备就绪后,请删除默认基本政策,以便这些政策生效:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    

恢复默认政策

如果新政策导致服务出现问题,您可以在调查和制定解决方案时恢复默认政策。如需恢复默认政策,请应用以下清单:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: base-policy-allow-intra-project-traffic
spec:
  policyType: Ingress
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

替换以下内容:

  • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
  • PROJECT:您的项目的名称。

如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

为标准集群创建出站流量项目内政策

  1. 如需在标准集群中创建出站集群内 Pod 到 Pod 政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-egress-to-intra-cluster-traffic
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - STANDARD_CLUSTER_PROJECT
            workloadSelector:
              labelSelector:
                clusters:
                  matchLabels:
                    kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
                namespaces:
                  matchLabels:
                    kubernetes.io/metadata.name: PEER_NAMESPACE
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • STANDARD_CLUSTER_PROJECT:标准集群项目的名称。
    • STANDARD_CLUSTER_NAME:标准集群的名称。
    • SUBJECT_NAMESPACE:标准集群中的主体命名空间。
    • PEER_NAMESPACE:标准集群中的对等命名空间。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签键。例如 app、tier 或 role。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 backend,则带有标签 app: backend 的工作负载正在发送流量。
    • PEER_LABEL_KEY:用于选择对等工作负载的标签的键。如果您引用的是虚拟机标签,则必须为此键添加前缀;请参阅此列表后面的警告。
    • PEER_LABEL_VALUE:与 PEER_LABEL_KEY 关联的值。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

  2. 使用 ipBlocks 字段控制 Pod 与特定集群节点之间的流量是一项预览版功能。如需了解详情和规模注意事项,请参阅使用 IP 地址块定位集群节点。如需在标准集群中创建出站流量集群内 Pod 到节点政策,请创建并应用以下自定义资源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-egress-from-pod-to-node-traffic
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - ipBlocks:
          - cidr: NODE_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER:全局 API 服务器的 kubeconfig 路径。如需了解详情,请参阅全球和可用区级 API 服务器。 如果您尚未为 API 服务器生成 kubeconfig 文件,请参阅登录了解详情。
    • STANDARD_CLUSTER_PROJECT:标准集群项目的名称。
    • STANDARD_CLUSTER_NAME:标准集群的名称。
    • SUBJECT_NAMESPACE:标准集群中的主体命名空间。
    • SUBJECT_LABEL_KEY:用于选择主题工作负载的标签的键。例如 app、tier 或 role。
    • SUBJECT_LABEL_VALUE:与 SUBJECT_LABEL_KEY 关联的值。例如,如果 SUBJECT_LABEL_KEY 为 app,SUBJECT_LABEL_VALUE 为 controller,则具有标签 app: controller 的工作负载会发送流量。
    • NODE_IP:允许流量的目标集群节点的 IP 地址(采用 /32 表示法)或 CIDR 范围。
    • PORT:目标节点上允许流量进入的端口(例如 6444 或 443)。

    如需验证政策是否已准备就绪,请参阅验证政策是否已准备就绪。

验证政策就绪情况

如需验证项目网络政策是否已准备就绪,请运行以下命令:

kubectl --kubeconfig GLOBAL_API_SERVER get pnp POLICY_NAME -n PROJECT -oyaml

将 POLICY_NAME 替换为要验证的政策的名称,并将 PROJECT 替换为创建该政策的项目名称。

在输出的 Ready 条件中查找 status: "True":

...
status:
  ...
  conditions:
  - lastTransitionTime: "2026-03-24T10:55:25Z"
    message: ProjectNetworkPolicy propagated to remote clusters
    observedGeneration: 1
    reason: Propagated
    status: "True"
    type: Ready
...