サービスのアーキテクチャ

Last reviewed 2024-04-19 UTC

Kubernetes Service は、一連の Pod を単一のエンティティとして公開できる抽象化機能です。Service とは、Kubernetes クラスタでコンテナ化されたアプリケーションを公開して管理するための基本的な構成要素です。このブループリントの各 Service は、Namespace、ID、Service の公開、Service 間の通信を考慮した標準化された方法で設計されています。

Namespace

各 Namespace は、Pod、Service、Deployment など、独自のリソースセットを持ちます。Namespace を使用すると、アプリケーションを整理し、互いに分離できます。ブループリントでは、Namespace を使用して目的別に Service をグループ化します。たとえば、すべてのフロントエンド サービス用の Namespace とバックエンド サービス用の Namespace を作成できます。これにより、Service の管理とアクセスの制御が容易になります。

Service の公開

Service は、GKE Gateway Controller を介してインターネットに公開されます。GKE Gateway Controller は、マルチクラスタ、マルチリージョン構成Cloud Load Balancing を使用してロードバランサを作成します。Cloud Load Balancing は、Google のネットワーク インフラストラクチャを使用して、Service に低レイテンシでアクセスできるようにするエニーキャスト IP アドレスを提供します。Service へのクライアント アクセスは HTTPS 接続を介して行われ、クライアントの HTTP リクエストは HTTPS にリダイレクトされます。ロードバランサは、Certificate Manager を使用して一般公開証明書を管理します。Service は Cloud Armour と Cloud CDN によってさらに保護されます。次の図は、Service がインターネットに公開される方法を示しています。

インターネットに公開されているブループリント Service。

Anthos Service Mesh

このブループリントでは、Anthos Service Mesh を使用して、Service 間のすべての通信の相互認証と認可を行います。この Deployment の場合、Anthos Service Mesh は、ピアを認証する TLS 証明書を発行するために CA Service を使用し、承認されたクライアントのみが Service にアクセスできるようにします。認証に相互 TLS(mTLS)を使用すると、Service 間のすべての TCP 通信が転送中に暗号化されます。サービス メッシュに向かう Service の上り(内向き)トラフィックの場合、ブループリントは GKE Gateway Controller を使用します。

分散 Service

分散 Service は、複数のクラスタの同じ Namespace で実行される Kubernetes Service を抽象化したものです。1 つ以上の GKE クラスタが使用できない場合でも、残りの正常なクラスタが負荷を処理できる限り、分散 Service は引き続き使用できます。クラスタ間の分散 Service を作成するために、Anthos Service Mesh は、環境内のすべてのクラスタでアプリケーションの Service 間にレイヤ 4 とレイヤ 7 の接続を提供します。この接続により、複数のクラスタ上の Kubernetes Service が単一の論理サービスとして機能できるようになります。リージョンの障害によりリージョン内のトラフィックを発生させられない場合にのみ、クラスタ間のトラフィックが別のリージョンにルーティングされます。

Service ID

GKE で実行される Service には、ID が関連付けられています。このブループリントでは、Kubernetes サービス アカウントGoogle Cloud サービス アカウントとして機能するように Workload Identity を構成しています。同じ環境内の分散 Service の各インスタンスは共通の ID を持っているため、権限の管理が簡素化されます。Google Cloud APIs にアクセスすると、Kubernetes サービス アカウントとして実行される Service は、Google Cloud サービス アカウントとして自動的に認証されます。各 Service には、Service の運用に必要な最小限の権限しか付与されていません。

次のステップ