Azure ACS — обмен данными между модулями Kubernetes

Я сделал экземпляр ACS.

az acs create --orchestrator-type=kubernetes \
          --resource-group $group \
          --name $k8s_name \
          --dns-prefix $kubernetes_server \
          --generate-ssh-keys

az acs kubernetes get-credentials --resource-group $group --name $k8s_name

И запустите helm init, он отлично подготовил стручок румпеля. Затем я запустил helm install stable/redis и запустил развертывание Redis (по-видимому).

Я могу kube exec -it войти в модуль Redis и увидеть его привязку к 0.0.0.0 и могу войти в систему с помощью redis-cli -h localhost и redis-cli -h <pod_ip>, но не redis-cli -h <service_ip> (из kubectl get svc).

панель управления кубом

Если я запускаю другой модуль (именно так я столкнулся с этой проблемой), я могу ping redis.default, и он показывает, что DNS разрешает правильный IP-адрес службы, но не дает ответа. Когда я telnet <service_ip> 6379 или redis-cli -h <service_ip> он зависает на неопределенный срок.

оболочка

Я немного не понимаю, как дальше отлаживать. Я не могу подключиться к узлу по ssh, чтобы посмотреть, что делает докер.

Кроме того, я сначала попробовал это со стандартным образом Alphine-Redis, поэтому руль был запасным вариантом. Вчера пробовал, штурвал работает, а ручной нет. Сегодня, делая это (на недавно построенном кластере ACS), он вообще не работает.

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

PS — у меня есть виртуальная сеть с перекрывающейся подсетью 10.0.0.0/16 в другом регионе, когда я захожу в диапазон адресов, я получаю там предупреждение о конфликте, может ли это повлиять?

<EDIT>

Некоторое новое понимание ... Это как-то связано с альпийскими изображениями (которые мы стремились использовать) ...

Итак, kube run a --image=nginx (на основе Ubuntu) и я могу подключиться, установить telnet и подключиться к службе Redis.

Но, напр. kubectl run c --image=rlesouef/alpine-redis, затем оболочка, и telnet не работает с той же службой Redis.

</EDIT>


person Chris    schedule 28.04.2017    source источник
comment
Если вы не следите за ними, вы можете игнорировать предупреждение, упомянутое в вашем PS; не уверен, почему Портал так агрессивно предупреждает об этом...   -  person colemickens    schedule 28.04.2017


Ответы (1)


Была аналогичная проблема https://github.com/Azure/acs-engine/issues/539, который был недавно исправлен. Одна вещь, которую нужно проверить, — это проверить, работает ли nslookup в контейнере.

person jiangtli    schedule 28.04.2017
comment
Я предполагал, что ping, разрешающий IP-адрес службы из имени службы, означает, что DNS в порядке. Эта проблема предполагает, что это должен быть ip-адрес модуля, который решается? Какие дополнительные данные предоставляет nslookup? - person Chris; 28.04.2017
comment
Теперь, когда я воспроизвел на alpine, я могу подтвердить, что поведение существует как тогда, когда контейнеры находятся на одном узле, так и на другом узле, поэтому я не думаю, что эта проблема является ответом. - person Chris; 29.04.2017
comment
Проблема № 539 исправляет подключение между контейнерами. Вы можете подтвердить, что затронуты, если файл /etc/systemd/system/docker.service.d/exec_start содержит --iptables=false --ip-masq=false - person A Howe; 04.05.2017
comment
Кроме того, что такое альпийский? Когда я запускал helm install stable/redis, я заметил две вещи: 1. контейнеру Redis потребовалось 4 минуты, чтобы начать работу. 2. Мне нужно было извлечь пароль из модуля (REDIS_PASSWORD=$(kubectl get secret --namespace default laughing-bee-redis -o jsonpath="{.data.redis-password}" | base64 --decode). Как только я подтвердил, что модуль работает, и использовал пароль, я смог подключиться к службе Redis. - person A Howe; 04.05.2017
comment
В приведенном выше я заметил, что вы используете telnet. Вы пытаетесь ввести какие-либо команды в окно telnet? Можете ли вы вместо этого попробовать использовать redis-cli? Вот что я делаю из шелла в контейнер nginx: apt-get update; apt-get install redis-tools. Затем я запускаю redis-cli -h laughing-bee-redis -a $PASSWORD и могу подключаться и использовать команды. - person A Howe; 04.05.2017
comment
alpine — это минимальный дистрибутив Linux для докера. Я только что проверил, и в настоящее время он работает с изображением с альпийской паузой ... я собираюсь вернуться завтра и подтвердить, что теперь он работает с нашей фактической настройкой ... и я запускал INFO с помощью telnet, и это давало ошибки пароля, что означает, что подключение хорошее - я не получал этого раньше - person Chris; 04.05.2017
comment
Сегодня снова проверил, и теперь он работает для моей реальной настройки. Я не знаю, что изменилось за неделю, и не могу этого объяснить. Должен ли я удалить этот вопрос, так как я не думаю, что в нем есть что-то полезное для кого-либо еще? - person Chris; 05.05.2017