Настройте Kubernetes nginx для внешнего доступа

Я все еще новичок в Kubernetes и Lagom.

Мне нужно вызвать микросервис Lagom с внешнего сервера. Для этого я думаю, что мне нужно открыть мой nginx-вход для внешнего доступа, но я не знаю, как это сделать. Должен ли я настроить «внешние IP-адреса»?

{
  "apiVersion": "v1",
  "kind": "Service",
  "metadata": {
    "name": "nginx-ingress"
  },
  "spec": {
    "type": "LoadBalancer",
    "ports": [
      {
        "port": 80,
        "name": "http",
        "targetPort": 8080
      },
      {
        "port": 443,
        "name": "https"
      }
    ],
    "externalIPs": [
      "192.168.1.120"
    ],
    "selector": {
      "k8s-app": "nginx-ingress-lb"
    }
  }
}

person Imen    schedule 08.02.2018    source источник
comment
Нет.. Если вы используете "type": "LoadBalancer", внешний IP будет настроен автоматически   -  person Shahriar    schedule 08.02.2018
comment
Я получил два IP-адреса: один для http 192.168.99.100:30370, а другой для https 192.168.99.100:30023. Я могу вызвать этот IP-адрес только с локального сервера, содержащего Kubernetes, но я не могу сделать это с другого сервера. У вас есть объяснение? Пожалуйста.   -  person Imen    schedule 08.02.2018
comment
Где вы запускаете kubernetes? GKE/AWS/AZURE?   -  person Shahriar    schedule 08.02.2018
comment
Нет, я настроил Kubernetes через Minikube на своем приватном сервере.   -  person Imen    schedule 08.02.2018
comment
А откуда вы хотите получить доступ к этому сервису? из вашего местного? Или дистанционно?   -  person Shahriar    schedule 08.02.2018
comment
С другого сервера (не из той же сети), Итак, с удаленного. Например, у меня есть приложение для Android, которое должно использовать сервис, уже развернутый в Kubernetes. Поэтому мне нужно открыть этот IP-адрес для этого приложения для Android.   -  person Imen    schedule 08.02.2018
comment
У вас есть доступ к вашему локальному серверу с этого удаленного сервера?   -  person Shahriar    schedule 08.02.2018
comment
Да, у меня есть доступ к IP-адресу этого сервера   -  person Imen    schedule 08.02.2018
comment
ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -L 30370:0.0.0.0:30370 попробуй это   -  person Shahriar    schedule 08.02.2018
comment
Хорошо, я попробую это, дайте вам знать. Спасибо :)   -  person Imen    schedule 08.02.2018
comment
Попробуйте выполнить мой ответ   -  person Shahriar    schedule 08.02.2018


Ответы (2)


Minikube создает сеть для себя и виртуальной машины. Вам нужно выставить свой сервис напоказ.

Из комментария оператора: вы получаете порт 30370 для своей службы. Вам нужно открыть этот порт.

ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -L \*:30370:0.0.0.0:30370
person Shahriar    schedule 08.02.2018
comment
Здравствуйте :), я попробовал ваше решение, и оно работает. Но если я выйду из ssh-соединения, я никогда не смогу получить доступ к службам. Было бы лучше, если бы я мог маршрутизировать IP-адрес minikube. Я попробовал эту команду sudo route -n add 10.0.0.0/24 $(minikube ip), но она не работает :( - person Imen; 09.02.2018
comment
Вы пробовали нгрок? - person Shahriar; 10.02.2018
comment
Извините за опоздание. Да, я пробовал, и это работает. С помощью ngrok я могу вызывать свою службу с любого другого устройства. Спасибо :) PS: Я провел другое исследование и понял, что могу перенаправить на свой IP-адрес minikube с помощью Apache или Nginx. - person Imen; 11.02.2018
comment
также, чтобы запустить эту ssh в фоновом режиме, добавьте & в конце этой команды. Это запустит переадресацию этого порта в фоновом режиме. И, если это решение работает, пожалуйста, одобрите его и проголосуйте, чтобы будущие читатели могли принять его как решение. @Имен - person Shahriar; 11.02.2018
comment
Готово :) Еще раз спасибо ;) @aerokite - person Imen; 12.02.2018

В Minikube вы должны использовать команду kubectl expose, чтобы открыть службу для внешнего доступа в соответствии с https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/#create-a-service. Minikube не используется в производстве.

В производственной среде у вас есть три способа создания входной службы nginx с использованием kubernetes в соответствии с https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types и открыть его для внешнего доступа:

  1. LoadBalancer тип сервиса, который автоматически устанавливает ExternalIP. Это используется при наличии внешнего балансировщика нагрузки, отличного от k8s, облачного провайдера, такого как CGE, AWS или Azure, и этот внешний балансировщик нагрузки предоставляет ExternalIP для входной службы nginx.
  2. ExternalIPs по https://kubernetes.io/docs/concepts/services-networking/service/#external-ips.
  3. NodePort. При таком подходе к службе можно получить доступ из-за пределов кластера, используя NodeIP:NodePort/url/of/the/service.

Наряду с входным контроллером nginx вам также понадобится входной ресурс. См. https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example для примеров.

person Vikram Hosakote    schedule 09.02.2018
comment
Здравствуйте @Vikram, спасибо за ваш ответ, очень полезно понять, как выставить сервис для внешнего доступа. Но это решение не решает проблему, потому что оно предоставляет службу только для моей виртуальной машины minikube, и мне нужно добавить некоторую сетевую конфигурацию (маршрут), чтобы перенаправить запрос с моего сервера на мою виртуальную машину minikube. Вы можете проверить другой ответ. - person Imen; 12.02.2018
comment
@Imen Проголосуйте за мой ответ, если считаете его полезным! Да, необходима настройка сети (маршрут) для перенаправления запросов с сервера на виртуальную машину minikube. - person Vikram Hosakote; 12.02.2018