在此页面上
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 外部
请注意,在以下示例中,nameaddress、 和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 外部
请注意,在以下示例中,nameaddress、 和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.localPod cluster-import.local 访问该服务。您现在有两个通过 BGP 交换路由的 CN2 集群。
示例 YAML 文件位于 feature_tests/tests/test-yaml/endpoint-discovery/中。