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. 将盒子连接到网络。

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

在以下情况下,您必须初始化分布式云区域的网络配置:

  • 在您的本地环境中安装 Distributed Cloud 硬件后立即开始。
  • 您在现有 Distributed Cloud 部署中升级到了 Distributed Cloud 版本 1.3.0 或更高版本,但未参与 Distributed Cloud Edge Network API 的非公开预览版计划。

初始化区域的网络配置会创建名为 default 的默认路由器和名为 default 的默认网络。它还会通过创建相应的互连连接,将 default 路由器配置为与您在订购分布式云硬件时请求的所有互连建立对等关系。此配置可为您的分布式云部署提供与本地网络的基本上行链路连接。

初始化可用区的网络配置是一次性操作。如需查看完整说明,请参阅初始化可用区的网络配置

创建网络

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

创建一个或多个子网

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

建立北向 BGP 对等互连会话

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

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

  1. 列出您所在可用区中的互连,然后选择相应对等互联会话的目标互连。

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

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

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

  5. 为上一步中在路由器上创建的每个接口添加对等方

建立南向 BGP 对等互连会话

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

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

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

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

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

为了在工作负载和本地网络之间实现高可用性连接,您可以在目标 Pod 和分布式云机架中的两个 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 集群之间共享。
    • 通过分布式云区域与本地网络之间的 BGP 会话通告所请求 VIP 子网的路由。
    • 子网中的第一个(网络 ID)、第二个(默认网关)和最后一个(广播地址)地址是为核心系统功能预留的。请勿将这些地址分配给 MetalLB 配置的地址池。
    • 每个集群都必须使用配置的 VIP 子网内的单独 VIP 范围。
  2. 在 Distributed Cloud 区域中创建集群时,集群管理员会使用 CIDR 表示法指定 Pod 和 ClusterIP 服务地址池。您的网络管理员会向集群管理员提供相应的 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 控制平面节点不充当负载均衡器节点。

分布式云入站流量

除了负载均衡之外,分布式云还支持 Kubernetes Ingress 资源。Kubernetes Ingress 资源可控制 HTTP(S) 流量流向在分布式云集群上运行的 Kubernetes 服务。以下示例展示了一个典型的 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 服务的分布式云集群。为此,请完成以下步骤:

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 支持

分布式云支持在主网络接口上使用流控制传输协议 (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 操作系统内核模块配置为可加载。这样一来,您就可以在内核用户空间中加载自己的 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 支持使用 spec.domains 部分配置特定网域的上游域名服务器的 Google Distributed Cloud ClusterDNS 资源。如需详细了解如何配置此资源,请参阅 spec.domains

后续步骤