1. ホーム
  2. kubernetes

[解決済み] ヘッドレスサービスとは何か、何をするのか、何を達成するのか、そしてその正当な使用例とは何か?

2022-03-11 04:07:05

質問

Kubernetesについて書かれたいくつかの本から、いくつかの文章を読みました。 ドキュメントにあるヘッドレスサービスに関するページ . でも、実際に何をするのか、なぜそれを使うのか、まだよくわかりません。どなたか、この方法について、また、この方法が何をもたらすのか、そして、なぜこの方法を使うのか、よく理解されている方はいらっしゃいますか?

どのように解決するのですか?

まあ、ある程度の理論が必要なんでしょうね。公式ドキュメントを含む多くの説明がインターネット上にありますが、私はMarco Luksaが最もうまく説明したと思っています。

<ブロッククオート

サービスへの各接続は、ランダムに選択された1つの バッキングポッドです。しかし、クライアントがこれらのポッドすべてに接続する必要がある場合はどうでしょうか。 ポッド バッキングポッド自体が、すべてのポッドに接続する必要がある場合はどうでしょう。 他のバッキングポッド サービスを通して接続するのは明らかに ということです。どうすればいいのでしょうか?

クライアントがすべてのポッドに接続するためには、IP を使用します。一つの方法として、クライアントが Kubernetes APIサーバーからポッドとそのIPアドレスの一覧を取得する。 しかし、APIコールを使用することで アプリがKubernetesに依存しないため、APIサーバーを使用することは理想的ではありません。

幸いなことに、KubernetesではクライアントがDNSを通じてポッドのIPを発見することができます。 ルックアップします。通常、あるサービスに対してDNSルックアップを実行すると、DNS サーバーは、サービスのクラスタIPという1つのIPを返す。しかし、もしあなたが Kubernetesは、自分のサービスにクラスタIPを必要としない(これを行うには、次のようにします。 サービス仕様でclusterIPフィールドをNoneに設定することで可能です。) DNSサーバーは単一のサービスではなく、ポッドのIPを返します。 IPを使用します。 DNSサーバーは単一のDNS Aレコードを返す代わりに、以下のようになります。 のIPを指す複数のAレコードを返します。 その時点でサービスを支えている個々のポッド。クライアントは したがって、単純なDNSのAレコード検索を行い、すべての ポッドで構成されています。クライアントはその の情報を使って、1つ、多数、またはすべてに接続することができます。

サービス仕様のclusterIPフィールドをNoneに設定すると、そのサービスは KubernetesはこのサービスにクラスタIPを割り当てないため、サービスはヘッドレスになります。 クライアントがそのバックのポッドに接続できるようにします。

Kubernetes in Action" by Marco Luksa