Возможно, это слишком поздно и не совсем то, о чем просил исходный пост. Неофициально вы можете создать несколько сервисов для вашего входящего контроллера и, таким образом, также сопоставить несколько IP-адресов. Единственное ограничение одной службы k8s типа LoadBalancer
состоит в том, что она может ссылаться только на один IP-адрес.
В моем случае у меня есть кластер AKS с множеством пространств имен и различными приложениями, доступными по разным URL-адресам. Каждый URL-адрес имеет свой общедоступный IP-адрес по историческим причинам:
Пример:
first.example.com -> 1.2.3.4
second.example.com -> 5.6.7.8
...we could go on, IPs are just made up!
Я хотел установить вход nginx в AKS, который будет обрабатывать маршрутизацию для всех пространств имен вместо обработки каждого приложения с помощью выделенной пары LoadBalancer и обратного прокси. Для этого я выполнил шаги, описанные здесь, и предоставил только один из IP-адресов как controller.service.loadBalancerIP=”1.2.3.4”
во время входящего развертывания (с использованием helm).
После этих шагов я мог увидеть эти службы:
PS C:\> kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.0.141.84 1.2.3.4 80:30065/TCP,443:31444/TCP 14h
ingress-nginx-controller-admission ClusterIP 10.0.168.127 <none> 443/TCP 14h
После этого я вручную создал другую службу ingress-nginx-controller-second
с точно такими же метками селектора и следующим loadBalancerIP: 5.6.7.8
.
После этих шагов я мог видеть эти службы:
PS C:\> kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.0.141.84 1.2.3.4 80:30065/TCP,443:31444/TCP 14h
ingress-nginx-controller-admission ClusterIP 10.0.168.127 <none> 443/TCP 14h
ingress-nginx-controller-second LoadBalancer 10.0.204.118 5.6.7.8 80:31275/TCP,443:32751/TCP 10m
Теперь, если я приведу пример входящего трафика, который я определил для двух приложений, вы увидите, что оба имеют один и тот же первый общедоступный IP-адрес. Это связано с тем, что этот IP-адрес используется при входе в качестве IP-адреса публикации. Тем не менее, маршрутизация работает хорошо, поскольку вторая служба перенаправляет весь трафик на один и тот же контроллер ingress-nginx, и вы можете выполнять маршрутизацию на основе разных хостов / путей, как всегда.
PS C:\Users\sk1u04h9> kubectl get ingress -A
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
first first-ingress <none> first.example.com 1.2.3.4 80, 443 14h
second second-ingress <none> second.example.com 1.2.3.4 80, 443 5m
Я надеюсь, что это поможет кому-то, кто пытается перейти на nginx ingress без необходимости заранее указывать все URL-адреса, указывающие на один общедоступный IP-адрес. Вы можете запросить, чтобы все URL-адреса указывали только на один IP-адрес, если это необходимо, после этого шага миграции, а затем вы, конечно, можете удалить все ingress-nginx-controller-*
службы, которые больше не понадобятся.
person
petermicuch
schedule
04.12.2020