Distributed Cloud 网络功能

本页面介绍了 Google Distributed Cloud 的网络功能,包括子网、BGP 对等互连会话和负载均衡。

启用 Distributed Cloud Edge Network API

如需配置 Distributed Cloud 网络,您必须先启用 Distributed Cloud Edge Network API。为此,请完成本部分中的步骤。

控制台

  1. 在 Google Cloud 控制台中,前往 Distributed Cloud Edge Network API 页面。

    启用 API

  2. 点击启用

gcloud

使用以下命令:

gcloud services enable edgenetwork.googleapis.com

配置 Distributed Cloud 网络

本部分介绍了如何配置 Distributed Cloud 网络组件。

Distributed Cloud 的典型网络配置包含以下步骤:

  1. 可选:根据需要初始化目标区域的网络配置。

  2. 创建网络。

  3. 在网络中创建一个或多个子网。

  4. 使用相应的互连连接与 PE 路由器建立北向 BGP 对等互连会话。

  5. 使用相应的子网与运行工作负载的 Pod 建立南向 BGP 对等互连会话。

  6. 可选:建立环回 BGP 对等互连会话以实现高可用性。

  7. 测试配置。

  8. 将 Pod 连接到网络。

可选:初始化 Distributed Cloud 区域的网络配置

在以下情况下,您必须初始化 Distributed Cloud 区域的网络配置:

  • 在您的本地环境中安装 Distributed Cloud 硬件后立即执行此操作。
  • 您已在现有 Distributed Cloud 部署中升级到 Distributed Cloud 1.3.0 版或更高版本,但未参与 Distributed Cloud Edge Network API 的专用预览版。

初始化区域的网络配置会创建一个名为 default 的默认路由器和一个名为 default 的默认网络。它还会将 default 路由器配置为与您在订购 Distributed Cloud 硬件时请求的所有互连建立对等互连,方法是创建相应的互连连接。此配置为您的 Distributed Cloud 部署提供与本地网络的基本上行链路连接。

初始化区域的网络配置是一次性过程。如需获取 完整说明,请参阅 初始化区域的网络配置

创建网络

如需创建新网络,请按照 创建网络中的说明操作。 您还必须在网络中创建至少一个子网,以允许 Distributed Cloud 节点连接到网络。

创建一个或多个子网

如需创建子网,请按照 创建子网中的说明操作。 您必须在网络中创建至少一个子网,以允许节点访问网络。您创建的每个子网对应的 VLAN 会自动提供给区域中的所有节点。

建立北向 BGP 对等互连会话

创建网络及其对应的子网时,它们是 Distributed Cloud 区域的本地网络。如需启用出站连接,您必须在网络与对等边缘路由器之间建立至少一个北向 BGP 对等互连会话。

如需建立北向 BGP 对等互连会话,请执行以下操作:

  1. 列出区域中可用的互连 然后为此对等互连会话选择目标互连。

  2. 在所选互连上 创建一个或多个互连连接。互连连接会将您在下一步中创建的路由器与所选互连相关联。

  3. 创建路由器。此路由器使用您在上一步中创建的互连连接在互连与网络之间路由流量。

  4. 为此过程前面创建的每个互连连接向路由器添加一个接口。对于每个接口,请使用 Distributed Cloud 机架中相应架顶 (ToR) 交换机的 IP 地址。如需了解相关说明,请参阅 建立北向对等互连会话

  5. 您在上一步中在路由器上创建的 每个接口添加对等互连。

建立南向 BGP 对等互连会话

如需启用从本地网络到工作负载的入站连接,您必须在对等边缘路由器与 Pod 所属的子网之间建立一个或多个南向 BGP 对等互连会话。每个子网的网关 IP 地址是 Distributed Cloud 机架中相应 ToR 交换机的 IP 地址。

如需建立南向 BGP 对等互连会话,请执行以下操作:

  1. 为您要预配入站连接的每个子网向目标网络中的路由器添加一个接口。如需了解相关说明,请参阅 建立南向对等互连会话

  2. 为在上一步中在路由器上创建的每个接口添加对等互连。

可选:建立环回 BGP 对等互连会话

如需在工作负载与本地网络之间启用高可用性连接,您可以在目标 Pod 与 Distributed Cloud 机架中的两个 ToR 交换机之间建立环回 BGP 对等互连会话。环回对等互连会话会为 Pod 建立两个独立的对等互连会话,每个会话都与一个 ToR 交换机建立。

如需建立环回 BGP 对等互连会话,请执行以下操作:

  1. 向目标网络中的路由器添加环回接口。如需了解相关说明,请参阅 建立环回对等互连会话

  2. 添加对等互连为 环回接口。

测试配置

如需测试您创建的网络组件的配置,请执行以下操作:

  1. 检查网络的运行状态

  2. 检查每个子网的预配状态

  3. 检查互连的运行状态

  4. 检查互连连接的运行状态

  5. 检查路由器的运行状态

将 Pod 连接到网络

如需将 Pod 连接到网络并配置高级网络功能, 请按照 网络功能运算符中的说明操作。

负载均衡

Distributed Cloud 附带基于 MetalLB 的捆绑式网络负载 均衡解决方案,该解决方案在第 2 层模式下运行。 您可以使用此解决方案通过虚拟 IP 地址 (VIP) 将在 Distributed Cloud 区域中运行的服务公开给外部世界,如下所示:

  1. 您的网络管理员在订购 Distributed Cloud 时规划网络拓扑并指定所需的虚拟 IPv4 地址子网。Google 会在交付前相应地配置 Distributed Cloud 硬件。 请注意以下事项:
    • 此 VIP 子网在 Distributed Cloud 区域中运行的所有 Kubernetes 集群之间共享。
    • 系统会通过 Distributed Cloud 区域与本地网络之间的 BGP 会话通告所请求的 VIP 子网的路由。
    • 子网中的第一个(网络 ID)、第二个(默认网关)和最后一个(广播地址)地址是为核心系统功能预留的。请勿将这些地址分配给 MetalLB 配置的地址池。
    • 每个集群都必须使用单独的 VIP 范围,该范围属于已配置的 VIP 子网。
  2. 在 Distributed Cloud 区域中创建集群时,集群管理员会使用 CIDR 表示法指定 Pod 和 ClusterIP Service 地址池。您的网络管理员会向集群管理员提供相应的 LoadBalancer VIP 子网。
  3. 创建集群后,集群管理员会配置相应的 VIP 池。对于远程控制平面集群,您必须使用 kubectl editkubectl replace 命令修改 metallb-system 命名空间中的 metallb-config ConfigMap。请勿使用 kubectl apply 命令,因为如果您这样做,Distributed Cloud 会覆盖您的更改。

    以下示例说明了此类配置:

    # metallb-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      namespace: metallb-system
      name: metallb-config
    data:
      config: |
        address-pools:
        - name: default
          protocol: layer2
          addresses:
          - 192.168.1.2-192.168.1.254
    

    对于本地控制平面集群,您必须在创建集群时使用 --external-lb-ipv4-address-pools 标志指定 VIP 池。如需了解详情,请参阅 生存能力模式

  4. 集群管理员会创建相应的 Kubernetes LoadBalancer 服务

单个节点池中的 Distributed Cloud 节点共享一个通用第 2 层网域,因此也是 MetalLB 负载均衡器节点。 在 Google Cloud 上运行的 Distributed Cloud 控制平面节点不充当负载均衡器节点。

Distributed Cloud Ingress

除了负载均衡之外,Distributed Cloud 还支持 Kubernetes Ingress 资源。Kubernetes Ingress 资源控制流向在 Distributed Cloud 集群上运行的 Kubernetes 服务的 HTTP(S) 流量。以下示例说明了典型的 Ingress 资源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: my-service
            port:
              number: 80
        path: /foo
        pathType: Prefix

配置后,网络流量会流经 istio-ingress 服务,该服务默认分配有 MetalLB 配置中指定的 VIP 池中的随机 IP 地址。您可以使用 istio-ingress 服务定义中的 loadBalancerIP 字段从 MetalLB 配置中选择特定 IP 地址或虚拟 IP 地址。例如:

apiVersion: v1
kind: Service
metadata:
  labels:
    istio: ingress-gke-system
    release: istio
  name: istio-ingress
  namespace: gke-system
spec:
  loadBalancerIP: <targetLoadBalancerIPaddress>

停用默认 Distributed Cloud Ingress 资源

默认情况下,当您创建 Distributed Cloud 集群时,Distributed Cloud 会自动为集群配置 istio-ingress 服务。您可以选择创建不含 istio-ingress 服务的 Distributed Cloud 集群。为此,请完成以下步骤:

gcloud

  1. 创建一个名为 SystemsAddonConfig.yaml 的 YAML 配置文件,其中包含以下内容:

    systemAddonsConfig:
     ingress:
       disabled: true
    
  2. 在集群创建命令中使用 --system-addons-config 标志传递 SystemsAddonConfig.yaml 文件。您必须使用 gcloud alpha 版本才能使用此功能。例如:

    gcloud alpha edge-cloud container clusters create MyGDCECluster1 --location us-west1 \
        --system-addons-config=SystemsAddonConfig.yaml
    

    如需详细了解如何创建 Distributed Cloud 集群,请参阅 创建集群

API

  1. 将以下 JSON 内容添加到集群创建请求中的 JSON 载荷:

    "systemAddonConfig" {
       "ingress" {
               "disabled": true
       }
    }
    
  2. 按照 创建集群中的说明提交集群创建请求。

SCTP 支持

Distributed Cloud 在主网络接口上支持流控制传输协议 (SCTP),以用于内部和外部网络。SCTP 支持包括 NodePortLoadBalancerClusterIP 服务类型。Pod 可以使用 SCTP 与其他 Pod 和外部资源进行通信。以下示例说明了如何使用 SCTP 将 IPERF 配置为 ClusterIP 服务:

apiVersion: v1
kind: Pod
metadata:
  name: iperf3-sctp-server-client
  labels:
    app.kubernetes.io/name: iperf3-sctp-server-client
spec:
  containers:
  - name: iperf3-sctp-server
    args: ['-s', '-p 31390']
    ports:
      - containerPort: 31390
        protocol: SCTP
        name: server-sctp
  - name: iperf3-sctp-client
    ...

---

apiVersion: v1
kind: Service
metadata:
  name: iperf3-sctp-svc
spec:
  selector:
    app.kubernetes.io/name: iperf3-sctp-server-client
  ports:
    - port: 31390
      protocol: SCTP
      targetPort: server-sctp

SCTP 内核模块

从 1.5.0 版开始,Distributed Cloud 将 sctp Edge OS 内核模块配置为可加载。这样,您就可以在内核用户空间中加载自己的 SCTP 协议栈。

此外,Distributed Cloud 默认会将以下模块加载到内核中:

模块名称 配置名称
fou CONFIG_NET_FOU
nf_conntrack_proto_gre CONFIG_NF_CT_PROTO_GRE
nf_conntrack_proto_sctp CONFIG_NF_CT_PROTO_SCTP
inotify CONFIG_INOTIFY_USER
xt_redirect CONFIG_NETFILTER_XT_TARGET_REDIRECT
xt_u32 CONFIG_NETFILTER_XT_MATCH_U32
xt_multiport CONFIG_NETFILTER_XT_MATCH_MULTIPORT
xt_statistic CONFIG_NETFILTER_XT_MATCH_STATISTIC
xt_owner CONFIG_NETFILTER_XT_MATCH_OWNER
xt_conntrack CONFIG_NETFILTER_XT_MATCH_CONNTRACK
xt_mark CONFIG_NETFILTER_XT_MARK
ip6table_mangle CONFIG_IP6_NF_MANGLE
ip6_tables CONFIG_IP6_NF_IPTABLES
ip6table_filter CONFIG_IP6_NF_FILTER
ip6t_reject CONFIG_IP6_NF_TARGET_REJECT
iptable_mangle CONFIG_IP_NF_MANGLE
ip_tables CONFIG_IP_NF_IPTABLES
iptable_filter CONFIG_IP_NF_FILTER

ClusterDNS 资源

Distributed Cloud 支持 Google Distributed Cloud ClusterDNS 资源,用于使用 spec.domains 部分为特定网域配置上游域名服务器。如需详细了解如何配置此 资源,请参阅 spec.domains

后续步骤