ЁЯЫОя╕П рдзрдбрд╛ 15 тАФ Load balancers: рдЧрд░реНрджреА рд╡рд╛рдЯрдгрд╛рд░реЗ reception (Layer 7 load balancer)
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 15 ┬╖ рдорд╛рдЧреАрд▓: lesson-14-s3 ┬╖ рдкреБрдвреАрд▓: lesson-16-route53
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ15. Public рд╡рд┐рднрд╛рдЧрд╛рд▓рд╛ рдЕрдЦреЗрд░ рддреНрдпрд╛рдЪрд╛ рд░рд╣рд┐рд╡рд╛рд╕реА рдорд┐рд│рддреЛ: рд░рд╕реНрддреНрдпрд╛рдХрдбреЗ рддреЛрдВрдб рдХрд░реВрди рдЙрднреА рд░рд╛рд╣рд╛рдпрд▓рд╛рдЪ рд╣рд╡реА рдЕрд╢реА рдПрдХрдореЗрд╡ рдЧреЛрд╖реНрдЯ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдХреНрд░реАрдбрд╛ рджрд┐рди: рд╕рдЧрд│реЗ рдЧрд╛рд╡ рд▓реЛрдЯрддреЗ. рддреБрдореНрд╣реА рдЧрд░реНрджреАрд▓рд╛ corridors рдордзреНрдпреЗ рдлрд┐рд░рдд рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рджрд╛рд░рд╛рдВрд╡рд░ рдареЛрдард╛рд╡реВ рджреЗрдд рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА gate рд╡рд░ рдПрдХ reception desk ЁЯЫОя╕П рдареЗрд╡рддрд╛. рддреЗрдЪ рдЖрд╣реЗ Application Load Balancer (ALB).
- рдЧрд░реНрджреА рдПрдХрд╛рдЪ рдкрддреНрддреНрдпрд╛рд╢реА рдмреЛрд▓рддреЗ тАФ reception рд╢реА. рдмрд╛рдХрд╛рдВрд╢реА рдХрдзреАрдЪ рдирд╛рд╣реА.
- Reception рдХрдбреЗ рдЙрддреНрддрд░ рджреЗрдК рд╢рдХрдгрд╛рд▒реНрдпрд╛ рдмрд╛рдХрд╛рдВрдЪреА рдпрд╛рджреА рдЕрд╕рддреЗ тАФ target group ЁЯУЛ.
- рджрд░ рдХрд╛рд╣реА seconds рд▓рд╛ рддреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХрд╛рд▓рд╛ рд╡рд┐рдЪрд╛рд░рддреЗ "рдЙрддреНрддрд░ рджреНрдпрд╛рдпрд▓рд╛ рддрдпрд╛рд░?" тАФ health check ЁЯЩЛ. рдЙрддреНрддрд░ рдирд╛рд╣реА тЖТ рд╢рд╛рдВрддрдкрдгреЗ рд╡рдЧрд│рд▓реЗ рдЬрд╛рддреЗ, restart рдирд╛рд╣реА, рдЧреЛрдВрдзрд│ рдирд╛рд╣реА. (рдУрд│рдЦреАрдЪреЗ рд╡рд╛рдЯрддреЗ? рддреЗрдЪ k8s рдЪреЗ readiness probe, рдПрдХ рдордЬрд▓рд╛ рдЦрд╛рд▓реА.)
- рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдлрд▓рдХ ЁЯкз (listener rules) рд▓реЛрдХ рдХрд╛рдп рдорд╛рдЧрддрд╛рдд рддреНрдпрд╛рдиреБрд╕рд╛рд░ рдкрд╛рдард╡рддреЛ:
/api/*тЖТ рдЧрдгрд┐рдд рд╡рд┐рднрд╛рдЧ, рдмрд╛рдХреА рд╕рдЧрд│реЗ тЖТ web рд╡рд┐рднрд╛рдЧ. (рдЖрдгрд┐ k8s Ingress рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдпрд╛рдЪ desk рд╡рд░ рдЪрд╛рд▓рддреЗ тАФ ingress controller рдлрдХреНрдд рд╣рд╛ рдлрд▓рдХ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд▓рд┐рд╣рд┐рддреЛ.)
рдПрдХ pneumatic tube рдкрдг рдЖрд╣реЗ тАФ NLB: рддреЗ requests рд╡рд╛рдЪрдд рдирд╛рд╣реА, рдлрдХреНрдд network packets рддрд╛рд░реЗрдЪреНрдпрд╛ рд╡реЗрдЧрд╛рдиреЗ рдмрд╛рдХрд╛рдВрдХрдбреЗ рдлреЗрдХрддреЗ (L4, ALB рдЪреНрдпрд╛ L7 рд╡рд┐рд░реБрджреНрдз). Databases рдЖрдгрд┐ game servers tube рдШреЗрддрд╛рдд; websites reception рдШреЗрддрд╛рдд.
- ALB рдХрд┐рдорд╛рди 2 рдЗрдорд╛рд░рддреАрдВрдЪреНрдпрд╛ public рд╡рд┐рднрд╛рдЧрд╛рдВрдд рдЙрднреЗ рдЕрд╕рддреЗ (рдЕрдЦреЗрд░, рдзрдбрд╛ 13 рдХрд╛рдореА рдпреЗрддреЛ); рдмрд╛рдХ private рд░рд╛рд╣рддрд╛рдд. рдмрд╛рдХрд╛рдВрдЪреНрдпрд╛ рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрд╡рд░рдЪреЗ рдПрдХрдореЗрд╡ рджрд╛рд░ (рдзрдбрд╛ 10): "рдлрдХреНрдд reception рдЪреНрдпрд╛ SG рдХрдбреВрди" тАФ SG-references-SG, security-groups рдзрдбреНрдпрд╛рддреАрд▓ pattern, рдЖрддрд╛ рднрд╛рд░ рд╡рд╛рд╣рдгрд╛рд░рд╛.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
crowd["ЁЯзСтАНЁЯзСтАНЁЯзТ the town"]
alb["ЁЯЫОя╕П ALB тАФ reception<br/>public wings, AZ-a + AZ-b"]
rules["ЁЯкз signboard<br/>/api/* тЖТ api desks<br/>else тЖТ web desks"]
tg["ЁЯУЛ target group: web<br/>ЁЯЩЛ health-checked"]
d1["ЁЯЦея╕П desk (private, AZ-a)"]
d2["ЁЯЦея╕П desk (private, AZ-b)"]
dead["ЁЯШ┤ desk failing checks<br/>тЖТ skipped, not restarted"]
crowd -->|"1 one address"| alb -->|"2"| rules -->|"3"| tg
tg -->|"4"| d1
tg -->|"4"| d2
tg -.->|"skipped"| dead
тЭУ рдХрд╛рдп
- Listener: port + protocol (443 HTTPS тАФ certificate рдЗрдереЗ рд░рд╛рд╣рддреЗ, рддреНрдпрд╛рдорд╛рдЧреЗ рдмрд╛рдХ рд╕рд╛рдзреЗ HTTP рдмреЛрд▓реВ рд╢рдХрддрд╛рдд).
- Target group: рдмрд╛рдХ рдХрд┐рдВрд╡рд╛ IPs рдХрд┐рдВрд╡рд╛ Lambdas + health-check рдЪреА рдХреГрддреА
(path
/health, 2 рд╡реЗрд│рд╛ рдкрд╛рд╕ рдЭрд╛рд▓реНрдпрд╛рд╡рд░ healthy, 2 рд╡реЗрд│рд╛ рдирд╛рдкрд╛рд╕ рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдмрд╛рд╣реЗрд░). - ALB vs NLB: HTTP рд╡рд╛рдЪреВрди рд╣реБрд╢рд╛рд░реАрдиреЗ рдкрд╛рдард╡рдгреЗ vs рдХрдЪреНрдЪреЗ TCP/UDP рддрд╛рд░реЗрдЪреНрдпрд╛ рд╡реЗрдЧрд╛рдиреЗ, fixed IP рд╕рд╣. Websites/APIs тЖТ ALB; databases, MQTT, game servers тЖТ NLB.
- ASG рдЪреА рдЬреЛрдбреА (рдзрдбрд╛ 12): scale-out тЖТ рдирд╡реЗ рдмрд╛рдХ рдЖрдкреЛрдЖрдк target group рдордзреНрдпреЗ рд╕рд╛рдореАрд▓ рд╣реЛрддрд╛рдд; scale-in тЖТ рд╕рднреНрдпрдкрдгреЗ drain рд╣реЛрддрд╛рдд. рдХреЛрдгреАрд╣реА рд╣рд╛рддрд╛рдиреЗ рдпрд╛рджреА рдмрджрд▓рдд рдирд╛рд╣реА.
ЁЯдФ рдХрд╛
рдПрдХ рдмрд╛рдХ = failure рдЪрд╛ рдПрдХ рдмрд┐рдВрджреВ рдЖрдгрд┐ рдПрдХ рдЗрдорд╛рд░рдд. Reception + рджреЛрди рдЗрдорд╛рд░рддреАрдВрддреАрд▓ рдмрд╛рдХ = рдХреНрд░реАрдбрд╛ рджрд┐рдирд╛рдЪреНрдпрд╛ рдордзреНрдпреЗрдЪ рдПрдХ рдЗрдорд╛рд░рдд рдЬрд│реВрди рдЧреЗрд▓реА рддрд░реА рдЧрд╛рд╡рд╛рд▓рд╛ рдХрд╛рд╣реАрдЪ рдХрд│рдд рдирд╛рд╣реА. рдпрд╛рдЪ рдзрдбреНрдпрд╛рдд "multi-AZ" рдШреЛрд╖рдгрд╛ рд░рд╛рд╣рдд рдирд╛рд╣реА, рддрд░ рд╣реЛрддреЗ: рджреЛрди public рд╡рд┐рднрд╛рдЧрд╛рдВрдд ALB, рджреЛрди private рд╡рд┐рднрд╛рдЧрд╛рдВрдд рдмрд╛рдХ, рдЖрдгрд┐ рдХреЛрдг рдЙрддреНрддрд░ рджреЗрдИрд▓ рд╣реЗ health checks рдард░рд╡рддрд╛рдд.
ЁЯФз рдХрд╕реЗ
# what reception sees (which desks are healthy, and why not):
aws elbv2 describe-target-health --target-group-arn $TG_ARN \
--query 'TargetHealthDescriptions[].{id:Target.Id,state:TargetHealth.State,why:TargetHealth.Reason}'
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~15 рдорд┐рдирд┐рдЯреЗ, ~2┬в тАФ рдкрд╣рд┐рд▓рд╛ рджреЛрди-рдмрд╛рдХрд╛рдВрдЪрд╛ lab)
рдзрдбрд╛ 12 рдЪреНрдпрд╛ user-data рдиреЗ рджреЛрди t3.micro рдмрд╛рдХ рд╕реБрд░реВ рдХрд░рд╛ (рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рддрдГрдЪреЗ
hostname рджреЗрддреЛ), рд╕рдореЛрд░ ALB рдареЗрд╡рд╛, рдордЧ ALB рдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ watch curl рдХрд░рд╛ тАФ hostname
рдЖрд▓рдЯреВрди рдкрд╛рд▓рдЯреВрди рдпреЗрддреЗ. рдПрдХ рдмрд╛рдХ рдерд╛рдВрдмрд╡рд╛: traffic рди рддреБрдЯрддрд╛ рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ. рд╕рдЧрд│реЗ destroy рдХрд░рд╛.
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
describe-target-health рджреЛрдиреНрд╣реА рдмрд╛рдХ healthy рджрд╛рдЦрд╡рддреЗ; watch curl ALB_DNS hostnames рдЖрд▓рдЯреВрди рдкрд╛рд▓рдЯреВрди рджреЗрддреЛ; рдПрдХ рдмрд╛рдХ рдерд╛рдВрдмрд╡рд▓рд╛ рддрд░реА traffic рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
terraform destroy тАФ рд░рд┐рдХрд╛рдореЗ ALB рдХреЛрдгреА рднреЗрдЯ рджрд┐рд▓реА рдХрд┐рдВрд╡рд╛ рдирд╛рд╣реА рддрд░реА рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ bill рдХрд░рддреЗ (~$16/month)
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- 404 рджреЗрдгрд╛рд░рд╛ health check path тАФ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХ 'unhealthy', reception рд░рд┐рдХрд╛рдореЗ
- рдмрд╛рдХрд╛рдВрдЪрд╛ SG 'рдлрдХреНрдд ALB рдЪреНрдпрд╛ SG рдХрдбреВрди' рдРрд╡рдЬреА 0.0.0.0/0 allow рдХрд░рддреЛ
- ALB рдлрдХреНрдд рдПрдХрд╛ AZ рдордзреНрдпреЗ тАФ рддреНрдпрд╛рд▓рд╛ рджреЛрди public subnets рд▓рд╛рдЧрддрд╛рдд
тПня╕П рдкреБрдвреЗ
Reception рдЪрд╛ рдкрддреНрддрд╛ рд▓рд╛рдВрдм рдЖрдгрд┐ рдХреБрд░реВрдк рдЖрд╣реЗ (my-alb-1234.elb.amazonaws.com).
www.school.com рд▓рд╛ рддреЛ рдХрд╕рд╛ рд╕рд╛рдкрдбрддреЛ? рдзрдбрд╛ 16: phonebook тАФ Route 53.