アーキテクチャと概念
サービス・メッシュは、アプリケーション・コードとともに追加されたインフラストラクチャ・レイヤーで、セキュリティ、トラフィック制御および可観測性機能をアプリケーションに提供します。
サービス・メッシュの仕組み
次の図に示すように、サービス・メッシュは、管理対象コントロール・プレーンから構成情報を受け取る各マイクロサービスとともにプロキシをデプロイすることで実装されます。メッシュはプロキシを使用して、マイクロサービス・アプリケーションのかわりに受信および送信リクエストを実行します。この構成により、サービス・メッシュのセキュリティ、トラフィック制御および可観測性機能が有効になります。専用イングレス・ゲートウェイ・リソースは、メッシュへのイングレス・トラフィックを管理します。

前述の例の図は、2つのサービスがメッシュで囲まれているサービス・メッシュを示す概要レベルの図を示しています。各サービスはプロキシに接続されます。プロキシは、各サービスに受信および送信トラフィックをもたらします。メッシュからの送信トラフィックを許可するには、アクセス ポリシーが必要です。

図の灰色の四角形のボックスは、アプリケーションの仮想デプロイメントを表します。名前付き仮想デプロイメントには、製品ページ、詳細、レビューv1からv3、および評価が含まれます。
上の図は、サービス・メッシュにデプロイされたBookInfoサンプル・アプリケーションを示しています。イングレス・トラフィックは、イングレス・ゲートウェイおよびイングレス・ゲートウェイ・ルート表を介してメインProduct Pageサービスにルーティングされます。レビュー・サービスの様々なバージョンは、そのサービスの仮想デプロイメントを表します。アクセス・ポリシーは、サービス間の通信を決定するために設定されます。
Service Meshリソースの概要
実際には、サービス・メッシュは、アプリケーションのキー・コンポーネントに論理的にマップされるリソースで構成されます。メッシュは、アプリケーション内のマイクロサービスを表すすべてのメッシュ・リソースを含むトップレベルのリソースです。仮想サービス、イングレス・ゲートウェイおよびアクセス・ポリシーはメッシュに含まれています。
仮想サービスは、サービス・メッシュ内のサービスの論理表現です。仮想サービスには、仮想デプロイメント、仮想デプロイメント・バインディングおよび仮想サービス・ルート表リソースが含まれる場合があります。仮想サービスの異なるバージョンは、仮想デプロイメントを使用して定義されます。特定の仮想デプロイメントにトラフィックをルーティングするように仮想サービス・ルート表を定義できます。仮想デプロイメント・バインディングは、仮想デプロイメントをアプリケーション・クラスタ内のポッドに関連付けるために生成されます。
イングレス・ゲートウェイは、メッシュへのイングレス・トラフィックを管理します。たとえば、TLS (Transport Layer Security)を使用して、すべての受信/送信トラフィックで暗号化を有効にするようにセキュリティを構成できます。イングレス・ゲートウェイには、イングレス・ゲートウェイ・デプロイメントおよびイングレス・ゲートウェイ・ルート表が含まれる場合があります。イングレス・ゲートウェイ・ルート表は、トラフィックを仮想サービスにルーティングするルールを定義します。イングレス・ゲートウェイ・デプロイメントでは、アプリケーション・クラスタにプロキシ・ソフトウェアをデプロイするための構成情報が生成されます。最後に、アクセス・ポリシーによって、仮想サービスと外部サービス間の通信用のアクセス・ルールが定義されます。
次の図では、各サービス・メッシュ・リソース間の関係を定義します。

上の図は、3つのコンポーネント(仮想サービス、イングレス・ゲートウェイおよびアクセス・ポリシー)を含むサービス・メッシュを示しています。仮想サービスには、仮想デプロイメントと仮想サービス・ルート表の2つのコンポーネントがあります。イングレス・ゲートウェイ・コンポーネントには、イングレス・ゲートウェイのルート表コンポーネントがあります。
階層内の各リソースには、子リソースとの1対多の関係があります。
サービス・メッシュの概念
前述の概要では、この項では、サービス・メッシュの各リソースについて詳しく説明します。次に、サービス・メッシュで使用されるリソースおよび概念の詳細リストを示します。
- メッシュ
-
メッシュは、その中に存在するサービス間のアプリケーション・トラフィックの論理的な境界を表す最上位コンテナ・リソースです。サービス・メッシュのリソースを使用すると、メッシュに送られるトラフィックを管理したり、メッシュで使用可能なサービスを定義したり、定義したサービス間のトラフィックを管理できます。メッシュを管理するには、次のリソースが使用されます。
- 仮想サービス
- 受信ゲートウェイ
- アクセス・ポリシー
サービス・メッシュの詳細は、次を参照してください。
- 仮想サービス
仮想サービスは、サービス・メッシュ内のサービスの論理表現です。各仮想サービスには、サービス・ホスト名、TLS証明書(クライアントおよびサーバー)および認証局バンドル用の独自の構成があります。仮想サービスは、仮想デプロイメントを介して複数のバージョンをサポートします。また、仮想サービスには、仮想サービスのイングレス・トラフィックを特定のバージョンのサービスにルーティングするルート表も含まれています。
仮想サービスには次のものが含まれる場合があります。
- 仮想デプロイメント
- 仮想サービスのルート表
- 仮想デプロイメント・バインディング
仮想サービスの詳細は、次を参照してください。
- 仮想デプロイメント
-
仮想デプロイメントは、メッシュ内の仮想サービスのバージョンです。概念的には、特定のバージョンの実際のマイクロサービスを実行しているインスタンス/ポッドのグループにマップされます。各仮想デプロイメントには、サービス検出タイプ、ホスト名、ネットワーク・プロトコルおよびロギングのための独自の構成があります。
仮想デプロイメントの詳細は、次を参照してください。
- 仮想サービスのルート表
仮想サービス・ルート表には、仮想サービスへのイングレス・トラフィックの管理に使用されるルーティング・ルールのリストが含まれます。ルート・ルールは、仮想サービスの特定の仮想デプロイメントにリクエストをルーティングします。ルート・ルールにより、開発者はプロトコルおよびパスに基づいてトラフィックを分割できます。
仮想サービス・ルート表の詳細は、次を参照してください:
- 仮想デプロイメント・バインディング
仮想デプロイメント・バインディングは、Kubernetesクラスタ内のポッドをメッシュ内の仮想デプロイメントに関連付けます。このバインディング・リソースにより、プロキシ・ソフトウェアの自動サイドカー・インジェクションおよびポッド検出が可能になります。プロキシソフトウェアの自動バージョンアップグレードは、構成マップで有効です。
仮想デプロイメント・バインディングの詳細は、次を参照してください。
- 受信ゲートウェイ
イングレス・ゲートウェイを使用すると、メッシュの外部にあるリソースはメッシュ内のリソースと通信できます。イングレス・ゲートウェイは、メッシュへの受信HTTP/TCP接続を受信するサービス・メッシュのエッジに配置されます。メッシュへのインバウンド トラフィックのホスト名とリスニング ポートを指定できます。また、どのプロトコル(HTTP、TCPなど)か、およびTLSでセキュアな接続が必要かどうかを選択できます。イングレス・ゲートウェイは、インバウンド接続の暗号化および認証を提供するmTLSもサポートしています。暗号化された接続オプションをOracle Cloud Infrastructure証明書サービスで構成して、証明書を自動的に管理できます。最後に、パススルーを指定して、仮想サービスが接続オプションを処理できるようにするオプションがあります。
イングレス・ゲートウェイは、プロトコル、パスおよびポートに基づく柔軟なルーティング・ポリシーを提供します。ログおよびメトリックのオプションにより、外部リクエストに対する可視性が提供されます。
イングレス・ゲートウェイの詳細は、次を参照してください:
- Ingress Gatewayルート表
各イングレス・ゲートウェイには、受信リクエストのルールを指定し、メッシュ内の仮想サービスに送信する1つ以上のルート表を含めることができます。ルールはプロトコルとパスに基づきます。HTTPプロトコルとパスが指定されると、gRPCヘッダー、パスリライティング、およびホスト名リライティングにルーティングオプションが含まれます。宛先仮想サービスの各ルールおよび重みに優先順位を割り当てることができます。
イングレス・ゲートウェイのルート表の詳細は、次を参照してください:
- イングレス・ゲートウェイ・デプロイメント
イングレス・ゲートウェイの作成後、イングレス・ゲートウェイとして構成されたアプリケーション・クラスタにプロキシ・ソフトウェアをデプロイできます(Kubernetesイングレス・リソースとは異なります)。この目的でイングレス・ゲートウェイ・デプロイメントが作成されます。デプロイメントでは、イングレス・ゲートウェイをOCI Operator for Kubernetesにバックアップするデプロイメントおよびポッドの管理がオフロードされます。イングレス・ゲートウェイのデプロイメントは、Kubernetesベースのワークロードにのみ必要です。デプロイメントはクラスタに対してローカルであり、サービス・メッシュ制御プレーンにレプリケートされません。
ノート
OCI Operator for Kubernetesは、ユーザーがKubernetes APIを介してOCIリソースを管理できるようにするオープン・ソースのKubernetesアドオンです。OCI Operator for Kubernetesにより、Kubernetes環境およびKubernetesツールを使用して、OCIリソースを簡単に作成、管理、および接続できます。OCI Operator for Kubernetesは、OCI Kubernetes Engine (OKE)またはOCIの外部で実行されているKubernetesクラスタで使用できます。イングレス・ゲートウェイのデプロイメントの詳細は、次を参照してください。
- アクセス・ポリシー
アクセス・ポリシーは、メッシュ内の仮想サービスにアクセス・ルールを設定します。デフォルトでは、アクセス・ポリシーが存在しない場合、すべてのリクエストは
deny-all
になります。メッシュ・ネットワークでアクセス・ポリシーを使用すると、管理者はサービスが相互に通信する方法を制御できます。アクセス・ポリシーは、トラフィックの3つのカテゴリで機能します。- 内部メッシュ・トラフィック:メッシュ内の仮想サービス間で流れるリクエスト。
- イングレス・トラフィック:仮想サービスがメッシュ外のクライアントから受信するリクエスト。
- エグレス・トラフィック:仮想サービスがメッシュ外のサービス/アプリケーションに対して行うリクエスト。
アクセス・ポリシーの詳細は、次を参照してください。
- 内部メッシュ トラフィック
デフォルトでは、メッシュは仮想サービス間のトラフィックに対して「すべてのトラフィックの拒否」ポリシーを適用します。仮想サービスは相互にコールできず、宛先プロキシ・インスタンスはリクエストを拒否します。仮想サービス間のトラフィックを許可するには、ポリシー・ステートメントが必要です。ポリシーの作成後、次のルールが評価されます。
- リクエストに一致するソースおよび宛先仮想サービスにポリシーが存在する場合は、リクエストを許可します。
- アクセス・ポリシーが存在しない場合は、リクエストを拒否します。
- イングレスおよびエグレス・トラフィック
外部サービスは、メッシュ内でサービスを起動するクライアントとサービスのセットです。これらの外部サービスは、別のサービス・メッシュでホストされるアプリケーション、またはサービス・メッシュの一部ではないスタンドアロン・アプリケーションである可能性があります。クライアント・プロキシの観点では、これらのサービスは同じサービス・メッシュ内にありません。
デフォルトでは、サービス・メッシュはすべての外部サービスに対するリクエストを拒否します。メッシュ内のトラフィックを許可するには、イングレスおよびエグレス・トラフィックを許可するポリシー・ステートメントを追加します。ルール評価は、前述の定義で説明したルールと同じです。
サービス・メッシュ・プロセス
Kubernetesクラスタへのデプロイメント後、クラスタはサービス・メッシュの作業に不可欠な3つのプロセスを実行します。これらのプロセスには、適切な機能を行うための権限が必要です。
- メッシュKubernetes演算子: OCI Service Operator for Kubernetesには、メッシュ・カスタム・リソースのライフサイクルを管理するメッシュKubernetes演算子が含まれています。Kubernetesオペレータは、コントロール・プレーン操作の実行も担当します。
- メッシュ・プロキシ: メッシュ・プロキシは、アプリケーション・コンテナの横で実行され、サービス・メッシュ・バックエンドに接続して、トラフィックのルーティング、セキュリティなどの様々な構成をダウンロードします。
- ロギング・エージェント: サービス・メッシュは、ロギング・エージェントによって達成される観測性の豊富なアクセス・ログを提供します。ロギング・エージェントはロギング・バックエンドに接続してログを公開します。