Как выставить стручки 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.
Чтобы выставить модули или развертывания, вы должны сделать следующее.
- Использовать
nodeport
флаг для назначения одного и того же порта всем узлам приложению. Kubernetes создаст ServiceIP, где ваше приложение будет выставлено.
kubectl expose <deployment> --nodeport=<common-port> --port=<container-port>
После создания экспонирующего сервиса вы можете получить свой ServiceIP с kubectl get services
Используйте nginx или другой балансировщик нагрузки для обратного прокси в ваших узлах. Я настроил nginx для proxy_pass для моего приложения, создав файл по умолчанию в
/etc/nginx/sites-enabled
сервер {слушай 80;
location / {proxy_pass http://ServiceIP:ApplicationPort; }}
Этот метод обеспечивает уникальную маршрутизацию и равномерную балансировку нагрузки.