定義標準服務

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

標準服務是一組導入相同服務和 API 的工作負載。對於支援的工作負載類型,Cloud Service Mesh 會根據 Kubernetes API 伺服器的現有資訊,自動建立 Canonical Service 資源。本頁面說明自動定義標準服務的標籤,以及如何手動調整服務的範圍。目前支援的工作負載執行個體類型如下:

  • Kubernetes Pod (包括透過 Kubernetes 部署、Kube Run 服務等)
  • 虛擬機器執行個體
  • 服務網格外部服務 (具體來說,是位置為 MESH_EXTERNAL 的 ServiceEntry 資源)

標準服務的定義

Cloud Service Mesh 會讀取與每個工作負載例項相關聯的 Kubernetes 設定資源上的 service.istio.io/canonical-name label,藉此判斷 Canonical Service 成員資格:

  • 對於 Pod,標籤位於 Kubernetes Pod 資源中
  • 針對 VM,則是 Istio WorkloadEntry 資源中的標籤
  • 如為外部服務,標籤會位於 Istio ServiceEntry 資源中

Canonical 服務與相關聯的工作負載例項具有相同的 Kubernetes 命名空間,且無法跨越命名空間。

自動標記規則

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

  • 調整標籤,讓使用者/讀者更清楚
  • 覆寫預設行為。

在 Kubernetes Pod 中自動標示

Canonical Services 主要著重於 Kubernetes app.kubernetes.io/nameapp 標籤。請注意,前者標籤的優先順序較高。如果您在工作負載中使用這兩個標籤中的任一標籤,則無須採取進一步行動。

在虛擬機器中自動加上標籤

如要在 VM 上建構 Canonical 服務,您必須在 Kubernetes API 伺服器中設定 WorkloadEntry 資源,將 VM 新增至服務網格。

手動標示

如要手動套用或覆寫標準服務標籤,請將 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:
  ...

手動標示虛擬機器

如要為單一 VM/WorkloadEntry 的 Canonical Service 加上標籤,請在 WorkloadEntry 設定的「labels」部分新增 service.istio.io/canonical-name 標籤:

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 的標準服務加上標籤,請在 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
  ...

後續步驟