设置多网络网络政策


本页面介绍如何通过配置专门适用于指定 Pod 网络的多网络政策,在 Pod 级别控制 Pod 和 Service 之间的流量。

作为集群管理员,您可以配置多网络网络政策,使用防火墙规则在 Pod 级别控制 Pod 和 Service 之间的流量。您可以增强集群中的网络安全性和流量控制。

如需了解多网络网络政策的工作原理,请参阅网络政策如何与 Pod 网络配合使用

要求

如需使用多网络网络政策,请考虑以下要求:

  • Google Cloud CLI 459 版及更高版本。
  • 您必须有一个运行以下版本的 GKE 集群:
    • 1.28.5-gke.1293000 或更高版本
    • 1.29.0-gke.1484000 或更高版本
  • 您的集群必须使用 GKE Dataplane V2

限制

不支持 FQDN 网络政策和 CiliumClusterWide 网络政策:如果您在连接到多个网络的 Pod 上使用 FQDN 网络政策和 CiliumClusterWide 网络政策,则该政策会影响所有 Pod 的连接,而不仅仅是应用了这些政策的 Pod 连接。

价格

只有启用了 GKE Enterprise 的项目中的集群支持以下 Network Function Optimizer (NFO) 功能:

如需了解启用 Google Kubernetes Engine (GKE) Enterprise 版本的相关费用,请参阅 GKE Enterprise 价格

配置多网络网络政策

如需使用多网络网络政策,请执行以下操作:

  1. 创建启用了多网络的 GKE 的集群。
  2. 创建节点池Pod 网络
  3. 引用 Pod 网络
  4. 创建网络政策,以实施引用工作负载所使用的同一 Pod 网络的网络政策。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

创建网络政策

  1. 如需创建在与工作负载相同的 Pod 网络上强制执行规则的网络政策,请在网络政策定义中引用特定的 Pod 网络。

  2. 如需定义选定的入站流量规则并根据标签或其他选择器定位 Pod,请创建标准网络政策。

    将以下示例清单保存为 sample-ingress-network-policy1.yaml

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: sample-network-policy
      namespace: default
      annotations:
        networking.gke.io/network: blue-pod-network  # GKE-specific annotation for network selection
    spec:
      podSelector:
        matchLabels:
          app: test-app-2  # Selects pods with the label "app: test-app-2"
      policyTypes:
      - Ingress  # Specifies the policy applies only to incoming traffic
      ingress:
      - from:  # Allow incoming traffic only from...
        - podSelector:
            matchLabels:
              app: test-app-1  # ...pods with the label "app: test-app-1"
    
  3. 应用 sample-ingress-network-policy1.yaml 清单:

    kubectl apply -f sample-ingress-network-policy1.yaml
    
  4. 如需定义选定的出站流量规则并根据标签或其他选择器定位 Pod,请创建标准网络政策。

    将以下示例清单保存为 sample-egress-network-policy2.yaml

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: sample-network-policy-2
      namespace: default
      annotations:
        networking.gke.io/network: blue-pod-network  # GKE-specific annotation (optional)
    spec:
      podSelector:
        matchLabels:
          app: test-app-2
      policyTypes:
        - Egress  # Only applies to outgoing traffic
      egress:
        - to:
            - podSelector:
                matchLabels:
                  app: test-app-3
    
  5. 应用 sample-egress-network-policy2.yaml 清单:

    kubectl apply -f sample-egress-network-policy2.yaml
    

排查多网络网络政策问题

如果您遇到网络政策问题,无论它们是否应用于特定的 Pod 网络,都可以通过运行以下命令来诊断和排查问题:

  1. kubectl get networkpolicy:列出所有网络政策对象及其相关信息。
  2. iptables-save:检索并列出特定节点的所有 IP 地址表链。您必须以 root 身份在该节点上运行此命令。
  3. cilium bpf policy get <endpoint-id>:从每个端点的政策映射中检索并列出允许的 IP 地址。
  4. cilium policy selectors:输出身份以及已选择这些身份的关联政策。
  5. cilium identity list:显示从身份到 IP 地址的映射。

后续步骤