Открыть порт в мини-кубе

В минибуке, как открыть службу с помощью nodeport?

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

$ minikube start
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
$ kubectl expose deployment hello-minikube --type=NodePort
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/ ....

Теперь, как получить доступ к открытой службе с хоста? Я предполагаю, что мини-куб node должен быть настроен так, чтобы выставить этот порт.

Ответ 1

Я не совсем уверен, что вы спрашиваете, поскольку, похоже, вы уже знаете о команде minikube service <SERVICE_NAME> --url, которая даст вам URL-адрес, где вы можете получить доступ к службе. Чтобы открыть открытую службу, можно использовать команду minikube service <SERVICE_NAME>:

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
$ kubectl get svc
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
hello-minikube   10.0.0.102   <nodes>       8080/TCP   7s
kubernetes       10.0.0.1     <none>        443/TCP    13m

$ minikube service hello-minikube
Opening kubernetes service default/hello-minikube in default browser...

Эта команда откроет указанную службу в браузере по умолчанию. Здесь сервисная документация minikube: https://github.com/kubernetes/minikube/blob/master/docs/minikube_service.md

Существует также опция --url для печати URL-адреса службы, которая открывается в браузере:

$ minikube service hello-minikube --url
http://192.168.99.100:31167

Ответ 2

Minikube работает на что-то вроде 192.168.99.100. Таким образом, вы должны иметь доступ к нему через NodePort на NodePort вы предоставляете свои услуги. Например, скажем, ваш NodePort 30080, то ваш сервис будет доступен как 192.168.99.100:30080.

Чтобы получить миникуб ip, запустите команду minikube ip.

Обновление 14 сентября 2017 г.:

Вот небольшой пример, который работает с minikube v0.16.0.

1) Запустите приведенные ниже команды для создания nginx, работающего на 8080, и переадресации на него NodePort svc:

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

2) Найдите нодпорт, используемый svc:

$ kubectl get svc hello-minikube
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
hello-minikube   10.0.0.76    <nodes>       8080:30341/TCP   4m

3) Найдите миникуб ip:

$ minikube ip
192.168.99.100

4) Поговорите с ним с помощью curl:

$ curl 192.168.99.100:30341
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
...

Ответ 3

Поскольку minikube предоставляет доступ через nodeIP:nodePort а не через localhost:nodePort, вы можете добиться этого, используя kubectl переадресации портов kubectl. Например, если вы используете сервис mongodb:

kubectl port-forward svc/mongo 27017:27017

Это выставило бы сервис на localhost:27017, FWIW. Кроме того, вы можете выяснить, как запустить это в фоновом режиме.

Ответ 4

Просто замечание для тех, кто ищет ответы об отказе в соединении: если ваш мини-куб не работает на "что-то вроде 192.168.99.100", вы, вероятно, работаете с другим vm-драйвером, таким как "none". В этом случае удалите кластер Minikube и перестройте его, используя настройки по умолчанию. это будет работать.... иш... я не могу заставить работать туннель...