3

Относится к How to call a service exposed by a Kubernetes cluster from another Kubernetes cluster in same project.Обнаружение нескольких кластеров Кубернете

Снова повторилось с тех пор, как Кубернетес сильно изменился с июля.

Контекст:

Я работаю над инфраструктурой с несколькими кластерами, служащей для различных целей, например:

  • Cluster пробегает услуги/приложения, создающие данные для потребления
  • кластера B запускает службы/приложения, потребляющие данные, созданные приложениями в кластере A
  • Cluster C запускает службы данных, такие как Redis, Memcache, и т.д.

Все кластеры находятся в пространстве имен default.

Проблема:

В Kubernetes каждый кластер получает свои собственные kubernetes (в default имен) и Кубэ-DNS (в kube-system имен) службы с другим IP.

Что происходит с этой настройкой, так это то, что службы в кластере A и B выше не могут обнаружить (в терминологии обнаружения услуг), скажем, Redis в кластере C. Таким образом, nslookup redis.default.svc.cluster.local из одной из служб в кластере A/B возвращается с ** server can't find redis.default.svc.cluster.local: NXDOMAIN. Примечание: Это работает изнутри кластера C.

Я прочитал столько документов, сколько я нашел о kube-dns, и почти все предполагают одну настройку кластера.

Кластеры информация:

Вот /etc/resolv.conf из двух различных кластеров, показывающие DNS сервера имен без каких-либо общих Kube-Dns предка:

кластера 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 

Обе кластеры имеют эти службы работы с соответствующими IP-адресов для их кластера в kube-system имен:

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 

Что такое идеальное исправление/обновление для этой установки, которые могут получить общие услуги обнаружены во всех кластерах Kubernetes в GCE Окружающая среда?

ответ

5

Это одна из больших проблем, которую Кубернетес пытается решить с помощью Cross-Cluster Service Discovery в рамках планов Федерации кластеров. Вы также можете проверить/внести свой вклад в Federation SIG.

Если вы использовали один из писак решения описанных here, вы можете быть в состоянии взломать вверх ваш /etc/resolve.conf также поиск сервера имен из другого кластера. Будьте осторожны, потому что это может привести к усечению.

Возможно, вы также сможете изменить sky-dns RC для ваших кластеров, чтобы добавить дополнительный кубейский модуль, который указывает на обслуживание кубернетов другого кластера (я не пробовал этого или не продумал все последствия).

Ни один из двух хаков, описанных выше, не предотвратит столкновения имен, поэтому вам придется вручную предотвратить это.

+0

Спасибо за информацию, CJ! Я столкнулся с этими хаками/решениями, и с Федерацией Куба около полугода, я решил установить одно кластерное решение на данный момент, пока у Кубернете не будет правильного решения. –