本页面介绍了 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。您无法重新配置已连接到 IPv4/IPv6 双栈网络的 Distributed Cloud 的现有仅限 IPv4 部署。如需检查您的部署是否支持 IPv4/IPv6 双栈网络,请按照获取有关机器的信息中的说明操作,并检查 dualstack_capable 标签的返回值。
在双栈集群中,IPv4 栈使用孤岛模式,而 IPv6 栈使用平面模式。因此,您必须指定属于同一子网的各个离散节点和 Pod IPv6 地址。如需了解详情,请参阅平面模式与孤岛模式网络模型。
例如,如果您的 Distributed Cloud 连接节点和其他本地机器位于同一第 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。
控制台
在 Google Cloud 控制台中,前往 Distributed Cloud Edge Network API 页面。
点击启用。
gcloud
使用以下命令:
gcloud services enable edgenetwork.googleapis.com
在 Distributed Cloud connected 上配置网络
本部分介绍如何在已连接的 Distributed Cloud 部署中配置网络组件。
以下限制适用于 Distributed Cloud 连接的服务器:
- 您只能配置子网,并且
- 子网仅支持 VLAN ID;不支持基于 CIDR 的子网。
Distributed Cloud Connected 的典型网络配置包括以下步骤:
可选:根据需要,初始化目标可用区的网络配置。
创建网络。
在网络中创建一个或多个子网。
使用相应的互连连接与 PE 路由器建立北向 BGP 对等互连会话。
使用相应的子网与运行工作负载的 pod 建立南向 BGP 对等会话。
可选:建立环回 BGP 对等会话以实现高可用性。
测试配置。
将盒子连接到网络。
可选:初始化 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 连接的硬件时请求的所有互连建立对等互连。此配置可为您的分布式云连接部署提供与本地网络的基本上行链路连接。
初始化可用区的网络配置是一次性操作。如需查看完整说明,请参阅初始化可用区的网络配置。
创建网络
如需创建新网络,请按照创建网络中的说明操作。 您还必须在网络中创建至少一个子网,以允许 Distributed Cloud 连接的节点连接到该网络。
创建一个或多个子网
如需创建子网,请按照创建子网中的说明操作。 您必须在网络中创建至少一个子网,以允许节点访问该网络。您创建的每个子网对应的 VLAN 会自动提供给相应可用区中的所有节点。
对于 Distributed Cloud 连接的服务器,您只能使用 VLAN ID 配置子网。不支持基于 CIDR 的子网。
建立北向 BGP 对等互连会话
创建网络及其对应的子网时,它们位于其 Distributed Cloud 连接区域中。如需启用出站连接,您必须在网络与对等边缘路由器之间建立至少一个北向 BGP 对等会话。
如需建立北向 BGP 对等互连会话,请执行以下操作:
列出您所在可用区中的互连,然后选择相应对等互联会话的目标互连。
在所选互连上创建一个或多个互连连接。互连连接会将您在下一步中创建的路由器与所选互连相关联。
创建路由器。此路由器使用您在上一步中创建的互连连接在互连和您的网络之间路由流量。
为在此过程前面创建的每个互连连接向路由器添加一个接口。对于每个接口,请使用所连接的分布式云机架中相应架顶 (ToR) 交换机的 IP 地址。如需了解相关说明,请参阅建立北向对等互连会话。
为上一步中在路由器上创建的每个接口添加对等方。
建立南向 BGP 对等互连会话
如需启用从本地网络到工作负载的入站连接,您必须在对等边缘路由器和 Pod 所属的子网之间建立一个或多个南向 BGP 对等会话。每个子网的网关 IP 地址是 Distributed Cloud 已连接机架中相应 ToR 交换机的 IP 地址。
如需建立南向 BGP 对等互连会话,请执行以下操作:
为要预配入站连接的每个子网,向目标网络中的路由器添加一个接口。如需了解相关说明,请参阅建立南向对等互连会话。
为上一步中在路由器上创建的每个接口添加对等方。
可选:建立环回 BGP 对等会话
为了在工作负载和本地网络之间实现高可用性连接,您可以在目标 Pod 和分布式云连接机架中的两个 ToR 交换机之间建立环回 BGP 对等互连会话。环回对等互连会话会为 Pod 建立两个独立的对等互连会话,每个会话对应一个 ToR 交换机。
如需建立环回 BGP 对等互连会话,请执行以下操作:
向目标网络中的路由器添加环回接口。如需查看相关说明,请参阅建立环回对等互连会话。
为环回接口添加对等方。
测试配置
如需测试您创建的网络组件的配置,请执行以下操作:
将盒子连接到网络
如需将 Pod 连接到网络并配置高级网络功能,请按照网络功能运算符中的说明操作。
负载均衡
Distributed Cloud Connected 随附以下负载均衡解决方案:
- 使用 MetalLB 进行第 2 层负载均衡
- 使用 Google Distributed Cloud 负载平衡器进行第 3 层负载均衡
内置于 Distributed Cloud Connected 中的负载均衡解决方案无法使用重叠的 Kubernetes 服务虚拟 IP 前缀。如果您已部署连接的分布式云,该部署使用第 2 层 MetalLB 负载均衡,并且您想改用第 3 层负载均衡(使用 Google Distributed Cloud 负载平衡器),则必须使用与第 2 层 MetalLB 负载均衡配置所用前缀不重叠的服务虚拟 IP 前缀。
使用 MetalLB 进行第 2 层负载均衡
Distributed Cloud 随附基于 MetalLB(第 2 层模式)的捆绑式网络负载均衡解决方案。您可以使用此解决方案,通过虚拟 IP 地址 (VIP) 将 Distributed Cloud 区域中运行的服务公开给外部世界,具体操作如下:
- 网络管理员在订购 Distributed Cloud 时规划网络拓扑并指定所需的虚拟 IPv4 和 IPv6 地址子网。Google 会在交付之前相应地配置 Distributed Cloud 硬件。请注意以下几点:
- 此 VIP 子网在您的 Distributed Cloud 可用区内运行的所有 Kubernetes 集群之间共享。
- 通过分布式云区域与本地网络之间的 BGP 会话通告所请求 VIP 子网的路由。
- 子网中的第一个(网络 ID)、第二个(默认网关)和最后一个(广播地址)地址是为核心系统功能预留的。请勿将这些地址分配给 MetalLB 配置的地址池。
- 每个集群都必须使用配置的 VIP 子网内的单独 VIP 范围。
- 在 Distributed Cloud 区域中创建集群时,集群管理员会使用 CIDR 表示法指定 Pod 和 ClusterIP 服务地址池。您的网络管理员会向集群管理员提供相应的
LoadBalancerVIP 子网。 创建集群后,集群管理员会配置相应的 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 文档中的指定地址池。
集群管理员创建相应的 Kubernetes
LoadBalancer服务。
单个节点池中的 Distributed Cloud 节点共享一个公共的第 2 层网域,因此也是 MetalLB 负载均衡器节点。
使用 Google Distributed Cloud 负载平衡器进行第 3 层负载均衡
Distributed Cloud Connected 随附基于 Google Distributed Cloud 捆绑式负载平衡器的捆绑式网络负载均衡解决方案,该解决方案以第 3 层模式配置为 BGP 扬声器。您可以使用此解决方案,通过 VIP 将在 Distributed Cloud 连接区中运行的服务公开给外部世界。
您可以使用 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 服务都会自动分配一个来自 ConfigMap 中指定的 10.100.10.66/27 范围的虚拟 IP 地址。然后,在 ToR 交换机上配置的分布式云 BGP speaker 会通过 BGPPeer 资源向北通告这些 VIP。
创建 Distributed Cloud 集群时,系统会自动在该集群上创建以下资源:
- 用于实例化 BGP 负载均衡器的
BGPLoadBalancer资源。 - 一种
NetworkGatewayGroup资源,用于指定要用于 BGP 扬声器的本地浮动 IP 地址。这些 IP 地址会自动设置为分配给集群的 Kubernetes 节点子网的最后两个 IP 地址。
有了这些资源,您就可以通过配置相应的 BGPPeer 资源来设置与分布式云 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 的部署上启用 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
如需验证 BGP 扬声器是否正在宣传您的 LoadBalancer 服务,请使用以下命令:
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 Connected 还支持 Kubernetes Ingress 资源。Kubernetes Ingress 资源可控制 HTTP(S) 流量流向在 Distributed Cloud 已连接集群上运行的 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 连接的服务器不支持此功能。
停用默认的 Distributed Cloud Ingress 资源
默认情况下,当您创建 Distributed Cloud 连接的集群时,Distributed Cloud 会自动为该集群配置 istio-ingress 服务。您可以选择创建没有 istio-ingress 服务的分布式云连接集群。为此,请完成以下步骤:
gcloud
创建一个名为
SystemsAddonConfig.yaml且包含以下内容的 YAML 配置文件:systemAddonsConfig: ingress: disabled: true
在集群创建命令中使用
--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
将以下 JSON 内容添加到集群创建请求中的 JSON 载荷:
"systemAddonConfig" { "ingress" { "disabled": true } }按照创建集群中的说明提交集群创建请求。
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 支持包括 NodePort、LoadBalancer 和 ClusterIP 服务类型。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 连接的服务器不支持此功能。
SCTP 内核模块
从 1.5.0 版开始,Distributed Cloud Connected 将 sctp Edge 操作系统内核模块配置为可加载。这样一来,您就可以在内核用户空间中加载自己的 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 支持使用 spec.domains 部分配置特定网域的上游域名服务器的 Google Distributed Cloud ClusterDNS 资源。如需详细了解如何配置此资源,请参阅 spec.domains。
Distributed Cloud 连接的服务器不支持此功能。