操作场景
北极星提供将 K8s 集群关联到 Polaris 的能力,Polaris Controller 可以同步您 Kubernetes 集群上的 Namespace,Service,Endpoints 等资源到 Polaris 中,从而实现 K8s Service 自动注册到 Polaris ,使用 Polaris API 和多语言 SDK 可以访问,使用 gRPC 和 Spring Cloud 等开源框架也可以访问。主要适用于以下场景:
异构系统与多技术栈场景下,SpringCloud 等框架服务调用 K8s 集群服务。
跨集群场景下的服务调用。
本文介绍通过 TSF 控制台使用 K8s 集群的能力。
操作步骤
创建引擎
1. 登录 TSF 控制台,在左侧菜单栏中选择 Polaris(北极星)。
2. 在引擎实例列表页面,单击目标引擎的“ID”,进入基本信息页面。
3. 在顶部页签单击 K8s 集群,单击关联集群。
说明:
1. 添加容器集群会安装 Polaris-Controller 组件,请确保您的集群至少有 1C2G 的空闲资源,否则会添加失败。
2. 容器集群中安装 Polaris-Controller 组件后默认支持 K8s Service 服务同步(按需同步)和 Java Agent 自动注入能力。您也可以在控制台选择全量同步使用 k8s 全量同步方式。
K8s Service 同步:也可以根据业务的特点选择服务的同步方式,支持全量同步(集群内全部 service 自动同步至北极星)/按需同步(仅指定的namespace 或者 service 自动同步至北极星)。
Java Agent 接入:容器集群中安装 Polaris-Controller 组件后默认支持 Java Agent 自动注入能力。

原理说明
在 TSF 控制台关联 tke/eks 集群后,会自动在您对应的 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... ...
如何确认polaris-controller版本
点击集群ID,跳转到容器控制台页面,查看polaris-system命名空间下polaris-controller这个statefulset的镜像版本。
