正規サービスの定義

注: 正規サービスは Cloud Service Mesh バージョン 1.6.8 以降で自動的にサポートされます。

正規サービスは、同じサービスと API を実装するワークロードのグループです。サポートされているワークロード タイプの場合、Cloud Service Mesh が Kubernetes API サーバーの既存の情報に基づいて、正規サービスのリソースを自動的に作成します。このページでは、正規サービスを自動的に定義するラベルと、サービスの境界を手動で調整する方法について説明します。 現在サポートされているワークロード インスタンスのタイプは次のとおりです。

  • Kubernetes Pod(Kubernetes Deployment や Kube Run Services などによるものを含む)
  • 仮想マシン インスタンス
  • メッシュ外部サービス(具体的には、ロケーションが MESH_EXTERNAL の ServiceEntry リソース)

正規サービスの定義

Cloud Service Mesh は、各ワークロード インスタンスに関連付けられた Kubernetes 構成リソースの service.istio.io/canonical-name ラベルを読み取ることによって、正規のサービスのメンバーシップを判断します。

  • Pod の場合、ラベルは Kubernetes Pod リソースにあります。
  • VM の場合、ラベルは Istio WorkloadEntry リソースにあります。
  • 外部サービスの場合、ラベルは Istio ServiceEntry リソースにあります。

正規サービスには、関連付けられているワークロード インスタンスと同じ Kubernetes Namespace があり、名前空間をまたがることはできません。

自動ラベル付けルール

Cloud Service Mesh では、ユーザーが操作しなくても Pod ベースと VM ベースのワークロードが自動的に正規サービスに分類されます。次の操作のみ必要です。

  • ユーザー / リーダーを明確にするためのラベルの調整
  • デフォルトの動作のオーバーライド

Kubernetes Pod での自動ラベル付け

正規サービスは Kubernetes の app.kubernetes.io/name ラベルと app ラベルを中心にしています。前者のラベルが優先されます。 ワークロードでこれら 2 つのラベルのいずれかを使用する場合、特に作業は必要ありません。

仮想マシンの自動ラベル付け

VM で正規サービスをビルドするには、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 の正規サービスにラベルを付けるには、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
  ...

次のステップ