minikube: невозможно подключить локально развернутую службу nginx

Я установил minikube на свой компьютер с Ubuntu 16.04 и запустил кластер с сообщением

"Kubernetes is available at https://192.168.99.100:443"

Затем я развернул службу nginx с помощью следующей команды

> kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 --expose

> kubectl.sh get  pods -o wide
NAME                        READY     STATUS    RESTARTS   AGE       NODE
my-nginx-2494149703-8jnh4   1/1       Running   0          13m       127.0.0.1
my-nginx-2494149703-q09be   1/1       Running   0          13m       127.0.0.1

> kubectl.sh get  services -o wide
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
kubernetes   10.0.0.1     <none>        443/TCP   14m       <none>
my-nginx     10.0.0.83    <none>        80/TCP    13m       run=my-nginx

> kubectl.sh get  nodes -o wide
NAME        STATUS    AGE
127.0.0.1   Ready     16m

Вопросов:

1) Является ли узел 127.0.0.1 моей локальной машиной разработки? Это меня больше всего сбило с толку.

2) Верно ли мое следующее понимание: кластер (узлы, сервер Kubernetes API) имеет внутренние IP-адреса в 10.0.0.x, а их соответствующие внешние IP-адреса - 192.168.99.x. Тогда 2 модуля будут иметь IP-адреса в диапазоне вроде 10.0.1.x и 10.0.2.x?

3) Почему нет внешнего IP для сервисов? Даже для сервиса kubernetes. Разве 192.168.99.43 здесь не внешний IP?

4) Самое главное, как мне с ноутбука подключиться к сервису nginx?


person soupybionics    schedule 27.06.2016    source источник


Ответы (1)


1) Является ли узел 127.0.0.1 моей локальной машиной разработки? Это меня больше всего сбило с толку.

Когда узел регистрируется, вы указываете IP-адрес или имя для регистрации. По умолчанию узел просто регистрирует 127.0.0.1. Это относится к вашей виртуальной машине под управлением Linux, а не к вашему хост-компьютеру.

2) Верно ли мое следующее понимание: кластер (узлы, сервер Kubernetes API) имеет внутренние IP-адреса в 10.0.0.x, а соответствующие им внешние IP-адреса - 192.168.99.x. Тогда 2 модуля будут иметь IP-адреса в диапазоне вроде 10.0.1.x и 10.0.2.x?

Да, сеть 10.0.0.x - это ваша оверлейная сеть. 192.168.99.x - это ваши «общедоступные» адреса, которые видны за пределами кластера.

3) Почему нет внешнего IP для сервисов? Даже для сервиса kubernetes. Разве 192.168.99.43 здесь не внешний IP?

Внешний IP-адрес обычно используется для входящего трафика через определенный IP-адрес. Служба kubernetes использует тип службы clusterIP, что означает, что она видна только внутреннему кластеру.

4) Самое главное, как мне с ноутбука подключиться к сервису nginx?

Самый простой способ просмотреть службу nginx - это ввести NodePort, а затем развернуть службу. После этого опишите службу, чтобы получить назначенный порт (или после того, как вы создадите, он также сообщит вам). Затем нажмите IP-адрес своей виртуальной машины и укажите автоматически назначенный NodePort.

e.g. http://192.168.99.100:30001

person Steve Sloka    schedule 27.06.2016
comment
Спасибо, Стив! Еще один способ получить доступ к службе (если вы не хотите использовать NodePort) - использовать kubectl port-forward для доступа к базовому модулю. Например, вы можете запустить: kubectl port-forward mypod 8080:8080, чтобы сделать модуль доступным на localhost: 8080. - person dlorenc; 27.06.2016
comment
Спасибо, Стив. Что касается вашего первого ответа, вы хотите сказать, что 127.0.0.1 - это единственный новый интерфейс узла (в данном случае виртуальная машина), с которым модули внутри него могут взаимодействовать, верно? Во-вторых, когда я запускаю kubectl exec my-nginx-yczg9 - sh -c ifconfig -a, он дает eth0 с каким-то IP, например 172.17.0.4. Теперь, насколько я понимаю, my-nginx-yczg9 - это модуль, и модуль может иметь N контейнеров. Итак, будет ли справедливо сказать, что 172.17.0.4:80 - это IP-адрес модуля (виртуальная конечная IP-точка?), Который будет проксирован на соответствующий контейнер nginx, работающий внутри модуля, и этот контейнер будет иметь IP в подсети докеров внутри? - person soupybionics; 29.06.2016
comment
Спасибо diorec, как здесь работает команда переадресации портов? Пожалуйста, поправьте меня, если я ошибаюсь: насколько я понимаю, IP-адрес локального хоста моей машины (хоста) (например, 127.0.0.1:8080) будет действовать как прокси для 192.168.99.100:30001? в котором команда будет kubectl port-forward mypod 8080: 30001 - person soupybionics; 29.06.2016
comment
127.0.0.1 - это имя узла (ваш единственный узел). На нем работают все компоненты вашего кластера. Поды внутри сети получают свои собственные IP-адреса, которые доступны только внутри кластера. Это адреса 172. *, которые вы упомянули. Это помогает? - person Steve Sloka; 01.07.2016
comment
См. Также этот раздел, если вы хотите направлять трафик из локальной среды в службу без использования nodePort: stackoverflow.com/a/42658974/ 4716370 - person Antoine Cotten; 08.03.2017
comment
Что касается немного связанной темы, как бы вы затем настроили его так, чтобы переход на example.com из браузера происходил на этот 192.168.99.100:30001? У меня также есть связанный с этим вопрос: stackoverflow.com/questions/43008714/ - person writofmandamus; 29.03.2017