在此页面上
CN2 群集间端点发现
总结 从版本 23.4 开始,云原生 Contrail 网络 (CN2) 支持群集间端点发现。
概述
CN2 提供基于 BGP 的控制平面,允许您互连多个 Kubernetes 集群以交换路由信息。这样可以实现跨集群容器到容器以及容器到服务通信。以前,此通信仅限于基于 IP 地址的访问。
Kubernetes 中的 DNS 会自动配置为根据约定 <service>.<namespace>.svc.<cluster-domain>
通过 DNS 名称发现服务。例如, foo.default.svc.cluster.local
.要在对等集群上启用服务发现,您需要使用相应的属性创建相应的服务,以便能够对远程 Pod 进行寻址。
此功能的好处是利用 CN2 中的 BGP 将有关可用服务的信息导出到有关 Pod 的对等 CN2 群集,以便(按名称)发现它们并从对等 BGP 群集进行访问。
配置 CN2 群集以共享路由
本节介绍如何配置两个 CN2 群集以相互泄漏路由。以下示例演示如何在两个群集之间完成此操作。
先决条件
此功能需要满足以下条件:
-
CN2 版本 23.4 已安装并运行。
-
您正在使用 Kubernetes 编排在有效的云网络环境中运行。
-
您有两个正在运行的 CN2 集群。
配置 BGP 对等互连
两个 CN2 群集中的每一个都应配置为具有唯一的自治系统 AS
编号,以标识 BGP 网络中的群集。在以下示例中,我们有两个 CN2 集群,第一个带有 AS 64513
,第二个带有 AS 64514
.
定义自定义路由目标 (RT)
要使服务地址可从 CN2 VirtualNetwork
和 default-servicenetwork
default-podnetwork
路由,需要自定义 RT。在以下示例中,如果使用 , RT 42000000
如果启用了 32 位 ASN 支持,则在用户范围内。
# modify the default service network to share routes on custom RTs apiVersion: core.contrail.juniper.net/v6 kind: VirtualNetwork metadata: name: default-servicenetwork namespace: contrail-k8s-kubemanager-kubernetes-contrail spec: routeTargetList: - target-64513-42000000 --- # modify the default pod network to share routes on custom RTs apiVersion: core.contrail.juniper.net/v6 kind: VirtualNetwork metadata: name: default-podnetwork namespace: contrail-k8s-kubemanager-kubernetes-contrail spec: routeTargetList: - target-64513-42000000---
为群集 1 上的群集 2 配置 BGPR 外部
请注意,在以下示例中,name
address
、 和identifier
字段应与群集 2 上部署时配置的值匹配。
# BGP router for cluster 2 apiVersion: core.contrail.juniper.net/v6 kind: BGPRouter metadata: name: test1-multicn2-cluster2.device.example.com namespace: contrail spec: bgpRouterParameters: address: 10.74.190.55 addressFamilies: family: - inet - inet-labeled - inet-vpn - e-vpn - erm-vpn - route-target - inet6 - inet-mvpn - inet6-vpn authData: {} autonomousSystem: 64514 identifier: 10.74.190.55 port: 179 routerType: router vendor: contrail bgpRouterReferences: - kind: BGPRouter apiVersion: core.contrail.juniper.net/v6 name: test1-multicn2-cluster1.device.example.com namespace: contrail parent: kind: RoutingInstance name: default namespace: contrail
为群集 2 上的群集 1 配置 BGPR 外部
请注意,在以下示例中,name
address
、 和identifier
字段应与群集 2 上部署时配置的值匹配。
# BGP router for cluster 1 apiVersion: core.contrail.juniper.net/v6 kind: BGPRouter metadata: name: test1-multicn2-cluster1.device.example.com namespace: contrail spec: bgpRouterParameters: address: 10.74.190.74 addressFamilies: family: - inet - inet-labeled - inet-vpn - e-vpn - erm-vpn - route-target - inet6 - inet-mvpn - inet6-vpn authData: {} autonomousSystem: 64513 identifier: 10.74.190.74 port: 179 routerType: router vendor: contrail bgpRouterReferences: - kind: BGPRouter apiVersion: core.contrail.juniper.net/v6 name: test1-multicn2-cluster2.device.example.com namespace: contrail parent: kind: RoutingInstance name: default namespace: contrail
验证 BGP 对等互连是否正常工作
在上面的示例中,群集 1 IP 地址是 10.74.190.74
并且可以使用以下 URL 进行验证:
https://10.74.190.74:8083/Snh_BgpNeighborReq?search_string=
群集 2 IP 地址是 10.74.190.55
并且可以使用以下 URL 进行验证:
https://10.74.190.55:8083/Snh_BgpNeighborReq?search_string=
从 URL 中,您应该会看到每个系统上列出了两个 BGP 邻接方, state
每个邻接方的 应为 Established
。
创建导出服务
在导出服务的集群(特此 cluster-export.local
)上,创建一个要导出到一个集群中的服务,其中包含附加标签 core.juniper.net/serviceExport: <export-name>
。
apiVersion: v1 kind: Service metadata: labels: - core.juniper.net/serviceExport: test-export name: foo-service-label namespace: my-namespace spec: selector: app.kubernetes.io/name: nginx ports: - protocol: TCP port: 80 name: http
创建导入服务
在导入服务的集群上(特此 cluster-import.local
),创建具有附加标签 core.juniper.net/serviceImport: <export-name>
的同名对应服务。
必须 clusterIP
设置为 None
。这会将服务标识为“无外设”,并为其创建 no Endpoint
。还需要端口配置。 不要设置目标端口, 因为必须 targetPort
匹配 port
。
apiVersion: v1 kind: Service metadata: labels: - core.juniper.net/serviceImport: test-export name: my-service-label namespace: my-namespace spec: clusterIP: None ports: - protocol: TCP port: 80 name: http
部署 YAML 文件后,您可以通过 中的 my-service.my-namespace.svc.cluster-import.local
Pod cluster-import.local
访问该服务。您现在有两个通过 BGP 交换路由的 CN2 集群。
示例 YAML 文件位于 feature_tests/tests/test-yaml/endpoint-discovery/
中。