2016-08-23 18 views
0

私はGCE上で動作するkubernetesクラスタを持っています。kubernetesノードの観点からサービス名をIPに解決するにはどうすればよいですか?

私は2 ポッドglusterfs-server-1glusterfs-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アドレスを解決できるようにするために、私は何ができますか?

答えて

1

resolv.confを変更し、完全なサービス名を使用して衝突を回避することができます。通常は次のようになります:service_name.default.svc.cluster.localservice_name.kube-system.svc.cluster.localまたは名前が付けられた名前空間。

+0

私はもともとデフォルトでは行われていなかったので、おそらく良い理由があったと思っていたので、もともとはノードのresolv.confを変更したくなかった。私はこれが単にresolv.confを多くの異なるディストリビューションで構成するには複雑すぎるということが分かりました:https://github.com/kubernetes/kubernetes/issues/8735。 – liquidity