Доступ к службе NodePort с другого компьютера в той же сети

Я установил minikube на свой Mac и создал развертывание и службу для своего приложения nodejs. Я проверил, что все работает, получив URL-адрес моего сервиса с помощью следующей команды:

minikube service my-nodejs-app --url, а затем я запускаю этот URL-адрес в браузере и получаю результаты. Проблема в том, что когда я пытался получить доступ к тому же URL-адресу с другого компьютера в той же сети, это не сработало.

мой сервисный файл .yml:

apiVersion: v1
kind: Service
metadata:
  name: my-nodejs-app
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 1337 
    protocol: TCP
    name: app-server
  selector:
    app:  my-nodejs-app  

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

Заранее спасибо за любую помощь.


person Ran Hassid    schedule 03.12.2016    source источник


Ответы (5)


Вы можете использовать "port forward a service". Предполагая:

  • IP вашего локального компьютера: 166.6.6.6 (который содержит minikube)
  • Ваш миникуб IP: 192.168.99.100 (проверьте реальный IP командой $minikube ip)
  • nodePort вашего сервиса my-nodejs-app: 31000 (проверьте реальный nodePort с помощью команды: $kubectl get service)

Чтобы получить доступ к вашей службе удаленно, вы можете перенаправить порт (например, 31000, рекомендуется тот же порт с nodePort) в свою службу с помощью следующей команды на локальном компьютере:

ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(ip-адрес minikube) -L \*:31000:0.0.0.0:31000

Затем вы можете получить доступ к своей службе через URL-адрес: http://166.6.6.6:31000, который будет переадресован на URL-адрес вашей службы http://192.168.99.100:31000.

Спасибо: https://github.com/kubernetes/minikube/issues/877

person Jingchao Luan    schedule 23.06.2018

Возможно, немного поздно, но если у кого-то все еще есть эта проблема -

  1. Проверьте список служб и ту, которую вы хотите предоставить, если она присутствует
kubectl get svc -n {namespace_name}
  1. Измените тип на NodePort, если он относится к кластерному IP-типу.
kubectl patch svc {service_name} -n {namespace_name} --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
  1. Предоставьте указанный выше порт узла, доступный для вашего локального компьютера, для других компьютеров в той же сети:
service_port=$(minikube service {service_name} -n {namespace_name} --url | cut -d':' -f3)
ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -NL \*:${service_port}:0.0.0.0:${service_port}

Теперь вы можете получить доступ к вышеуказанному сервису с других компьютеров в той же сети, просто нажав на ссылку-
{your_hostname}:{node_port}

person Chinmay Singh    schedule 05.02.2021

Похоже, что доступ к нему с другого компьютера сравнивается с предоставлением доступа к s-сервису в Интернете. В этом случае вам нужно изучить спецификацию/тип:LoadBalancer (http://kubernetes.io/docs/user-guide/load-balancer/) Тем не менее, с minikube я бы придерживался одной машины и тестировал только разработку

person Ben    schedule 05.12.2016
comment
Спасибо, но я разрабатываю мобильное приложение, и когда я пытаюсь протестировать приложение на реальном мобильном устройстве, это невозможно, потому что я не могу подключиться со своего мобильного устройства к службе. Кстати, я нашел способ сделать это, установив обратный прокси-сервер (NGINX), который перенаправляет запрос на мою службу, но я хотел знать, есть ли лучший способ. - person Ran Hassid; 05.12.2016
comment
Вы изучали настройку службы с типом балансировщика нагрузки? Потому что это лучший способ (путь kubernetes), и это то, что я имел в виду выше. - person Ben; 05.12.2016
comment
В миникубе нельзя использовать LoadBalancer, тип сервиса должен быть NodePort - person Ran Hassid; 05.12.2016
comment
Хорошо, мой плохой; я думаю, вы в этом с прокси-сервером nginx - person Ben; 05.12.2016

Если я правильно понимаю вашу проблему:

IP-адрес вашего компьютера: 192.168.1.4 IP-адрес вашего мини-куба: 192.168.99.100 Доступ к вашему сервису из браузера на вашем компьютере: http://192.168.99.100:30080

Теперь предположим, что вы находитесь на другом компьютере, скажем 192.168.1.5, и хотите получить доступ к этому сервису.

Проблема в том, что вам необходимо сопоставить порт вашей машины с портом minikube 30080, потому что minikube — это виртуальная машина, работающая на вашей машине (к которой нельзя получить доступ снаружи вашей машины).

Итак, вы можете попробовать: Переадресация порта Virtualbox с гостя на хост.

Другой альтернативой является перенаправление порта с вашего локального хоста на модуль напрямую (к сожалению, не через k8s svc) с помощью kubectl переадресация порта.

person iamnat    schedule 06.12.2016
comment
привет @iamnat, я попробовал kubectl port-forward (это кажется лучшим решением), но он не работает ... Я могу попробовать подход с переадресацией портов на VirtualBox, но не думаете ли вы, что лучше установить NGINX в качестве обратного прокси ? (это мое текущее рабочее решение..) - person Ran Hassid; 06.12.2016

Вы не указали nodePort в портах. Добавьте ниже конфигурацию в порт

порт узла: 30000

Вы можете получить доступ к своему сервису по адресу http://[IP-адрес]:30000.

person Siddhesh Latkar    schedule 07.03.2021