Am mai multe instanțe EC2 implementate cu o configurație standard constând dintr-un proxy invers și un sortiment de gateway-uri API. Gateway-urile și proxy-urile inverse folosesc HTTP/HTTPS și așa ascultă pe 80/443. Problema evidentă aici este că există coliziuni de porturi dacă serviciile partajează aceeași instanță, așa că îi atribui fiecăruia un port unic (non-standard), de exemplu 8080 și 7777.
Există modalități cu Terraform de a găzdui aceste servicii pe aceleași mașini și de a mapa porturile printr-un NLB. De exemplu, aici echilibratorul de încărcare a rețelei acceptă traficul TCP pe 443 și redirecționează către un port non-standard.
https://api.domain.com --> (backend1.compute.internal:7777, backend2.compute.internal:7777)
https://web.domain.com --> (backend1.compute.internal:8080, backend2.compute.internal:8080)
Aici am două instanțe EC2, backend1
și backend2
și 2 NLB api.domain.com
și web.domain.com
.
Am încercat și nu am reușit să trimit de la un aws_lb_listener
la a aws_lb_target_group
folosind diferite porturi. De exemplu.
resursă „aws_lb_listener” „api_ingress_http” {
load_balancer_arn = aws_lb.api_nlb.arn
protocol = "TCP"
port = 80
acțiune_default {
tip = "înainte"
target_group_arn = aws_lb_target_group.api_http.arn
}
}
resursă „aws_lb_target_group” „api_http” {
nume = "prod-api-http"
vpc_id = var.vpc_id
target_type = „instanță”
protocol = "TCP"
port = 80 <<------------------- Dacă acesta este 8080 sau 7777, eșuează
}
Cum configurez un aws_lb_target_group
care are un port diferit de cel al ascultătorului?
Notă
Am nevoie de o latență ultra scăzută și de cel mai mare debit posibil, microsecundele contează aici. Aceasta înseamnă că Docker și un ALB sunt excluse (latența testată este intervalul de milisecunde).