1.18.10. フェデレーションメッシュへの参加
ServiceMeshPeer
リソースを作成して、2 つのメッシュ間のフェデレーションを宣言します。ServiceMeshPeer
リソースは、2 つのメッシュ間のフェデレーションを定義し、これを使用してピアメッシュの検出設定、ピアメッシュへのアクセス、および他のメッシュのクライアントの検証に使用される証明書を定義します。
メッシュは 1 対 1 でフェデレーションされるため、ピアの各ペアでは、他のサービスメッシュへのフェデレーション接続を指定する ServiceMeshPeer
リソースのペアが必要です。たとえば、red
および green
という名前の 2 つのメッシュには 2 つの ServiceMeshPeer
ファイルが必要です。
-
Red-mesh-system で、Green メッシュの
ServiceMeshPeer
を作成します。 -
Green-mesh-system で、Red メッシュの
ServiceMeshPeer
を作成します。
red
、blue
および green
という名前の 3 つのメッシュのフェデレーションには 6 つの ServiceMeshPeer
ファイルが必要になります。
-
Red-mesh-system で、Green メッシュの
ServiceMeshPeer
を作成します。 -
Red-mesh-system で、Blue メッシュの
ServiceMeshPeer
を作成します。 -
Green-mesh-system で、Red メッシュの
ServiceMeshPeer
を作成します。 -
Green-mesh-system で、Blue メッシュの
ServiceMeshPeer
を作成します。 -
Blue-mesh-system で、Red メッシュの
ServiceMeshPeer
を作成します。 -
Blue-mesh-system で、Green メッシュの
ServiceMeshPeer
を作成します。
ServiceMeshPeer
リソースの設定には、以下が含まれます。
- 検出およびサービス要求に使用される他のメッシュの Ingress ゲートウェイのアドレス。
- 指定のピアメッシュとの対話に使用されるローカル ingress および egress ゲートウェイの名前。
- このメッシュへの要求の送信時に他のメッシュで使用されるクライアント ID。
- 他のメッシュで使用される信頼ドメイン。
-
ConfigMap
の名前。これには、他のメッシュで使用される信頼ドメインのクライアント証明書の検証に使用するルート証明書が含まれます 。
以下の例では、red-mesh
の管理者は green-mesh
でフェデレーションを設定します。
Red-mesh の ServiceMeshPeer リソースの例
kind: ServiceMeshPeer apiVersion: federation.maistra.io/v1 metadata: name: green-mesh namespace: red-mesh-system spec: remote: addresses: - ingress-red-mesh.green-mesh-system.apps.domain.com gateways: ingress: name: ingress-green-mesh egress: name: egress-green-mesh security: trustDomain: green-mesh.local clientID: green-mesh.local/ns/green-mesh-system/sa/egress-red-mesh-service-account certificateChain: kind: ConfigMap name: green-mesh-ca-root-cert
パラメーター | 説明 | 値 |
---|---|---|
metadata: name: | このリソースがフェデレーションを設定するピアメッシュの名前。 | 文字列 |
metadata: namespace: | このメッシュのシステム namespace (Service Mesh コントロールプレーンのインストール先)。 | 文字列 |
spec: remote: addresses: | このメッシュからの要求に対応するピアメッシュの Ingress ゲートウェイのパブリックアドレス一覧。 | |
spec: remote: discoveryPort: | アドレスが検出要求を処理するポート。 | デフォルトは 8188 です。 |
spec: remote: servicePort: | アドレスがサービス要求を処理するポート。 | デフォルトは 15443 です。 |
spec: gateways: ingress: name: |
ピアメッシュからの受信要求に対応するこのメッシュの Ingress の名前。例: | |
spec: gateways: egress: name: |
ピアメッシュに送信される要求に対応するこのメッシュ上の egress の名前。例: | |
spec: security: trustDomain: | ピアメッシュで使用される信頼ドメイン。 | <peerMeshName>.local |
spec: security: clientID: | このメッシュの呼び出し時にピアメッシュが使用するクライアント ID。 | <peerMeshTrustDomain>/ns/<peerMeshSystem>/sa/<peerMeshEgressGatewayName>-service-account |
spec: security: certificateChain: kind: ConfigMap name: |
ピアメッシュがこのメッシュに提示したクライアント証明書の検証に使用されるルート証明書が含まれるリソースの種類 (例: ConfigMap) と名前。証明書が含まれる Config Map エントリーの鍵は | kind: ConfigMap name: <peerMesh>-ca-root-cert |
1.18.10.1. ServiceMeshPeer リソースの作成
前提条件
- 2 つ以上の OpenShift Container Platform 4.6 以降のクラスター。
- クラスターのネットワーク設定が完了している。
- 生の TLS トラフィックをサポートするように、フェデレーションゲートウェイに関連付けられたサービスをサポートするロードバランサーを設定する必要があります。
-
各クラスターには、フェデレーションデプロイをサポートするようにバージョン 2.1
ServiceMeshControlPlane
が設定されている必要があります。 -
cluster-admin
ロールを持つアカウントがある。
CLI からの手順
以下の手順に従って、コマンドラインから ServiceMeshPeer
リソースを作成します。以下の例では、red-mesh
が green-mesh
のピアリソースを作成しています。
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform CLI にログインします。以下のコマンドを入力します。次に、プロンプトが表示されたら、ユーザー名とパスワードを入力します。$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
コントロールプレーンをインストールしたプロジェクト (例:
red-mesh-system
) に切り替えます。$ oc project red-mesh-system
フェデレーションする 2 つのメッシュについて以下の例をもとに、
ServiceMeshPeer
ファイルを作成します。Red-mesh から green-mesh への ServiceMeshPeer リソースのサンプル
kind: ServiceMeshPeer apiVersion: federation.maistra.io/v1 metadata: name: green-mesh namespace: red-mesh-system spec: remote: addresses: - ingress-red-mesh.green-mesh-system.apps.domain.com gateways: ingress: name: ingress-green-mesh egress: name: egress-green-mesh security: trustDomain: green-mesh.local clientID: green-mesh.local/ns/green-mesh-system/sa/egress-red-mesh-service-account certificateChain: kind: ConfigMap name: green-mesh-ca-root-cert
以下のコマンドを実行してリソースをデプロイします。ここで、
red-mesh-system
はシステムの namespace に置き換え、servicemeshpeer.yaml
には編集したファイルへのフルパスが含まれます。$ oc create -n red-mesh-system -f servicemeshpeer.yaml
red メッシュと green メッシュ間の接続確立を確認するには、red-mesh-system namespace の green-mesh
ServiceMeshPeer
のステータスを調べます。$ oc -n red-mesh-system get servicemeshpeer green-mesh -o yaml
Red-mesh と green-mesh 間の ServiceMeshPeer 接続の例
status: discoveryStatus: active: - pod: istiod-red-mesh-b65457658-9wq5j remotes: - connected: true lastConnected: "2021-10-05T13:02:25Z" lastFullSync: "2021-10-05T13:02:25Z" source: 10.128.2.149 watch: connected: true lastConnected: "2021-10-05T13:02:55Z" lastDisconnectStatus: 503 Service Unavailable lastFullSync: "2021-10-05T13:05:43Z"
status.discoveryStatus.active.remotes
フィールドは、ピアメッシュ (この例では Green メッシュ) が現在のメッシュ (この例では赤のメッシュ) の istiod に接続されていることを示します。status.discoveryStatus.active.watch
フィールドは、現在のメッシュの istiod がピアメッシュで istiod に接続されていることを示します。green-mesh-system
でred-mesh
という名前のservicemeshpeer
を確認すると、Green メッシュの観点からの 2 つの同じ接続に関する情報が表示されます。2 つのメッシュ間の接続が確立されていない場合には、
ServiceMeshPeer
ステータスは、status.discoveryStatus.inactive
フィールドにこれを示します。接続に失敗する理由については、Istiod ログ、ピアの egress トラフィックを処理する egress ゲートウェイのアクセスログ、およびピアメッシュの現在のメッシュの ingress トラフィックを処理する ingress ゲートウェイを調べてください。
たとえば、red メッシュが green メッシュに接続できない場合は、以下のログを確認します。
- red-mesh-system の istiod-red-mesh
- red-mesh-system の Egress-green-mesh
- green-mesh-system の ingress-red-mesh