3

同じプロジェクト内の別の Kubernetes クラスターから Kubernetes クラスターによって公開されているサービスを呼び出す方法に関連して います。

Kubernetes は 7 月から大幅に変更されているため、もう一度お尋ねします。

環境:

私は、さまざまな目的を果たす複数のクラスターを備えたインフラストラクチャに取り組んでいます。

  • クラスター A は、消費用のデータを作成するサービス/アプリを実行します
  • クラスター B は、クラスター A のアプリによって作成されたデータを使用するサービス/アプリを実行します
  • クラスター C は、Redis、Memcache などのデータ サービスを実行します。

すべてのクラスターはdefault名前空間にあります。

問題:

Kubernetes では、各クラスターは、異なる IP を持つ独自の kubernetes (default名前空間内) および kube-dns (名前空間内) サービスを取得します。kube-system

このセットアップで何が起こるかというと、上記のクラスター A と B のサービスは (サービス検出の用語で) 検出できません。たとえば、クラスター C の Redis を検出できません。したがって、nslookup redis.default.svc.cluster.localクラスター A/B のサービスの 1 つからの a が返され** server can't find redis.default.svc.cluster.local: NXDOMAINます。注:これはクラスター C 内から機能します。

kube-dns について見つけた限り多くのドキュメントを読みましたが、ほぼすべてが 1 つのクラスター セットアップを前提としています。

クラスター情報:

以下は/etc/resolv.conf、共通の kube-dns 祖先を持たない DNS ネームサーバーを示す 2 つの異なるクラスターからのものです。

クラスタ A:

nameserver 10.67.240.10
nameserver 169.254.169.254
nameserver 10.240.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.project-name.internal. 1025230764914.google.internal. google.internal.

クラスタ C:

nameserver 10.91.240.10
nameserver 169.254.169.254
nameserver 10.240.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.project-name.internal. google.internal.
options ndots:5

kube-system両方のクラスターには、名前空間内のクラスターのそれぞれの IP で実行されているこれらのサービスがあります。

NAME                  LABELS                                                                           SELECTOR           
kube-dns              k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS   k8s-app=kube-dns
kube-ui               k8s-app=kube-ui,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeUI     k8s-app=kube-ui
monitoring-heapster   kubernetes.io/cluster-service=true,kubernetes.io/name=Heapster                   k8s-app=heapster

GCE 環境のすべての Kubernetes クラスターで共有サービスを検出できる、この設定に対する理想的な修正/更新は何ですか?

4

1 に答える 1

5

これは、Kubernetes がクラスター フェデレーション計画の一部としてクロス クラスター サービス ディスカバリーを使用して解決しようとしている大きな問題の 1 つです。また、 Federation SIGをチェックアウト/投稿することもできます。

ここで説明されているハックソリューションのいずれかを使用したことがある場合は、ハックして、他のクラスターからネームサーバーを検索することもできる場合があります。これにより切り捨ての問題が発生する可能性があるため、注意してください。/etc/resolve.conf

クラスターのsky-dns RCを変更して、他のクラスターの kubernetes サービスを指す追加の kube2sky ポッドを含めることもできます (私はこれを試していないか、すべての影響について考えていません)。

上で説明した 2 つのハックのどちらも、名前の衝突を防ぐことはできないので、手動で防ぐ必要があります。

于 2015-11-20T20:02:19.680 に答える