web-dev-qa-db-ja.com

ポッドにKubernetes DNSを使用する方法

GKEでは、ノードでkube-dnsが実行されており、Dockerコンテナーを確認できます。

私はServicesにアクセスできます。これは、負荷分散が完全に適切なソリューションであるこれらすべてのアプリケーションに最適ですが、DNSを使用してアクセスする方法個々のポッド?

APIで特定のポッドを検索できることはわかっていますが、hostsファイルを自分で更新し、ポッドリストを監視し続ける必要があります。 DNSは私のためにそれを行うことになっているので、ポッド内でどのように使用されるのですか?

Kubernetesのドキュメントでは、DNS情報をkubeletに渡す必要があると記載されていますが、私が知っているGKEでDNS情報にアクセスすることはできません。

一部のサービス(特にZookeeper)は他のノードを独自に認識しており、ホスト名(ポッド名)でそれらに接続しようとしますが、hostsファイルを自分で更新しないと失敗します。そのために統合DNSサービスを使用したいと思います。

これを行う方法に関するガイダンスをいただければ幸いです。

ありがとう

13
MrE

[〜#〜]更新[〜#〜]

ドキュメントによると、形式は次のとおりです。

_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local

こちらの関連​​ドキュメントをご覧ください: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods

元の回答:

この日付の時点では、これは実際には不可能です...しかし、Kubernetesチームによって検討されています。

この問題を参照してください: https://github.com/kubernetes/kubernetes/issues/13552

[〜#〜]更新[〜#〜]

2015年9月以降、ポッドでDNSを使用できます。PRを参照してください: https://github.com/kubernetes/kubernetes/pull/13759

要するに:

これにより、ポッドdnsが<podIP>.<namespace>.pod.<clusterSuffix>の形式で提供されます。現在は無効にできますが、すべてのポッドに対してオンまたはオフになっています。

6
MrE

Kubernetesのステートフルセットのサポートでは、サービス名を関連付け、サービス名によってポッドDNS名を定義します。

Zkデーモンセットとzkサービスを作成する場合、zkデーモンセットの最初のポッドのDNS名はzk-0。$(namespace).svc.cluster.localです。

詳細は以下を参照してください: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

重要:サービスmustは、「 headless 」である必要があります。つまり、_.spec.clusterIP_ must be None

2
jolestar