AWS VPC - k8s - балансировка нагрузки - PullRequest
0 голосов
/ 20 февраля 2019

Извините за вопрос новичка;Я новичок в мире 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?Любое руководство и ссылки на документацию будут очень полезны.

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Зависит от того, как вы настроили службу K8s.

Если вы установили балансировщик нагрузки в AWS, то вы можете создать сервис с типом балансировки нагрузки для предоставления сервиса Интернету.Но это будет стоить много денег, потому что будет иметь 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

0 голосов
/ 04 марта 2019

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

  • Вы можете использовать балансировщик нагрузки приложений с 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 доступно множество ресурсов.

0 голосов
/ 20 февраля 2019

Как правило, у вас будет экземпляр балансировщика нагрузки 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 config.Для завершения работы в сети потребуется только один фактический балансировщик нагрузки 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

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

...