Distributed Cloud connected 的网络功能

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

本页面上的过程仅适用于 Distributed Cloud Connected 机架,负载均衡除外,负载均衡适用于 Distributed Cloud Connected 机架和 Distributed Cloud Connected 服务器。

IPv4/IPv6 双栈网络

借助 Distributed Cloud Connected,您可以创建使用 IPv4/IPv6 双栈网络的集群。如需利用此功能,您必须订购启用了双栈 IPv4/IPv6 网络的 Distributed Cloud Connected。您无法将 Distributed Cloud Connected 的现有仅 IPv4 部署重新配置为 IPv4/IPv6 双栈网络。如需检查 您的部署是否支持 IPv4/IPv6 双栈网络,请按照 获取机器相关信息 中的说明操作,并检查 dualstack_capable 标签的返回值。

在双栈集群中,IPv4 栈使用孤岛模式,而 IPv6 栈使用平面模式。因此,您必须指定属于同一子网的各个离散节点和 pod IPv6 地址。如需了解详情,请参阅 平面模式与孤岛模式网络模型

例如,如果您的 Distributed Cloud Connected 节点和其他本地机器位于同一第 2 层网域中,您可以为集群指定 IPv6 CIDR 块,如下所示:

块用途 块范围 块大小
IPv6 子网 fd12::/56 2^72
pod fd12::1:0/59 2^69
服务 fd12::2:0/59 2^69

此示例假定以下情况:

  • 节点、pod 和服务 CIDR 块属于 fd:12::/56 超网络。
  • 节点、Pod 和服务 IP 地址是指定 CIDR 块的子网。
  • 没有子网重叠。

IPv4/IPv6 双栈网络需要第 2 层负载均衡用于 IPv4 BGP 对等互连,第 3 层负载均衡用于 IPv6 对等互连。如需了解详情,请参阅负载均衡

如需详细了解如何在 IPv4/IPv6 双栈集群上部署工作负载,请参阅以下内容:

启用 Distributed Cloud Edge Network API

如需在 Distributed Cloud 的关联部署上配置网络,您必须先启用 Distributed Cloud Edge Network API。为此,请完成本部分中的步骤。默认情况下,Distributed Cloud Connected 服务器在发货时已启用 Distributed Cloud Edge Network API。

控制台

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

    启用 API

  2. 点击启用

gcloud

使用以下命令:

gcloud services enable edgenetwork.googleapis.com

在 Distributed Cloud Connected 上配置网络

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

以下限制适用于 Distributed Cloud Connected 服务器:

  • 您只能配置子网,并且
  • 子网仅支持 VLAN ID;不支持基于 CIDR 的子网。

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

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

  2. 创建网络。

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

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

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

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

  7. 测试配置。

  8. 将 Pod 连接到网络。

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

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

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

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

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

创建网络

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

创建一个或多个子网

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

对于 Distributed Cloud Connected 服务器,您只能使用 VLAN ID 配置子网。不支持基于 CIDR 的子网。

建立北向 BGP 对等互连会话

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

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

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

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

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

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

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

建立南向 BGP 对等互连会话

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

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

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

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

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

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

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

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

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

测试配置

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

  1. 检查网络的运行状态

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

  3. 检查互连的运行状态

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

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

将 Pod 连接到网络

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

负载均衡

Distributed Cloud Connected 附带以下负载均衡解决方案:

  • 使用 MetalLB 进行第 2 层负载均衡
  • 使用 Google Distributed Cloud 负载平衡器进行第 3 层负载均衡

Distributed Cloud Connected 内置的负载均衡解决方案无法使用重叠的 Kubernetes 服务虚拟 IP 前缀。如果您有使用第 2 层 MetalLB 负载均衡的现有 Distributed Cloud Connected 部署,并且想要切换到使用 Google Distributed Cloud 负载平衡器进行第 3 层负载均衡,则必须使用与第 2 层 MetalLB 负载均衡配置所使用的前缀不重叠的服务虚拟 IP 前缀。

使用 MetalLB 进行第 2 层负载均衡

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

  1. 您的网络管理员在订购 Distributed Cloud 时规划网络拓扑,并指定所需的虚拟 IPv4 和 IPv6 地址子网。Google 会在交付前相应地配置 Distributed Cloud 硬件。 请注意以下事项:
    • 此 VIP 子网在 Distributed Cloud 可用区中运行的所有 Kubernetes 集群之间共享。
    • 系统会通过 Distributed Cloud 可用区与本地网络之间的 BGP 会话通告所请求的 VIP 子网的路由。
    • 子网中的第一个(网络 ID)、第二个(默认网关)和最后一个(广播地址)地址是为核心系统功能预留的。请勿将这些地址分配给 MetalLB 配置的地址池。
    • 每个集群都必须使用配置的 VIP 子网内的单独 VIP 范围。
  2. 在 Distributed Cloud 可用区中创建集群时,集群管理员使用 CIDR 表示法指定 pod 和 ClusterIP 服务地址池。您的网络管理员会向集群管理员提供相应的 LoadBalancer VIP 子网。
  3. 创建集群后,集群管理员会配置相应的 VIP 池。您必须在创建集群时使用 --external-lb-address-pools 标志指定 VIP 池。该标志接受采用以下格式的 YAML 或 JSON 载荷的文件:

     addressPools:
     - name: foo
       addresses:
       - 10.2.0.212-10.2.0.221
       - fd12::4:101-fd12::4:110
       avoid_buggy_ips: true
       manual_assign: false
    
     - name: bar
       addresses:
       - 10.2.0.202-10.2.0.203
       - fd12::4:101-fd12::4:102
       avoid_buggy_ips: true
       manual_assign: false
    

    如需指定 VIP 地址池,请在载荷中提供以下信息:

    • name:唯一标识此 VIP 地址池的描述性名称。
    • addresses:要包含在此地址池中的 IPv4 和 IPv6 地址、地址范围和子网的列表。
    • avoid_buggy_ips:排除以 .0.255 结尾的 IP 地址。
    • manual_assign:允许您在目标 服务LoadBalancer的配置中手动分配此池中的地址,而不是让 MetalLB 控制器自动分配。

    如需详细了解如何配置 VIP 地址池,请参阅 MetalLB 文档中的 指定地址池

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

单个节点池中的 Distributed Cloud 节点共享一个公共第 2 层网域,因此也是 MetalLB 负载均衡器节点。

使用 Google Distributed Cloud 负载平衡器进行第 3 层负载均衡

Distributed Cloud Connected 附带基于 Google Distributed Cloud 捆绑式负载平衡器 的捆绑式网络负载 均衡解决方案,该解决方案在第 3 层模式下配置为 BGP 讲话者。您可以使用此解决方案,通过使用 VIP 将在 Distributed Cloud Connected 可用区中运行的服务公开给外部世界。

您可以使用 metallb-config ConfigMap 指定相应 LoadBalancer 服务的 VIP 范围。例如:

kind: ConfigMap
apiVersion: v1
data:
  config: |
    address-pools:
    - name: default
      protocol: bgp
      addresses:
      - 10.100.10.66/27
metadata:
  name: metallb-config
  namespace: metallb-system

在上面的示例中,您配置的每个 LoadBalancer 服务都会自动分配一个虚拟 IP 地址,该地址来自 ConfigMap 中指定的 10.100.10.66/27 范围。然后,这些 VIP 会通过 BGPPeer 资源由在 ToR 交换机上配置的 Distributed Cloud BGP 讲话者向北通告。

创建 Distributed Cloud 集群时,系统会在该集群上自动创建以下资源:

  • 用于实例化 BGP 负载均衡器的 BGPLoadBalancer 资源。
  • 用于指定要用于 BGP 讲话者的本地浮动 IP 地址的 NetworkGatewayGroup 资源。这些 IP 地址会自动设置为分配给集群的 Kubernetes 节点子网的最后两个 IP 地址。

有了这些资源,您可以通过配置相应的 BGPPeer 资源来设置与 Distributed Cloud ToR 交换机的 BGP 会话。为此,您必须拥有所需的自治系统编号 (ASN) 和 ToR 交换机的环回对等 IP 地址。这些 IP 地址用作默认网络资源上的 ToR 交换机 BGP 会话端点。请注意,network 参数的值必须为 pod-network

以下是两个 BGPPeer 资源的示例:

kind: BGPPeer
apiVersion: networking.gke.io/v1
metadata:
  name: bgppeertor1
  labels:
    cluster.baremetal.gke.io/default-peer: "true"
  namespace: kube-system
spec:
  network: pod-network
  localASN: 64777
  peerASN: 64956
  peerIP: 10.112.0.10
  sessions: 1
kind: BGPPeer
apiVersion: networking.gke.io/v1
metadata:
  name: bgppeertor2
  labels:
    cluster.baremetal.gke.io/default-peer: "true"
  namespace: kube-system
spec:
  network: pod-network
  localASN: 64777
  peerASN: 64956
  peerIP: 10.112.0.11
  sessions: 1

为 IPv6 对等互连配置第 3 层 BGP 负载均衡自动化

在开始在 IPv4/IPv6 双栈网络集群上使用 IPv6 对等互连之前,您必须与 Google 支持团队合作,在 Distributed Cloud Connected 部署上启用 Google Distributed Cloud 负载均衡器自动化。

创建第 3 层 LoadBalancer 服务

在 Distributed Cloud Connected 部署上启用 Google Distributed Cloud 负载均衡器自动化后,实例化第 3 层 LoadBalancer 服务。例如:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  labels:
    app.kubernetes.io/name: MyApp
spec:
  ipFamilyPolicy: PreferDualStack
  ipFamilies:
  - IPv6
  - IPv4
  selector:
    app.kubernetes.io/name: MyApp
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80

检查 BGP 会话和负载均衡服务的状态

如需检查 BGP 会话的状态,请使用以下命令:

kubectl get bgpsessions.networking.gke.io -A

该命令会返回类似于以下示例的输出:

NAMESPACE     NAME                                                 LOCAL ASN   PEER ASN   LOCAL IP        PEER IP         STATE            LAST REPORT
kube-system   bgppeertor1-np-den6-120demo-den6-04-6ad5b6f4         64777       64956      10.100.10.61    10.112.0.10     Established      2s
kube-system   bgppeertor2-np-den6-120demo-den6-04-6ad5b6f4         64777       64956      10.100.10.61    10.112.0.11     Established      2s

如需验证 LoadBalancer 服务是否由 BGP 讲话者通告,请使用以下命令:

kubectl get bgpadvertisedroutes.networking.gke.io -A

该命令会返回类似于以下示例的输出:

NAMESPACE      NAME                           PREFIX            METRIC
kube-system    bgplb-default-service-tcp      10.100.10.68/32
kube-system    bgplb-default-service-udp      10.100.10.77/32

Distributed Cloud Ingress

除了负载均衡之外,Distributed Cloud Connected 还支持 Kubernetes Ingress 资源。Kubernetes Ingress 资源控制流向在 Distributed Cloud Connected 集群上运行的 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 Connected 服务器上不可用。

停用默认 Distributed Cloud Ingress 资源

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

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. 按照 创建集群中的说明提交集群创建请求。

NodePort 服务

Distributed Cloud Connected 支持 Kubernetes NodePort 服务,该服务会在您选择的端口号上监听 Distributed Cloud 节点上的连接。NodePort 服务支持 TCP、UDP 和 SCTP 协议。例如:

apiVersion: v1
kind: pod
metadata:
  name: socat-nodeport-sctp
  labels:
    app.kubernetes.io/name: socat-nodeport-sctp
spec:
  containers:
  - name: socat-nodeport-sctp
    ...
    ports:
      - containerPort: 31333
        protocol: SCTP
        name: server-sctp

---

apiVersion: v1
kind: service
metadata:
  name: socat-nodeport-sctp-svc
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: socat-nodeport-sctp
  ports:
    - port: 31333
      protocol: SCTP
      targetPort: server-sctp
      nodePort: 31333

SCTP 支持

Distributed Cloud Connected 在主网络接口上支持流控制传输协议 (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

此功能在 Distributed Cloud Connected 服务器上不可用。

SCTP 内核模块

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

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

模块名称 配置名称
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 Connected 支持 Google Distributed Cloud ClusterDNS 资源,用于使用 spec.domains 部分为特定网域配置上游域名服务器。如需详细了解如何配置此 资源,请参阅 spec.domains

此功能在 Distributed Cloud Connected 服务器上不可用。

后续步骤