定义规范化服务
注意:系统会自动支持规范化服务 (使用 Cloud Service Mesh 1.6.8 及更高版本)。
规范服务是一组实现相同服务和 API 的工作负载。对于受支持的工作负载类型,Cloud Service Mesh 会根据 Kubernetes API 服务器中的现有信息自动创建规范服务资源。本页面介绍哪些标签自动定义规范化服务,以及如何手动调整服务的边界。
目前支持的工作负载实例类型包括:
- Kubernetes Pod(包括通过 Kubernetes Deployment、Kube Run Service 等)
- 虚拟机实例
- 网格外部服务(具体而言,位置为
MESH_EXTERNAL
的 ServiceEntry 资源)
规范化服务的定义
Cloud Service Mesh 通过读取与每个工作负载实例关联的 Kubernetes 配置资源的 service.istio.io/canonical-name
标签来确定规范化服务成员资格:
- 对于 Pod,标签位于 Kubernetes Pod 资源中
- 对于虚拟机,标签位于 Istio WorkloadEntry 资源中
- 对于外部服务,标签位于 Istio ServiceEntry 资源中
Canonical Services 与 Kubernetes 命名空间 并且不能跨越多个命名空间
自动添加标签规则
Cloud Service Mesh 会自动将基于 Pod 和虚拟机的工作负载 您无需执行任何操作。
您只需执行以下操作即可:
- 调整用户/读取者清晰度的标签
- 替换默认行为。
在 Kubernetes Pod 中自动添加标签
规范化服务侧重于 Kubernetes app.kubernetes.io/name
和 app
标签。请注意,前一个标签优先。
如果您在工作负载上使用这两个标签中的任意一个,则无需执行进一步操作。
在虚拟机中自动添加标签
如需在虚拟机上构建规范化服务,您必须在 Kubernetes API 服务器中配置 WorkloadEntry 资源,从而将虚拟机添加到服务网格。
手动添加标签
如需手动应用或替换规范化服务标签,请将 service.istio.io/canonical-name
标签应用到受支持的工作负载资源配置。
为了使外部服务被识别为规范化服务,您必须手动为适用的 ServiceEntry 添加标签。
在 Kubernetes Pod 中手动添加标签
如需使用 Deployment 一次部署多个 Pod,请在 PodTemplateSpec 上设置 service.istio.io/canonical-name
标签:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
spec:
replicas: 3
template:
metadata:
labels:
service.istio.io/canonical-name: my-service
spec:
containers:
...
如需为单个 Pod 的规范化服务添加标签,请将 service.istio.io/canonical-name
标签添加到 Pod 配置的 labels
部分:
apiVersion: v1
kind: Pod
metadata:
name: my-test-pod
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
手动为虚拟机添加标签
如需为单个虚拟机/WorkloadEntry 的规范化服务添加标签,请将 service.istio.io/canonical-name
标签添加到 WorkloadEntry 配置的“标签”部分:
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
name: my-vm-123
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
手动为外部服务添加标签
如需为单个外部服务/ServiceEntry 的规范化服务添加标签,请将 service.istio.io/canonical-name
标签添加到 ServiceEntry 配置的“标签”部分:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: example-com
namespace: my-namespace
labels:
service.istio.io/canonical-name: an-external-service
spec:
location: MESH_EXTERNAL
...