Завести #external (internet-facing/#public) #LoadBalancer (#ELB/#ALB/#NLB) на расположенные в #private #subnet виртуалки никаких проблем нет. Просто указываем для него, как и положено, #DMZ #subnet (#public):
А виртуалкам, расположенным и в #private_subnet добавляем в #security_group правила полного доступа с данного балансера:
#CloudFormation #templates
albExt:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: externalAlb
Scheme: internet-facing
Subnets: # DMZ if public
- !ImportValue subnetVpc4DmzA
- !ImportValue subnetVpc4DmzB
SecurityGroups:
- !Ref sgAlb
А виртуалкам, расположенным и в #private_subnet добавляем в #security_group правила полного доступа с данного балансера:
sgInstance:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !ImportValue vpc4
GroupDescription: Full access for ALB
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 0
ToPort: 65535
SourceSecurityGroupId: !Ref sgAlb
Description: All TCP trafic - only for ALB
#CloudFormation #templates
Amazon Web Services, Inc.
Attach EC2 instances with private IP addresses to an internet-facing load balancer
I have an internet-facing Elastic Load Balancing (ELB) load balancer. I want to attach backend Amazon Elastic Compute Cloud (Amazon EC2) instances located in a private subnet.
При использовании #DNS #Alias нужно учитывать, что #HostedZoneId разный для разных Alias Target.
Для #CloudFront он фиксированный Z2FDTNDATAQYW2:
Для #LoadBalancer нужно получать его через #GetAtt, для #ELB это:
Для #ALB это:
Для #alias на другую #RecordSet нужно получать #HostedZoneId домена:
def Result = sh( script: 'aws route53 list-hosted-zones-by-name --dns-name '+gos.MainDomain, returnStdout: true )
def ResultJson = readJSON ( text: Result )
Stack['dns']['params']['HostedZoneIdDomain'] = ResultJson['HostedZones'][0]['Id'].split('/')[2]
Для #CloudFront он фиксированный Z2FDTNDATAQYW2:
aliasSite:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneName: !Join ['', [!Ref MainDomain, '.']]
Name: !Ref MainDomain
Type: A
AliasTarget:
DNSName: !Ref CnameSite
HostedZoneId: Z2FDTNDATAQYW2
Для #LoadBalancer нужно получать его через #GetAtt, для #ELB это:
HostedZoneId1:
Value: !GetAtt [elbExt, 'CanonicalHostedZoneNameID']Для #ALB это:
HostedZoneId1:
Value: !GetAtt [albExt, 'CanonicalHostedZoneID']Для #alias на другую #RecordSet нужно получать #HostedZoneId домена:
def Result = sh( script: 'aws route53 list-hosted-zones-by-name --dns-name '+gos.MainDomain, returnStdout: true )
def ResultJson = readJSON ( text: Result )
Stack['dns']['params']['HostedZoneIdDomain'] = ResultJson['HostedZones'][0]['Id'].split('/')[2]
Amazon
Values specific for simple alias records - Amazon Route 53
When you create alias records, you specify the following values. For more information, see .
При использовании #ELB (созданного через #CloudFormation) с большим количеством инстансов, стоит помнить про фичу Cross-Zone Load Balancing, которая отключена по умолчанию (при создании балансера через консоль - включена по умолчанию).
Итого: для #ELB её нужно включать для более гладкого распределения трафика. У #ALB всегда включена, у #NLB - нужно включать самому.
Итого: для #ELB её нужно включать для более гладкого распределения трафика. У #ALB всегда включена, у #NLB - нужно включать самому.
Amazon
How Elastic Load Balancing works - Elastic Load Balancing
Learn more about how Elastic Load Balancing works.
В случаях, когда нужно иметь #StaticIP для #ALB обычно используется #NLB перед ним (который имеет статический IP для каждой зоны) и #lambda, которая отрабатывает регистрации текущих IP у ALB в качестве целей для NLB.
https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/
С появлением AWS Global Accelerator можно упростить реализацию ALB Static IP, поставив перед ALB #Global_Accelerator (вместо NLB + Lambda). Решение "с перебором" (и более дороже), но может оказаться быстрым "на попробовать" и где-то более удобным в поддержке.
https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/
С появлением AWS Global Accelerator можно упростить реализацию ALB Static IP, поставив перед ALB #Global_Accelerator (вместо NLB + Lambda). Решение "с перебором" (и более дороже), но может оказаться быстрым "на попробовать" и где-то более удобным в поддержке.
Amazon
Using AWS Lambda to enable static IP addresses for Application Load Balancers | Amazon Web Services
Update: On September 27th, 2021, we launched Application Load Balancer(ALB)-type target groups for Network Load Balancer (NLB). With this launch, you can register ALB as a target of NLB to forward traffic from NLB to ALB without needing to actively manage…
Least Outstanding Requests (LOR) балансировка для ALB
При распределении запросов за ALB используется обычный Round-Robin. Теперь же можно задать Least Outstanding Requests (LOR) - маршрутизировать запросы сначала к тем, кто лучше пингуется:
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm
То есть запросы будут получать инстансы с учётом значений RequestCount, TargetConnectionErrorCount и TargetResponseTime.
Не на всех типах нагрузки это отразится, однако денег лишних не просит, а первые результаты очень положительные (см. картинку), потому точно стоит попробовать.
Включается в консоли в Target Groups или с помощью #aws_cli:
https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-target-group-attributes.html
Удачных экспериментов!
#ALB
При распределении запросов за ALB используется обычный Round-Robin. Теперь же можно задать Least Outstanding Requests (LOR) - маршрутизировать запросы сначала к тем, кто лучше пингуется:
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm
То есть запросы будут получать инстансы с учётом значений RequestCount, TargetConnectionErrorCount и TargetResponseTime.
Не на всех типах нагрузки это отразится, однако денег лишних не просит, а первые результаты очень положительные (см. картинку), потому точно стоит попробовать.
Включается в консоли в Target Groups или с помощью #aws_cli:
https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-target-group-attributes.html
Удачных экспериментов!
#ALB
Least Outstanding Requests в действии
В конце прошлого года к стандартному Round-Robin алгоритму раздачи трафика лоадбалансером добавился ещё и Least Outstanding Requests. Кто сие пропустил или просто интересно взглянуть, что это и как работает — очень хорошая статейка:
https://medium.com/dazn-tech/aws-application-load-balancer-algorithms-765be2eca158
Тестирование у автора показало местами кратный прирост скорости. Так что очень стоит взглянуть и попробовать у себя.
#ALB
В конце прошлого года к стандартному Round-Robin алгоритму раздачи трафика лоадбалансером добавился ещё и Least Outstanding Requests. Кто сие пропустил или просто интересно взглянуть, что это и как работает — очень хорошая статейка:
https://medium.com/dazn-tech/aws-application-load-balancer-algorithms-765be2eca158
Тестирование у автора показало местами кратный прирост скорости. Так что очень стоит взглянуть и попробовать у себя.
#ALB
ALB + Static IP
Получить статический айпишник для ALB можно в пару кликов, включив поддержку Global Accelerator во вкладке Integrated services (на картинке).
https://docs.aws.amazon.com/global-accelerator/latest/dg/about-accelerators.alb-accelerator.html
Конечно, этот айпишник будет у Global Accelerator, который добавит некоторые расходы ко всей конструкции, но также и даст ускорение при работе с клиентами по всему миру за счёт того, что запросы будут ходить на ALB через ближайшие к клиенту Edge точки Амазона (далее внутри по инфраструктуре AWS, а не через интернет).
#ALB #Global_Accelerator
Получить статический айпишник для ALB можно в пару кликов, включив поддержку Global Accelerator во вкладке Integrated services (на картинке).
https://docs.aws.amazon.com/global-accelerator/latest/dg/about-accelerators.alb-accelerator.html
Конечно, этот айпишник будет у Global Accelerator, который добавит некоторые расходы ко всей конструкции, но также и даст ускорение при работе с клиентами по всему миру за счёт того, что запросы будут ходить на ALB через ближайшие к клиенту Edge точки Амазона (далее внутри по инфраструктуре AWS, а не через интернет).
#ALB #Global_Accelerator
Один ALB балансер для всех ингрессов:
https://aws.amazon.com/blogs/containers/introducing-aws-load-balancer-controller/
Раньше на каждый ингресс создавался отдельный ALB, теперь же можно использовать один (общий для разных/нескольких ингрессов), как для ELB (Classic балансера).
#ALB #EKS
https://aws.amazon.com/blogs/containers/introducing-aws-load-balancer-controller/
Раньше на каждый ингресс создавался отдельный ALB, теперь же можно использовать один (общий для разных/нескольких ингрессов), как для ELB (Classic балансера).
#ALB #EKS
Amazon
Introducing the AWS Load Balancer Controller | Amazon Web Services
The AWS ALB ingress controller allows you to easily provision an AWS Application Load Balancer (ALB) from a Kubernetes ingress resource. Kubernetes users have been using it in production for years and it’s a great way to expose your Kubernetes services in…
ALB + HTTP/2 + gRPC:
https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/
#ALB
https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/
#ALB
Amazon
New – Application Load Balancer Support for End-to-End HTTP/2 and gRPC | Amazon Web Services
Thanks to its efficiency and support for numerous programming languages, gRPC is a popular choice for microservice integrations and client-server communications. gRPC is a high performance remote procedure call (RPC) framework using HTTP/2 for transport and…
Подробности причин возникновения
https://www.tessian.com/blog/how-to-fix-http-502-errors/
#ALB
Error 502 при работе с ALB:https://www.tessian.com/blog/how-to-fix-http-502-errors/
#ALB
Tessian
How to Fix 502 Errors - Tessian
Struggling with HTTP 502 “Bad Gateway” errors? A Tessian engineer explains why these errors happen and how to fix them with AWS ALB.