GKEでは、ノードでkube-dnsが実行されており、Dockerコンテナーを確認できます。
私はServicesにアクセスできます。これは、負荷分散が完全に適切なソリューションであるこれらすべてのアプリケーションに最適ですが、DNSを使用してアクセスする方法個々のポッド?
APIで特定のポッドを検索できることはわかっていますが、hosts
ファイルを自分で更新し、ポッドリストを監視し続ける必要があります。 DNSは私のためにそれを行うことになっているので、ポッド内でどのように使用されるのですか?
Kubernetesのドキュメントでは、DNS情報をkubeletに渡す必要があると記載されていますが、私が知っているGKEでDNS情報にアクセスすることはできません。
一部のサービス(特にZookeeper)は他のノードを独自に認識しており、ホスト名(ポッド名)でそれらに接続しようとしますが、hosts
ファイルを自分で更新しないと失敗します。そのために統合DNSサービスを使用したいと思います。
これを行う方法に関するガイダンスをいただければ幸いです。
ありがとう
[〜#〜]更新[〜#〜]
ドキュメントによると、形式は次のとおりです。
_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>
の形式で提供されます。現在は無効にできますが、すべてのポッドに対してオンまたはオフになっています。
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
。