使用 Dataplane V2

本页面介绍适用于 Google Kubernetes Engine (GKE) 的 Dataplane V2。

关于 Dataplane V2

Dataplane V2 基于 eBPF,并允许 Linux 节点灵活且高效地处理内核中的网络数据包。Dataplane V2 包括内置网络政策强制执行和网络政策日志记录功能,没有任何第三方插件。

如需使用网络政策日志记录功能,您必须在 GKE 集群上启用 Dataplane V2。如需查看相关说明,请参阅使用 Dataplane V2 创建集群部分。

限制

  • Dataplane V2 只能在新集群中启用。现有集群无法升级为使用 Dataplane V2。
  • Windows 节点不支持 Dataplane V2。

测试版的局限性

  • 虽然 Dataplane V2 目前处于 Beta 版阶段,但不保证向后兼容性。当新版本的 Dataplane V2 可用时,您可能必须使用 Dataplane V2 重新创建集群。
  • 目前已知某些 Kubernetes 和 GKE 功能在 Beta 版中无法使用:
    • 设置了 ExternalTrafficPolicy:local 且由使用 hostNetwork:true 运行的 Pod 支持的 Kubernetes 服务无法接收集群外部客户端的流量。
    • FromCIDR 与选择某些(不是所有)节点 IP 地址的 CIDR 范围搭配使用的 Kubernetes 网络政策不起作用。
    • 不支持包括 NodeLocal DNSCache 在内的某些功能。
  • Google Cloud Console 中没有 Dataplane V2 界面。

使用 Dataplane V2 创建 GKE 集群

您可以在使用 GKE 1.17.9 及更高版本创建新集群时启用 Dataplane V2。

gcloud

如需使用 Dataplane V2 创建新集群,请使用以下命令:

gcloud beta container clusters create cluster-name \
    --enable-dataplane-v2 \
    --enable-ip-alias \
    --cluster-version version \
    --release-channel channel-name \
    {--region region-name | --zone zone-name}

替换以下内容:

  • cluster-name:新集群的名称。
  • version:您的集群版本,必须为 GKE 1.17.9 或更高版本。
  • channel-name:包含 GKE 1.17.9 或更高版本的发布渠道
  • region-namezone-name:集群的位置。这些参数是互斥的。如需了解详情,请参阅集群类型

API

如需使用 Dataplane V2 创建新集群,请在集群 create 请求中指定 networkConfig 对象的 datapathProvider 字段

以下 JSON 代码段显示了启用 Dataplane V2 所需的配置:

"cluster":{
  "initialClusterVersion":"version",
  "ipAllocationPolicy":{
     "useIpAliases":true
  },
  "networkConfig":{
     "datapathProvider":"ADVANCED_DATAPATH"
  },
  "releaseChannel":{
     "channel":"channel-name"
  }
}

替换以下内容:

  • version:您的集群版本,必须为 GKE 1.17.9 或更高版本。
  • channel-name:包含 GKE 1.17.9 或更高版本的发布渠道

问题排查

  1. 检查系统 Pod 的状态:

    kubectl -n kube-system get pods
    

    如果 Dataplane V2 正在运行,您将会看到具有前缀 anetd- 的 Pod 正在以 HEALTHY 状态运行。anetd 是 Dataplane V2 的网络控制器。

  2. 如果问题在于服务或网络政策强制执行方式,请检查 anetd Pod 日志:

    kubectl -n kube-system describe pod anetd-pod
    kubectl -n kube-system logs anetd-pod
    

    anetd-pod 替换为之前确定的 anetd Pod 的名称。

  3. 如果 Pod 创建失败,请检查 kubelet 日志以获取相关线索:

    gcloud compute ssh node -- sudo journalctl -u kubelet
    

    node 替换为虚拟机实例的名称。

后续步骤