развертывание на minikube локально

Я развернул и создал службы для socketcluster, scc-broker и scc-state на kubernetes локально через minikube напрямую, используя файлы докеров (см. Этот ссылка для .yaml файлов). И я также создал службу для ingress в том же кластере с файлом .yaml, указанным в упомянутой мной ссылке. Насколько я понимаю, по умолчанию эти сервисы относятся к типу ClusterIP.

Развертывание сервисов на vm (minikube) работает исправно. Статус установлен на "Работает" на панели управления Kubernetes для

  • стручки

  • развертывание

Но проблема, с которой я столкнулся, заключается в том, что нет общедоступных конечных точек, открытых из scc-state, scc-broker, сервера socketcluster. Поэтому в настоящее время я не могу понять, как мне получить доступ к сервисам извне, то есть вне виртуальной машины (которая работает на minikube).

Образы были созданы непосредственно из yml-файлов kubernetes с отключенной входящей безопасностью TLS.

Пропускаю ли я какой-либо аспект относительно того, как получить доступ к socketcluster на хост-машине? Должен ли я указывать тип службы для любого другого типа, кроме ClusterIP, поскольку я знаю, что использование этого типа гарантирует, что служба будет доступна только в кластере. Но снова я сомневаюсь, что если я использую ingress, это должно помочь получить доступ к службам за пределами виртуальной машины. Нужно ли мне иметь ingress controller отдельно, например, NGINX?

Любое руководство будет оценено.

Спасибо!

P.S. Следуйте этому руководству по развертыванию.


person Roshan    schedule 26.04.2017    source источник


Ответы (2)


Kubernetes не раскрывает ничего за пределами частной контейнерной сети, если вы не укажете это специально. Распространенные способы сделать это:

  • Используйте Service с type: LoadBalancer, чтобы получить общедоступный IP-адрес, подключенный к облачной службе. Это недоступно на minikube
  • Используйте Service с type: NodePort, чтобы открыть порт в общедоступной сети каждого узла. Это рекомендуемый способ делать что-либо на minikube (https://github.com/kubernetes/minikube#networking)
  • Создайте свои поды с hostNetwork: true, чтобы пропустить сеть контейнеров и использовать сеть хоста (например, используя тот же IP-адрес, что и сам узел). Обычно это менее полезно, чем два предыдущих варианта, за исключением очень специфических обстоятельств.

Ресурс Ingress не связан с внешним подключением. Если у вас развернут входной контроллер, он будет использовать Ingress ресурсы, которые вы создаете, для своей настройки. Например, nginx-ingress-controller (https://github.com/kubernetes/ingress/tree/master/controllers/nginx) по существу создаст блок server в конфигурации nginx для каждого Ingress. Однако сам входной контроллер все равно должен быть доступен для внешней сети с использованием Service с type: LoadBalancer или type: NodePort.

person coreypobrien    schedule 27.04.2017
comment
Так ты имеешь в виду ..? Мне не нужна какая-либо служба контроллера входящего / входящего трафика, если я просто помещаю свои службы в kubernetes как тип NodePort .. ?? - person Roshan; 28.04.2017
comment
Это правильно. Если вы установите свой сервис как type: NodePort, базовые модули будут отображаться на IP-адресе minikube (например, 192.168.99.1) - person coreypobrien; 28.04.2017
comment
Спасибо @coreypobrien! - person Roshan; 01.05.2017
comment
Еще один вопрос, так как у меня будет несколько реплик модулей для масштабирования, поэтому в этом случае мне нужно, чтобы балансировщик нагрузки был развернут внутри кубернетов, который выполняет обратный прокси, я прав ..? - person Roshan; 02.05.2017
comment
Вам все равно ничего, кроме сервиса, не нужно. Kubernetes Service с type: ClusterIP будет направлять подключения к любому доступному модулю. Вот рисунок из документации: kubernetes.io/images/docs/services-iptables -overview.svg - person coreypobrien; 02.05.2017

Если вы следуете документации minikube, https://github.com/kubernetes/minikube#quickstart, он говорит вам создать Service с type: NodePort.

Затем запустите kubectl get services, чтобы найти назначенный IP-адрес для вашей службы, и используйте minikube ip, чтобы найти IP-адрес виртуальной машины minikube. Затем соедините их вместе и получите доступ к сервису со своего ноутбука.

person Ahmet Alp Balkan    schedule 26.04.2017
comment
спасибо за ваш ответ, но я думаю, что размещение служб как clusterIP / NodePort не повлияет, если я использую входной контроллер для предоставления своих служб внешнему миру. исправьте меня, если я ошибаюсь. - person Roshan; 27.04.2017