Выставить порт в миникубе
В миникубе как выставить сервис используя нодпорт?
Например, я запускаю кластер 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 и 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=/
...
Я столкнулся с похожей проблемой в 2022 году. Вот команды, которые я запускал:
-
kubectl create deployment deploymentName --image=dockerHubUsername/imageTag:imageVersion
-
kubectl expose deployment deploymentName --type=LoadBalancer --port=8080
-
minikube tunnel
-
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
.