#kubernetes-ingress #nginx-ingress #metallb #bare-metal-server
#kubernetes-вход #вход nginx #metallb #голый металл-сервер
Вопрос:
У меня есть 3-узловой кластер k8s в моей виртуальной среде, который является VMware Fusion.
При попытке создать базовый вход требуется мой один node_ip, который является запущенным nginx_controller.
Но порт 80 открыт не на всех узлах. Я имею в виду, что он не работает
curl: (7) Failed to connect to 172.16.242.133 port 80: Connection refused
Чего мне не хватает?
- Я установил контроллер входа Nginx
- Я установил MetalLB и настроил его. Он работает, если я создаю сервис с типом: LoadBalancer. Он принимает IP-адрес ExernalIp, и я могу получить к нему доступ.
- Я развертываю базовое приложение для тестирования.
- Я создаю сервис для приложения. Я могу получить доступ к NodePort или CulesterIP. Я пробовал оба.
- Я создаю базовый вход для управления хостами и персоналом маршрутизации. Но этот шаг я застрял.
Мои вопросы ;
1-) Обычно какой вход должен принимать Ip-адрес в качестве адреса? Один из моих узлов или внешний IP-адрес DHCP.
2-) Когда я создаю сервис с типом: LoadBalancer, он принимает externalIP. Я могу записать DNS на этот IP-адрес, и клиенты могут получить к нему доступ. Что в этом плохого?
Ответ №1:
Вход поддерживает два типа типа обслуживания: NodePort
и LoadBalancer
.
При использовании NodePort
типа сервиса вы должны использовать nodeport
номер вместо порта 80 по умолчанию. Объяснение этого поведения доступно в документации по входу nginx:
Однако из-за изоляции пространства имен контейнера клиент, расположенный за пределами кластерной сети (например, в общедоступном Интернете), не может получить доступ к хостам Ingress напрямую через порты 80 и 443. Вместо этого внешний клиент должен добавить порт узла, выделенный службе ingress-nginx, к HTTP-запросам.
Итак, ваш curl должен выглядеть так:
curl 172.16.242.133:<node_port_number>
При использовании MetalLB
with LoadBalancer
service type он использует externalIPs
конфигурацию, указанную вами при установке metallb в кластере.
Более подробная информация о взаимодействии контроллера входа nginx с metallb доступна в документации nginx.
Для MetalLB требуется пул IP-адресов, чтобы иметь возможность стать владельцем службы ingress-nginx. Этот пул может быть определен в конфигурационной карте с именем config, расположенной в том же пространстве имен, что и контроллер MetalLB. Этот пул IP-адресов должен быть выделен для использования MetalLB, вы не можете повторно использовать IP-адреса узла Kubernetes или IP-адреса, передаваемые сервером DHCP.
Ответ №2:
Моя проблема заключалась в том, что я думал, что Ingress принимает IP-адрес, и мы записываем DNS на этот IP. Но это не так. Почему у объекта Ingress есть поле адреса и порта, я не знаю. Я думаю, просто для информации, но это сбивает с толку новичков. Клиенты получают доступ к входному контроллеру, а не к входному.
На самом деле служба Ingress Controller управляет externalIP или NodePort. Поэтому мы должны это настроить.
В моем случае nginx
kubectl edit service/ingress-nginx-controller -n ingress-nginx
Вы можете изменить тип на LoadBalancer, и вы получите externalIP после настройки MetalLB. И определите свои входные объекты, запишите записи DNS, тогда вы готовы.