13.4. 为 Submariner 启用服务发现
submariner-addon
组件是一个技术预览功能。
在 Submariner 部署到与受管集群相同的环境中后,会将路由配置为 ManagedClusterSet
中的 pod 和服务间的安全 IP 路由。如果要使集群的服务可见,并可以被 ManagedClusterSet
中的其他集群发现,您需要创建一个 ServiceExport
对象。当使用 ServiceExport
对象导出一个服务后,您可以使用以下方式访问该服务: <service>.<namespace>.svc.clusterset.local
。如果多个集群导出具有相同名称的服务,并且来自同一命名空间中,则其他集群会把这个服务看作为一个单一的逻辑服务。
在本例在,在 default
命名空间中使用 nginx
服务,但您可以发现任何 Kubernetes ClusterIP
服务或无头服务:
使用以下命令,在
ManagedClusterSet
中的受管集群中应用nginx
服务实例:oc -n default create deployment nginx --image=nginxinc/nginx-unprivileged:stable-alpine oc -n default expose deployment nginx --port=8080
oc -n default create deployment nginx --image=nginxinc/nginx-unprivileged:stable-alpine oc -n default expose deployment nginx --port=8080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过创建一个
ServiceExport
条目来导出服务,该条目类似于 YAML 文件中的以下内容:apiVersion: multicluster.x-k8s.io/v1alpha1 kind: ServiceExport metadata: name: <service-name> namespace: <service-namespace>
apiVersion: multicluster.x-k8s.io/v1alpha1 kind: ServiceExport metadata: name: <service-name> namespace: <service-namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要导出的服务的名称替换
service-name
。在本例中是nginx
。将service-namespace
替换为服务所在命名空间的名称。在本例中,是default
。在不同的受管集群中运行以下命令,确认它可以访问
nginx
服务:oc -n default run --generator=run-pod/v1 tmp-shell --rm -i --tty --image quay.io/submariner/nettest -- /bin/bash curl nginx.default.svc.clusterset.local:8080
oc -n default run --generator=run-pod/v1 tmp-shell --rm -i --tty --image quay.io/submariner/nettest -- /bin/bash curl nginx.default.svc.clusterset.local:8080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
nginx
服务发现现在已为 Submariner 配置。