Какой IP-адрес будет представлять мой ноутбук на Mac из кластера minikube?

Я запускаю minikube на своем ноутбуке Mac. Я использую VirtualBox для размещения виртуальной машины minikube, следуя официальным инструкциям.

Я хотел бы, чтобы модуль, который я собираюсь развернуть в кластере, имел возможность проверять связь с сервером, который я буду запускать на своем ноутбуке. Предполагая (на данный момент), что я не определяю службу Kubernetes типа ExternalName для представления этого сервера, какой IP-адрес или имя хоста мне следует использовать в программе, запущенной в моем модуле?

ИЗМЕНИТЬ: из модуля я могу ping 10.0.2.2 и получать ответы. Однако попытка telnet на 10.0.2.2 на порту 9092, где у меня запущена база данных H2, просто зависает.

Наконец, minikube ssh, который, по-видимому, регистрирует меня в виртуальной машине VirtualBox? работает как docker? приводит к тому же поведению, описанному выше, в случае, если это имеет значение, что предполагает, что это, по сути, вопрос, я полагаю, о VirtualBox.

РЕДАКТИРОВАТЬ №2: перезапуск VirtualBox решил проблему с подключением (!). Тем не менее, 10.0.2.2 все еще кажется мне волшебством; Я хотел бы знать, откуда этот IP.


person Laird Nelson    schedule 20.04.2017    source источник


Ответы (1)


Вы должны иметь возможность использовать IPv4-адрес, указанный в vboxnet0. Найдите интерфейс vboxnet0 в списке выходов для ifconfig. В качестве альтернативы адрес 10.0.2.2 также будет отображаться обратно на хост от гостя.

Этот IP-адрес будет доступен из гостя, но не напрямую из модуля. Чтобы сделать его доступным из модуля, вам необходимо создать автономную службу, которая предоставляет этот IP-адрес.
См. Этот ответ, чтобы узнать, как создать автономную службу: Minikube предоставляет MySQL, работающий на localhost, как службу

Так, например, я запустил сервер с портом 8000 на моем хосте и сделал следующее, чтобы получить к нему доступ в модуле:

$ kubectl create -f service.yaml

----service.yaml----
apiVersion: v1 kind: Service metadata:
    name: my-service spec:
    ports:
        - protocol: TCP
          port: 1443
          targetPort: 8000

$ kubectl create -f endpoint.yaml

----endpoint.yaml----
apiVersion: v1
kind: Endpoints
metadata:
    name: my-service
subsets:
    - addresses:
        - ip: 192.168.99.1 #ipv4 address from vboxnet0
      ports:
        - port: 8000

$ kubectl get svc
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes   10.0.0.1     <none>        443/TCP    2h
my-service   10.0.0.83    <none>        1443/TCP   17m

Затем вы можете получить доступ к службе хоста, используя 10.0.0.83:1443 внутри модуля.

person aaron-prindle    schedule 20.04.2017
comment
Спасибо за ваш ответ. Могу ли я создать службу без заголовка, которая требует от меня создания конечной точки, или службу типа ExternalName, которая, как мне кажется, не требует от меня создания конечной точки? - person Laird Nelson; 21.04.2017
comment
Я только что получил это для работы с доступом к серверу на моем хосте с помощью безголовой службы в minikube с виртуальным ящиком, используя файлы yaml, почти идентичные тем, которые связаны, и ip @ vboxnet0. Я думаю, вы также можете использовать ExternalName, но я думаю, вам нужно будет добавить запись DNS в свой кластер для сопоставления с IP. К сожалению, я менее знаком с ExternalName. - person aaron-prindle; 21.04.2017
comment
Интересно, что без какой-либо другой магии с моей стороны ping 10.0.2.2 из приглашения оболочки, созданного kubectl run -i -t busybox --image=busybox --restart=Never, получает ответ. Где я могу прочитать об этом волшебном (мне!) 10.0.2.2 адресе? - person Laird Nelson; 21.04.2017
comment
Я действительно не слишком много знаю об этом, кроме того, что виртуальный бокс всегда отображает это обратно на хост - person aaron-prindle; 21.04.2017