私はGCE上で動作するkubernetesクラスタを持っています。kubernetesノードの観点からサービス名をIPに解決するにはどうすればよいですか?
私は2 ポッドglusterfs-server-1
とglusterfs-server-2
が私のglusterサーバーであるセットアップを作成しました。
デーモンが正しく通信し、レプリケートされたボリュームを作成し、それらにファイルを書き込み、両方のポッドに正しく複製されたファイルを見ることができます。
また、1 サービスglusterfs-server
と呼ばれ、私の2つのglusterfsポッド間のトラフィックのバランスを自動的に調整します。
別のポッドの中からmount -t glusterfs glusterfs-server:/myvolume /mnt/myvolume
を発行しても問題ありません。コンテナを作成するときに
さて、私が本当に欲しいものは私の.yamlファイル内glusterfs
ボリュームタイプを使用できることです:
...truncated... spec: volumes: - name: myvolume glusterfs: endpoints: glusterfs-server path: myvolume ...truncated...
残念ながら、これは動作しません。
kubernetes ノードに直接接続する場合、mount -t glusterfs glusterfs-server:/myvolume /mnt/myvolume
は動作しません発行、これは、私のノードの観点glusterfs-server
から任意のIPアドレスに解決されません。私はそれが動作しない理由を見つけることができました。 (つまり、getent hosts glusterfs-server
は何も返しません)
また、glusterfsの動作によって、サービスのIPを直接使用しても、glusterfsは引き続き最終的に名前glusterfs-server
を解決しようとします(失敗します)。
これが問題であることを確認するために、自分のノードとサービスのIPアドレスを正しく解決できるように、ノードのresolv.conf
を編集しました(kube-dnsのIPアドレスと検索ドメインを設定します)。私はついにノード上でmount -t glusterfs glusterfs-server:/myvolume /mnt/myvolume
を正常に発行することができました。私はglusterfsボリューム(上記のPodSpecを使用)を使ってポッドを作成することもできました。
は今、私は私のノードのresolv.conf
はひどいアイデアです修正かなり確信している:2つの異なる名前空間の2つのサービスが同じ名前を共有している場合、名前空間の概念を持つkubernetesを、(たとえば、glusterfsサービス)、getent hosts glusterfs-service
は解決でしょう2つの異なる名前空間に住む2つの異なるIPに
だから私の質問は次のとおりです。
私のノードが、私のポッド/サービスIPアドレスを解決できるようにするために、私は何ができますか?
私はもともとデフォルトでは行われていなかったので、おそらく良い理由があったと思っていたので、もともとはノードのresolv.confを変更したくなかった。私はこれが単にresolv.confを多くの異なるディストリビューションで構成するには複雑すぎるということが分かりました:https://github.com/kubernetes/kubernetes/issues/8735。 – liquidity