サービス ディスカバリと DNS

このページでは、Google Kubernetes Engine(GKE)がサービス ディスカバリとクラスタ DNS を実装する方法について説明します。

サービス ディスカバリ

Kubernetes でのサービス ディスカバリは、Service の IP アドレスにマッピングされた自動生成サービス名で実装されます。Service 名は my-svc.my-namespace.svc.cluster.local のように標準仕様に準拠しています。Pod は、example.com のような名前を使用して外部サービスにアクセスできます。Kubernetes での DNS の仕組みについては、Service と Pod の DNS をご覧ください。

GKE のクラスタ DNS

新しい Autopilot クラスタは Cloud DNS を使用します。DNS プロバイダは変更できません。

サービスを GKE 用 Service Directory に登録することもできます。

GKE には、kube-dns または Cloud DNS で使用できるオプションのアドオンとして NodeLocal DNSCache も用意されています。

kube-dns

kube-dns は Standard クラスタのデフォルト DNS プロバイダであり、1.25.9-gke.400 と 1.26.4-gke.500 より前のバージョンを実行している Autopilot クラスタ用の唯一の DNS プロバイダです。

kube-dns は、kube-dns Pod をクラスタ内のノードにスケジュールする Deployment として動作します。

Cloud DNS

Cloud DNS は、バージョン 1.25.9-gke.400 以降とバージョン 1.26.4-gke.500 以降を実行する Autopilot クラスタ用の唯一の DNS プロバイダです。

Cloud DNS は、kube-dns などのクラスタホスト型の DNS プロバイダを使用せずに、Pod と Service の DNS 解決を行います。Cloud DNS コントローラは、ClusterIP、ヘッドレス、外部名サービス用の Cloud DNS に Pod と Service の DNS レコードを自動的にプロビジョニングします。

Cloud DNS の構成方法については、GKE 向け Cloud DNS の使用をご覧ください。

NodeLocal DNSCache

NodeLocal DNSCache は、すべてのクラスタノードで DNS キャッシュ Pod をスケジュールする DaemonSet として実行されます。この DNS キャッシュにより、DNS ルックアップのレイテンシが改善され、DNS ルックアップ時間がより安定するようになります。また、kube-dns や Cloud DNS に対する DNS クエリの数を削減できます。

NodeLocal DNSCache の構成方法については、NodeLocal DNSCache の設定をご覧ください。

単一クラスタの外部にあるサービス ディスカバリ

単一クラスタのスコープ外でサービス ディスカバリを構成するには、次のいずれかの方法を使用します。

GKE 用 Service Directory

GKE 用 Service Directory は、すべての Kubernetes Deployment にわたって単一のサービスビューを提供します。Service Directory は、GKE と非 GKE の両方のサービスを 1 つのレジストリに登録できます。以下をお求めの場合、Service Directory が特に便利です。

  • Kubernetes アプリケーションと Kubernetes 以外のアプリケーションを相互に検出可能にするための単一レジストリ。
  • マネージド サービス ディスカバリ ツール。
  • 他のクライアントからアクセス可能なサービスのメタデータを保存する。
  • サービスレベルごとにアクセス権限を設定する。

Service Directory サービスは、DNS、HTTP、gRPC で解決できます。Service Directory は Cloud DNS と統合され、Service Directory 内のサービスに一致する Cloud DNS レコードを作成できます。

詳細については、GKE 用 Service Directory の構成をご覧ください。

/etc/resolv.conf

ClusterFirst DNS ポリシーを使用する Pod の場合、/etc/resolv.conf の値は、クラスタで有効になっている機能によって異なります。

GKE 向け Cloud DNS NodeLocal DNSCache /etc/resolv.conf
有効 有効 169.254.20.10
有効 無効 169.254.169.254
無効 有効 kube-dns サービスの IP アドレス
無効 無効 kube-dns サービスの IP アドレス

次のステップ

  • GKE 向け Cloud DNS の使用方法を確認する。
  • NodeLocal DNSCache を使用して、大量の DNS クエリを必要とするクラスタにスケーラブルな DNS 解決を提供する方法を学習する。