假设管控实例是A,两个接入集群是B1,B2,在B1接入集群选择命名空间/服务进行发布后,需要B2接入集群中也创建该命名空间才能进行消费,因此建议选择“全局命名空间”下的service。
当在接入集群 B1 中创建了跨集群服务,并且状态已启用时,通过在 B1 接入集群中执行以下命令,您可以查看到该跨集群服务:
kubectl get serviceexport -n {跨集群服务命名空间} {跨集群服务名称}
使用 -o yaml 参数可以查看到该服务的详细信息,其中 status 下的条件(condition)中的 Valid 字段将显示为 True,Ready 字段也将显示为 True。
在B1和B2集群中执行以下命令时即可看到该跨集群服务的消费服务:
kubectl get serviceimport -n submariner-operator
注意因需使用calico维护ippool,目前跨集群服务仅支持calico网络插件,不支持cubecni。
创建跨集群服务
- 在分布式容器云平台控制台左侧导航栏中选择【服务管理】>【跨集群服务】,进入跨集群服务表页。
- 选择对应的管控实例。
- 点击创建跨集群服务,开始创建。
- 选择服务提供者,即纳管的接入集群。
- 选定了服务提供者后,会自动获取该接入集群的服务所在命名空间,选择计划发布服务所在的命名空间。
- 选择对应的计划服务进行发布。
- 点击“保存”即可。
- 创建成功后支持在页面上进行查看。
- CCSE ONE还支持临时停用该跨集群服务,只需到对应的服务选择停用即可。停用后服务状态变为禁用,待到需要开启时点击“启用”按钮重新启用即可。
删除跨集群服务
CCSE ONE支持删除和批量删除跨集群服务。
- 选择已开启跨集群服务所在的管控实例。
- 在对应的跨集群服务选择删除即可。
- 如果需删除的跨集群服务较多,则可以选中对应的服务,然后进行批量删除。
- 选择删除的服务会进入“删除中”状态,等待删除完成即可。
如何访问域名
假设两个接入集群是B1,B2,B1集群发布跨集群服务后,可在B2集群进行消费,即:B2集群中的“pod”能访问到B1集群中的pod提供的服务。
访问方法:可以通过全局域名和指定集群域名解析到跨集群服务ip。其中,域名组成格式为:
{集群名称}.{服务名称}.{服务所在命名空间}.svc.clusterset.local
如果指定集群名称,就会访问该集群下的服务;如果没指定集群名称,会优先解析到本地集群中的服务;如果本地没有找到对应的服务,将会自动访问远程集群。
在B2集群中执行以下命令进行域名解析:
dig related-cluster-46.chart-ready-78824d-test-nginx.no-limit.svc.clusterset.local
dig chart-ready-78824d-test-nginx.no-limit.svc.clusterset.local
从图中可以看到域名解析的IP为242.0.255.254。
在pod中通过curl访问该服务,能正确返回。
注意
该服务对应的pod使用的镜像为nginx,使用的端口为80,使用跨集群服务访问前,请先确保该service及端口在pod所在的集群内能被正确访问到。
该全局服务ip为虚拟ip,无法ping通,且只能在pod中访问。