定義標準服務

注意:Cloud Service Mesh 1.6.8 以上版本會自動支援標準服務。

標準服務是一組工作負載,可實作相同的服務和 API。對於支援的工作負載類型,Cloud Service Mesh 會根據 Kubernetes API 伺服器中的現有資訊,自動建立 Canonical Service 資源。本頁面說明系統會自動定義哪些標籤為標準服務,以及如何手動調整服務的界線。

支援的工作負載執行個體類型如下:

  • Kubernetes Pod (包括透過 Kubernetes Deployment、Kube Run Service 等)
  • 網格外部服務 (具體來說,是位置為 MESH_EXTERNAL 的 ServiceEntry 資源)

定義標準服務的內容

Cloud Service Mesh 會讀取與每個工作負載執行個體相關聯的 Kubernetes 設定資源上的 service.istio.io/canonical-name 標籤,判斷標準服務成員資格:

  • 如果是 Pod,標籤位於 Kubernetes Pod 資源中
  • 如為外部服務,標籤位於 Istio ServiceEntry 資源中

標準服務與相關聯的工作負載執行個體具有相同的 Kubernetes 命名空間,且無法跨越命名空間。

自動標記規則

Cloud Service Mesh 會自動將工作負載分組為標準服務,您不必採取任何行動。你只需要採取下列行動:

  • 調整標籤,讓使用者或讀者更容易瞭解
  • 覆寫預設行為。

Kubernetes Pod 中的自動標記

標準服務的重點是 Kubernetes app.kubernetes.io/nameapp 標籤。請注意,前一個標籤的優先順序較高。如果工作負載使用這兩個標籤,則無須採取進一步行動。

手動加上標籤

如要手動套用或覆寫標準服務標籤,請將 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 的標準服務加上標籤,請在 Pod 設定的 labels 區段中新增 service.istio.io/canonical-name 標籤:

apiVersion: v1
kind: Pod
metadata:
  name: my-test-pod
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: my-service
spec:
  ...

手動標記外部服務

如要為單一外部服務/ServiceEntry 加上 Canonical Service 標籤,請在 ServiceEntry 設定的「labels」區段中新增 service.istio.io/canonical-name 標籤:

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
  ...

後續步驟