正規サービスの定義
注: 正規サービスは 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
...