定義標準服務
注意: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/name 和 app 標籤。請注意,前一個標籤的優先順序較高。如果工作負載使用這兩個標籤,則無須採取進一步行動。
手動加上標籤
如要手動套用或覆寫標準服務標籤,請將 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
...