操作场景
微服务引擎 TSE 提供将 K8s 集群关联到 Polarismesh 的能力,Polaris Controller 可以同步您 Kubernetes 集群上的 Namespace,Service,Endpoints 等资源到 Polaris 中,从而实现 K8s Service 自动注册到 Polarismesh ,使用 Polarismesh API 和多语言 SDK 可以访问,使用 gRPC 和 Spring Cloud 等开源框架也可以访问。主要适用于以下场景:
异构系统与多技术栈场景下,SpringCloud 等框架服务调用 K8s 集群服务。
跨集群场景下的服务调用。
本文介绍通过 TSE 控制台使用 K8s 集群的能力。
操作步骤
创建引擎
1. 登录 TSE 控制台。
2. 在服务治理中心下的 实例列表 页面,单击目标引擎的“ID”,进入基本信息页面。
3. 在顶部页签单击 K8s 集群,单击关联集群。
3.2 也可以根据业务的特点选择服务的同步方式,支持全量同步(同步k8s集群中所定义的全部服务)/按需同步(只同步打了polarismesh.cn/sync标签的命名空间或服务)。
原理说明
在 TSE 控制台关联 tke/eks 集群后, TSE 会自动在您对应的 tke/eks 集群中部署 polaris-controller 。具体请参见 **资源清单**。
polaris-controller 默认会同步 K8s 集群所有的 namespace,service 和 endpoints 。具体请参见 **polaris-controller 同步行为**。
您可以在 K8s 的 service 指定注解,操作 polaris-controller 同步的行为。具体指引和示例请参见 **polaris-controller 支持的注解**。
资源清单
在您的 tke/eks 集群创建的 K8s 资源清单如下:
资源类型 | 资源名 | 资源用途 |
namespace | polaris-system | polaris-controller 和其相关配置都在这个命名空间下 |
deployment | polaris-controller | 提供同步服务的工作负载 |
configmap | injector-mesh, polaris-sidecar-injector | polaris-controller 使用的配置文件 |
serviceAccount | polaris-controller | 提供访问 K8s 资源需要的权限 |
clusterRole | polaris-controller | 提供访问 K8s 资源需要的权限 |
clusterRoleBinding | polaris-controller | 提供访问 K8s 资源需要的权限 |
mutatingWebhookConfiguration | polaris-sidecar-injector | 提供自动注入能力 |
可以使用下面图片中的命令查看到上述的资源。
polaris-controller 同步行为
polaris-controller 默认会同步 K8s 集群所有的 namespace,service 和 endpoints 的行为。
资源类型 | 资源行为 |
namespace | 创建 namespace 时,会在 polarismesh 创建一个同名的命名空间。 删除 namespace 时,不会移除 polarismesh 的同名命名空间。 |
service | 创建 service 时,不论创建的 service 的类型,都会在 polarismesh 对应的命名空间下创建一个同名的服务。 删除 service 时,不会移除 polarismesh 对应命名空间下的服务,会移除 polarismesh 中对应服务的实例(只移除本 K8s 集群同步到 polarismesh 对应服务下的实例)。 |
endpoints | 某个 service 的 endpoints 创建时,会把 endpoints 列表中 IP 和 port 每个组合,作为 polarismesh 对应服务下的一个服务实例,同步到 polarismesh 。如果 IP 在 endpoints 的就绪地址列表中,则 polarismesh 服务实例状态为健康,如在未就绪地址列表中,则 polarismesh 状态为不健康。 某个 service 的 endpoints 地址列表变化时,会动态的同步到 polarismesh 。地址列表增加,则在 polarismesh 服务下注册新实例;地址列表减少,则反注册 polarismesh 服务下对应的实例。 某个 service 的 endpoints 被移除时,本 K8s 集群同步到 polarismesh 对应服务下的实例都会从 polarismesh 的服务中移除。 |
polaris-controller 支持的注解
您可以在 k8s 的 service 指定注解,操作 polaris-controller 同步的行为,当前支持以下注解。
注解名称 | 注解说明 |
polarismesh.cn/sync | 是否同步这个服务到 polarismesh。true 同步,false 不同步,默认不同步 |
polarismesh.cn/aliasService | 把 k8s service 同步到 polarismesh 时,同时创建的服务别名的名字 |
polarismesh.cn/aliasNamespace | 创建的别名所在的命名空间,配合 polarismesh.cn/aliasService 使用 |
如何按需同步
polaris-controller 默认会同步 K8s 集群所有的 service。某些场景下,您可能只想同步部分 service 到 polarismesh,这时可以将同步方式选择为(按需同步),同时使用
polarismesh.cn/sync
注解来指定需要同步的服务。按需同步单个服务:下面的 service 创建时,polaris-controller 会将该服务同步到 polarismesh。
apiVersion: v1kind: Servicemetadata:name: detailsannotations:polarismesh.cn/sync: true... ...
按需同步命名空间下所有的服务:为命名空间打上标签,polaris-controller 会将该命名空间下所创建的所有服务同步到 polarismesh。
apiVersion: v1kind: Namespacemetadata:name: defaultannotations:polarismesh.cn/sync: "true"... ...
创建别名示例
polaris-controller 默认会以 service 名字,创建一个对应的 polarismesh 服务。可能有以下情况,需要创建服务别名:
您不想用 service 名作为 polarismesh 服务的名字。例如您希望 polarismesh 的服务名是大写,但是 K8s 的 service 名限制只能小写。这时可以使用别名注解指定一个大写的 polarismesh 服务名。
您希望将某个 namespace 下的某个 service 暴露到另外命名空间中。这时可以使用别名注解指定另一个命名空间。
下面示例的 service 创建时,polaris-controller 会在 polarismesh 的 development 命名空间下创建一个名为 productpage 的服务。同时也会在 Development 命名空间下创建一个名为 Productpage 的服务别名。
apiVersion: v1kind: Servicemetadata:namespace: developmentname: productpageannotations:polarismesh.cn/aliasService: Productpagepolarismesh.cn/aliasNamespace: Development... ...