本页面介绍了 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。
控制台
在 Google Cloud 控制台中,前往 Distributed Cloud Edge Network API 页面。
点击启用 。
gcloud
使用以下命令:
gcloud services enable edgenetwork.googleapis.com
在 Distributed Cloud Connected 上配置网络
本部分介绍了如何在 Distributed Cloud Connected 部署上配置网络组件。
以下限制适用于 Distributed Cloud Connected 服务器:
- 您只能配置子网,并且
- 子网仅支持 VLAN ID;不支持基于 CIDR 的子网。
Distributed Cloud Connected 的典型网络配置包括以下步骤:
可选:根据需要初始化目标可用区的网络配置。
创建网络。
在网络中创建一个或多个子网。
使用相应的互连连接与 PE 路由器建立北向 BGP 对等互连会话。
使用相应的子网与运行工作负载的 pod 建立南向 BGP 对等互连会话。
可选:建立环回 BGP 对等互连会话以实现高可用性。
测试配置。
将 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 对等互连会话,请执行以下操作:
列出可用区中的可用互连 然后为此对等互连会话选择目标互连。
在所选互连上 创建一个或多个互连连接。互连连接会将您在下一步中创建的路由器与所选互连相关联。
创建路由器。此路由器使用您在上一步中创建的互连连接在互连与网络之间路由流量。
为此过程前面创建的每个互连连接向路由器添加一个接口。对于每个接口,请使用 Distributed Cloud Connected 机架中相应架顶式 (ToR) 交换机的 IP 地址。如需查看相关说明,请参阅 建立北向对等互连会话。
为在上一步中在路由器上创建的每个接口添加对等端。
建立南向 BGP 对等互连会话
如需启用从本地网络到工作负载的入站连接,您必须在对等边缘路由器与 pod 所属的子网之间建立一个或多个南向 BGP 对等互连会话。每个子网的网关 IP 地址是 Distributed Cloud Connected 机架中相应 ToR 交换机的 IP 地址。
如需建立南向 BGP 对等互连会话,请执行以下操作:
为您要提供入站连接的每个子网向目标网络中的路由器添加一个接口。如需查看相关说明,请参阅 建立南向对等互连会话。
为在上一步中在路由器上创建的每个接口添加对等端。
可选:建立环回 BGP 对等互连会话
如需在工作负载与本地网络之间启用高可用性连接,您可以在目标 pod 与 Distributed Cloud Connected 机架中的两个 ToR 交换机之间建立环回 BGP 对等互连会话。环回对等互连会话会为 pod 建立两个独立的对等互连会话,每个 ToR 交换机一个。
如需建立环回 BGP 对等互连会话,请执行以下操作:
向目标网络中的路由器添加环回接口。如需查看相关说明,请参阅 建立环回对等互连会话。
为环回接口添加对等端。
测试配置
如需测试您创建的网络组件的配置,请执行以下操作:
将 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 可用区中运行的服务公开给外部世界,如下所示:
- 您的网络管理员在订购 Distributed Cloud 时规划网络拓扑,并指定所需的虚拟 IPv4 和 IPv6 地址子网。Google 会在交付前相应地配置 Distributed Cloud 硬件。
请注意以下事项:
- 此 VIP 子网在 Distributed Cloud 可用区中运行的所有 Kubernetes 集群之间共享。
- 系统会通过 Distributed Cloud 可用区与本地网络之间的 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 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
创建一个名为
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 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 服务器上不可用。