使用terraform,我在亚马逊网络服务中为我的K3S集群提供了基础设施。我已经在端口80和443上为NLB配置了两个侦听器,并提供了相应的自签名证书。这是可行的。我可以通过nlb访问集群中的HTTP服务。
resource "tls_private_key" "agents" {
algorithm = "RSA"
}
resource "tls_self_signed_cert" "agents" {
key_algorithm = "RSA"
private_key_pem = tls_private_key.agents.private_key_pem
validity_period_hours = 24
subject {
common_name = "my hostname"
organization = "My org"
}
allowed_uses = [
"key_encipherment",
"digital_signature",
"server_auth"
]
}
resource "aws_acm_certificate" "agents" {
private_key = tls_private_key.agents.private_key_pem
certificate_body = tls_self_signed_cert.agents.cert_pem
}
resource "aws_lb" "agents" {
name = "basic-load-balancer"
load_balancer_type = "network"
subnet_mapping {
subnet_id = aws_subnet.agents.id
allocation_id = aws_eip.agents.id
}
}
resource "aws_lb_listener" "agents_80" {
load_balancer_arn = aws_lb.agents.arn
protocol = "TCP"
port = 80
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.agents_80.arn
}
}
resource "aws_lb_listener" "agents_443" {
load_balancer_arn = aws_lb.agents.arn
protocol = "TLS"
port = 443
certificate_arn = aws_acm_certificate.agents.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.agents_443.arn
}
}
resource "aws_lb_target_group" "agents_80" {
port = 30000
protocol = "TCP"
vpc_id = var.vpc.id
depends_on = [
aws_lb.agents
]
}
resource "aws_lb_target_group" "agents_443" {
port = 30001
protocol = "TCP"
vpc_id = var.vpc.id
depends_on = [
aws_lb.agents
]
}
resource "aws_autoscaling_attachment" "agents_80" {
autoscaling_group_name = aws_autoscaling_group.agents.name
alb_target_group_arn = aws_lb_target_group.agents_80.arn
}
resource "aws_autoscaling_attachment" "agents_443" {
autoscaling_group_name = aws_autoscaling_group.agents.name
alb_target_group_arn = aws_lb_target_group.agents_443.arn
}这是我代码的精简版本。
我已经将我的入口控制器配置为分别侦听NodePorts 30000和30001上的HTTP和HTTPS。这也行得通。
不起作用的是NLB正在终止TLS,但我需要它通过。我这样做是为了访问Kubernetes Dashboard (以及其他应用程序),但仪表板需要https登录,如果tls在nlb终止,我无法提供这一点。
我需要帮助为直通配置nlb。我找了又找,都找不到任何例子。如果有人知道如何配置它,最好是获得一些tf代码,或者甚至是在AWS中实现它的适当方式的想法,这样我就可以在tf中自己实现它。
发布于 2021-03-27 06:28:43
您是否需要TLS直通,或者只需要NLB和服务器之间的TLS通信?或者,您是否只需要配置您的服务器,使其知道初始连接是TLS?
对于TLS passthrough,您需要在服务器上安装SSL证书,然后从负载平衡器中删除该证书。您可以将负载均衡器上的端口443侦听器的协议从"TLS“更改为"TCP”。这不是AWS上非常典型的设置,您不能在此配置中使用免费的AWS ACM SSL证书,您必须在服务器上使用类似于Let's Encrypt的设置。
对于NLB和服务器之间的TLS通信,您可以在服务器上安装证书,自签名证书就可以了,然后只需更改负载均衡器上的目标组设置,使其指向服务器上的安全端口。
如果您只想让服务器知道初始连接协议是TLS,则可以将服务器配置为使用负载均衡器传递的x-forwarded-proto标头来确定连接是否安全。
https://stackoverflow.com/questions/66824393
复制相似问题