有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

操作场景

微服务引擎 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.1 可以根据自身业务需求选择目标关联的 K8s 集群,支持 TKE (容器集群) / EKS (弹性容器集群)。
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: v1
kind: Service
metadata:
name: details
annotations:
polarismesh.cn/sync: true
... ...
按需同步命名空间下所有的服务:为命名空间打上标签,polaris-controller 会将该命名空间下所创建的所有服务同步到 polarismesh。
apiVersion: v1
kind: Namespace
metadata:
name: default
annotations:
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: v1
kind: Service
metadata:
namespace: development
name: productpage
annotations:
polarismesh.cn/aliasService: Productpage
polarismesh.cn/aliasNamespace: Development
... ...