Service Directory の概要

Service Directory は、Cloud のデータ処理に関する追加条項に規定されている Google の義務の対象となるサービスです。

Service Directory は、環境にかかわらず、一貫した信頼性の高い方法でサービスを公開、検出、接続するための単一の場所です。 Service Directory は Google Cloud、マルチクラウド、 オンプレミス環境にあるサービスをサポートし、単一のプロジェクトで数千のサービスと エンドポイントにまでスケールアップできます。

Service Directory には次の機能があります。

Service Directory を使用する理由

アプリケーションが サービスを採用するにつれて、これらのサービスのエンドポイントが変更されるため、サービスの位置を解決することが難しくなります。ハイブリッド環境にデプロイされたサービスは、どちらも同じ命名システムを共有できないため、サービスを解決して接続することが困難になるという追加の障害が発生します。この問題を説明するために、次の例を考えてみましょう。

シンプルな API を構築していて、そのコードがほかのアプリケーションを呼び出す必要があるとします。エンドポイントの情報が固定されていれば、これらの場所をコードにハードコードしたり、小さな構成ファイルに保存したりしても問題はありません。 しかし、マイクロサービスやマルチクラウドでは、インスタンス、サービス、環境がすべて変わる可能性があるため、こういった問題を解決するのは非常に困難です。

ロードバランサを使用しない Service Directory(クリックして拡大)
変化するさまざまなサービス(クリックして拡大)

Service Directory を使用すると、すべてのサービスを 1 か所に登録し、HTTP、gRPC、DNS を使用して解決できます。

前の図をもう一度見てみましょう。今回は Service Directory を追加します。 次の図では、各サービス インスタンスが Service Directory に登録されています。 これらの登録は DNS に即座に反映され、実装や環境にかかわらず、HTTP/gRPC を使ってクエリできます。

ロードバランサを使用した Service Directory(クリックして拡大)
ロードバランサを使用した Service Directory(クリックして拡大)

App Engine や GKE などの Google Cloud プロダクト全体で機能するユニバーサル サービス名を作成できます。これらのサービスを DNS で利用できるようにすることができます。サービス アカウントのネットワーク、プロジェクト、IAM ロールに基づいて、サービスにアクセス制御を適用できます。

Service Directory を使うと、以下のような問題を解決できます。

  1. 相互運用性: Service Directory は、ユニバーサルなネーミング サービスで 、マルチクラウド、オンプレミスで動作します。 Google Cloudサービスの登録とエンドポイントの解決に使用するサービス名を維持しつつ、これらの環境間でサービスを移行することができます。
  2. サービス管理: Service Directory はマネージド サービスです。 高可用性、冗長性、スケーリング、および独自のサービス レジストリのメンテナンスの心配をする必要はありません。
  3. アクセス制御: Service Directory では、IAM を使って、誰がサービスを 登録でき、名前解決できるかを制御できます。Service Directory のロールをチーム、サービス アカウント、組織に割り当てます。
  4. 純粋な DNS の限界: DNS リゾルバは、TTL やキャッシュの観点から信頼性が低く、大きなレコードサイズに対応できず、ユーザーにメタデータを提供する簡単な方法も提供しません。Service Directory は DNS サポートに加え、サービスをクエリし解決するための API を HTTP と gRPC で提供しています。

Service Directory で Cloud DNS を使用する

Cloud DNS は、Google のインフラストラクチャ上で動作する、高速でスケーラブルかつ信頼性の高い ドメイン ネーム システム (DNS)サービスです。

一般公開 DNS ゾーンに加え、 Cloud DNS は 上のプライベート ネットワークのためのマネージドな内部 DNS ソリューションも提供しています Google Cloud. プライベート DNS ゾーン は、仮想マシン(VM)インスタンス、ロードバランサ、その他のリソースに内部で名前を付けることができます。これらのプライベート DNS ゾーンに対する DNS クエリは、プライベート ネットワークに限定されます。

次の図は、Service Directory のゾーンを使用して DNS ルックアップでサービス名を得られるようにする方法を示しています。

Service Directory での Cloud DNS の使用(クリックして拡大)
Service Directory で Cloud DNS を使用する(クリックして拡大)

個々のコンポーネントの概要:

  1. エンドポイントは、Service Directory API を使用して、Service Directory に直接登録されます。Service Directory には、 Google Cloud サービスとGoogle Cloud 以外のサービスの両方を登録できます。
  2. 外部、内部どちらのクライアントでも、https://servicedirectory.googleapis.com でサービスを検索できます。
  3. DNS リクエストを有効にするには、Service Directory 名前空間に関連付けられた Service Directory ゾーンを Cloud DNS に作成します。
  4. 内部クライアントは、DNS、HTTP、gRPC を使用してこのサービスを解決できます。 外部の(プライベート ネットワーク上にない)クライアントは HTTP か gRPC を使ってサービス名を解決する必要があります。

構成の例

DNS 経由でサービスを公開する方法

次の図は、Service Directory でマイクロサービス アーキテクチャをモデル化し、DNS を使用して利用できるようにする方法を示しています。Service Directory はサービスとエンドポイントを完全に維持しますが、限定公開ゾーンは Cloud DNS にあります。

DNS 経由でサービスを公開する(クリックして拡大)
DNS 経由でサービスを公開する(クリックして拡大)

この図(左側)では、payments サービスが、名前 backend-namespace、リージョン us-east1、プロジェクト gcp-project の名前空間に登録されています。この名前空間は、限定公開ゾーン example.com にリンクされています。

DNS ルックアップを行うために、クライアントは SRV レコード をリクエストします。これは、ドメイン名 _payments._tcp.payments.example.com の支払いサービスのエンド 101}ポイントのポート番号とアドレス レコードに解決されます。

次のステップ

  • Service Directory 名前空間を設定し、名前空間にサービスを作成して、サービスにエンドポイントを割り当てる方法については、Service Directory を構成するをご覧ください。
  • 既存の名前空間を活用する Service Directory ゾーンを作成する方法については、Service Directory の DNS ゾーンを構成するをご覧ください。
  • DNS を使用して既存の Service Directory ゾーンにクエリを行う方法については、DNS を使用したクエリをご覧ください。
  • Service Directory の使用時に発生する可能性のある一般的な問題の解決策については、トラブルシューティングをご覧ください。 。 Google Cloud