AWS VPC - k8s - балансировка нагрузки

Извините за вопрос новичка; Я новичок в мире k8s. Текущий способ развертывания заключается в развертывании приложения в EC2. Новый способ я пытаюсь развернуть контейнерное приложение в VPC.

По-старому AWS будет направлять трафик для aaa.bbb.com в vpc-ip:443 ELB, который далее направит его в ASG на private subnet:443 и приложение будет работать нормально.

С k8s на картинке, как выглядит поток трафика?

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

т.е.

xxx.yyy.com -> vpc-ip:443/ -> ec2:443/
aaa.bbb.com -> vpc-ip:9000/ -> ec2:9000/ 

Это выполнимо с k8s на том же VPC? Любое руководство и ссылки на документацию будут очень полезны.

2 ответа

Решение

В общем случае у вас будет экземпляр балансировщика нагрузки AWS, в котором будет несколько рабочих K8 в качестве внутреннего сервера с определенным портом. После трафика, поступающего на рабочие узлы, работа в сети внутри K8s взяла на себя эту работу

Предположим, вы настроили две службы K8S в качестве балансировщика нагрузки с портами 38473 и 38474 для двух ваших доменов соответственно:

xxx.yyy.com -> AWS LoadBalancer1 -> Node1:38473 -> K8s service1 -> K8s Pod1
                                 -> Node2:38473 -> K8s service1 -> K8s Pod2
aaa.bbb.com -> AWS LoadBalancer2 -> Node1:38474 -> K8s service2 -> K8s Pod3
                                 -> Node2:38474 -> K8s service2 -> K8s Pod4

Это простое решение, приведенное выше, потребует от вас создания различных служб в качестве балансировщика нагрузки, что увеличит ваши затраты, поскольку они являются фактическими экземплярами балансировщика нагрузки AWS. Чтобы снизить стоимость, вы могли бы иметь ingress-controller экземпляр в вашем кластере и напишите ingress конфигурации. Для завершения работы сети потребуется только один фактический балансировщик нагрузки AWS:

xxx.yyy.com -> AWS LoadBalancer1 -> Node1:38473 -> Ingress-service -> K8s service1 -> K8s Pod1
                                 -> Node2:38473 -> Ingress-service -> K8s service1 -> K8s Pod2
aaa.bbb.com -> AWS LoadBalancer1 -> Node1:38473 -> Ingress-service -> K8s service2 -> K8s Pod3
                                 -> Node2:38473 -> Ingress-service -> K8s service2 -> K8s Pod4

Для получения дополнительной информации, вы можете обратиться к дополнительной информации здесь:

Это зависит от того, как вы установили сервис K8s.

Если вы установили loadbalancer в AWS, то вы можете создать сервис с типом loadbalancer для предоставления сервиса Интернету. Но это будет стоить много денег, потому что будет иметь ELB для каждой услуги. для получения дополнительной ссылки https://kubernetes.io/docs/concepts/services-networking/service/

Другой вариант - вход, но он будет сложнее, если вы не знакомы с K8s, но вход - более популярный способ выставить ваш K8S в Интернет.

Эта статья может дать вам лучшее представление о ELB <> K8s.
https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

То, что вы пытаетесь сделать, не самый оптимальный по стоимости и стандартный подход для этого на EKS. Ресурс LoadBalancer в кластере kubernetes сопоставляется с классическим балансировщиком нагрузки в AWS. При таком подходе новый ELB запускается для каждой службы k8s, которую вы создаете с помощью балансировщика нагрузки типа. Для этого существует несколько подходов, в зависимости от того, что лучше всего соответствует вашему варианту использования.

  • Вы можете использовать Application Load Balancer с EKS для обработки входа в ваш кластер. Вам потребуется развернуть входной контроллер ALB, который будет управлять назначением настроенного ALB каждому входному ресурсу, который вы создаете в своем кластере K8s. Хотя интеграция ALB с EKS все еще относительно нова, и существуют определенные недостатки использования ALB с EKS прямо сейчас. Один из них заключается в том, что он не работает во всех пространствах имен в кластере, т. Е. Для каждого входящего ресурса в новом пространстве имен контроллер входа ALB запускает новый ALB, что не очень выгодно, если в вашем кластере несколько пространств имен.,

  • Вы можете выставить свой кластер, используя единый балансировщик нагрузки, и направить все входящие запросы на внутренний входной прокси. nginx легко реализуем и прекрасно работает с входящим ресурсом k8s. Вам придется развернуть входной контроллер nginx в вашем кластере. Контроллер будет обрабатывать назначение elb входному ресурсу. (Бонус: вход nginx работает через пространства имен, в отличие от ALB).

  • Вы также можете использовать сетевой балансировщик нагрузки, если хотите подключиться с помощью частной ссылки VPC. Примером использования будет API. Вы можете запустить нагрузку кластера в частных подсетях и использовать внутреннюю NLB. Затем подключите этот NLB к службе шлюза API через частный канал VPC.

Вот git-репозиторий с некоторым вспомогательным кодом при развертывании ALB с EKS:

https://github.com/pahud/eks-alb-ingress

Есть много ресурсов, доступных для подхода nginx.

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