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: https://kubernetes.io/docs/concepts/services-networking/service/
- Входной и входной контроллер (реализация Nginx): https://www.nginx.com/products/nginx/kubernetes-ingress-controller
Это зависит от того, как вы установили сервис 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.