Как выставить стручки k8 в общедоступный интернет?

В настоящее время я изучаю докер и kubernetes. Одна из проблем, с которой у меня возникают проблемы, - это показ моего модуля nginx общедоступному Интернету. Я хотел бы зайти на мой сервер IP из моего веб-браузера и увидеть страницу nginx, как если бы на сервере был установлен nginx.

pod-nginx.yml с веб-сайта kubernetes

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80

Я могу портировать вперед от модуля и затем получить доступ к странице nginx по умолчанию через curl.sudo kubectl port-forward nginx 80:80

curl http://localhost возвращает страницу nginx, а curl http://<serverIP> возвращается failed to connect <serverIP> port:80 Connection refused

Нужно ли переносить порт между общедоступным сетевым интерфейсом к сетевому интерфейсу кластера, изменяя правила iptables и firewall? Я чувствую, что я упускаю что-то действительно очевидное здесь.

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

2 ответа

Решение

Существуют разные способы предоставления ваших услуг:

  • Используя NodePort: Это откроет порт на хосте, где вы можете получить доступ к вашему сервису. Например, что-то вроде 192.168.100.99:37843, являющееся 192.168.100.99 одной из систем HOST, в которой установлен кластер.

  • Использование LoadBalancer: если ваш кластер находится в облаке, таком как Google, вы можете использовать базовую инфраструктуру для генерации внешнего IP- адреса для вашей службы. Я настаиваю на том, что базовое облако должно его поддерживать.

  • Использование правил входа: правильной альтернативой LoadBalancers является использование обратного прокси-сервера. Kubernetes позволяет вам прослушивать обратный прокси-сервер в портах 80 и 443 и, используя правила Ingress, перенаправлять трафик на ваши разные сервисы.

Глядя на ваш случай, я думаю, что опция Ingress Rules подойдет вашим потребностям. Если в вашем кластере не установлен контроллер Ingress, вы можете установить его на основе nginx.

Чтобы выставить модули или развертывания, вы должны сделать следующее.

  1. Использовать nodeport флаг для назначения одного и того же порта всем узлам приложению. Kubernetes создаст ServiceIP, где ваше приложение будет выставлено.

kubectl expose <deployment> --nodeport=<common-port> --port=<container-port>

После создания экспонирующего сервиса вы можете получить свой ServiceIP с kubectl get services

  1. Используйте nginx или другой балансировщик нагрузки для обратного прокси в ваших узлах. Я настроил nginx для proxy_pass для моего приложения, создав файл по умолчанию в /etc/nginx/sites-enabled

    сервер {слушай 80;

    location / {proxy_pass http://ServiceIP:ApplicationPort; }}

Этот метод обеспечивает уникальную маршрутизацию и равномерную балансировку нагрузки.

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