Выставить порт в миникубе

В миникубе как выставить сервис используя нодпорт?

Например, я запускаю кластер 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=/ ....

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

7 ответов

Решение

Я не совсем уверен, что вы спрашиваете, так как вы, кажется, уже знаете о 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...

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

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

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

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

kubectl port-forward svc/mongo 27017:27017

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

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

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

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

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

1) Запустите команды ниже, чтобы создать nginx, работающий на 8080 и NodePortsvc переадресация на него:

$ 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=/
...

Я столкнулся с похожей проблемой в 2022 году. Вот команды, которые я запускал:

  1. kubectl create deployment deploymentName --image=dockerHubUsername/imageTag:imageVersion
  2. kubectl expose deployment deploymentName --type=LoadBalancer --port=8080
  3. minikube tunnel
  4. kubectl get services deploymentNameэто обеспечивает внешний IP-адрес, необходимый для доступа к приложению. Я получаю доступ к приложению с помощью 127.0.0.1:8080

Источник

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

Я использую wsl2 на рабочем столе докера Windows11. единственное, что у меня сработало, это использование типа службы ClusterIp вместе с командой:
kubectl port-forward svc/<service name> -n <namespace> <host port>:<service port>
Я попробовал NodePort любым способом, перезапустив minikube с аргументом «--port», но больше ничего не помогло.

После долгих исследований и борьбы я нашел вот что.

Minikube по умолчанию использует docker в качестве драйвера виртуальной машины, и поэтому всякий раз, когда вы запускаете кластер minikube, он создает новую сеть с именем minikube (вы можете найти ее, используяdocker network ls. Следовательно, этот IP-адрес minikune определяется только в этой сети minikube.

Чтобы запустить Minikube в хост-сети и указать IP-адрес Minikube в качестве IP-адреса хоста, вам необходимо запустить Minikube с помощью--vm-driver=none

Ниже приведены полные команды

      # Make sure that version of minikube is v1.30.1
curl -LO https://storage.googleapis.com/minikube/releases/v1.30.1/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Make sure that version of kubectl is v1.23.0
curl -LO "https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

minikube start --extra-config=apiserver.service-node-port-range=300-20000 --memory=6g minikube start --kubernetes-version=v1.23.0 --vm-driver=none

Minikube выставит черезnodeIP:nodePortи не наlocalhost:nodePortкогда вы используете драйвер vm по умолчанию. Если вы используете --vm-driver как none, он затем используетlocalhost.

Другие вопросы по тегам