gpt4 book ai didi

amazon-web-services - Terraform AWS NLB TLS 直通

转载 作者:行者123 更新时间:2023-12-02 02:18:21 25 4
gpt4 key购买 nike

使用 terraform,我在 AWS 中为我​​的 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
}

这是我的代码的精简版本。

我已将入口 Controller 配置为分别监听 NodePort 30000 和 30001 上的 HTTP 和 HTTPS。这也有效。

不起作用的是 NLB 正在终止 TLS,但我需要它来直通。我这样做是为了访问 Kubernetes 仪表板(以及其他应用程序),但仪表板需要 https 才能登录,如果 tls 在 nlb 处终止,我将无法提供此功能。

我需要帮助配置 nlb 以进行直通。我搜索了又搜索,找不到任何例子。如果有人知道如何配置它,最好能获得一些 tf 代码,甚至只是了解在 AWS 中实现它的适当方法,以便我可以自己在 tf 中实现它。

最佳答案

您需要 TLS 直通,还是仅需要 NLB 和服务器之间的 TLS 通信?或者您是否只需要配置您的服务器以了解初始连接是 TLS?

对于 TLS 直通,您需要在服务器上安装 SSL 证书,然后从负载均衡器中删除该证书。您可以将负载均衡器上端口 443 监听器的协议(protocol)从“TLS”更改为“TCP”。这不是 AWS 上非常典型的设置,您无法在此配置中使用免费的 AWS ACM SSL 证书,您必须在服务器上使用 Let's Encrypt 之类的东西。

对于 NLB 和服务器之间的 TLS 通信,您可以在服务器上安装证书(自签名证书就可以),然后只需更改负载均衡器上的目标组设置以指向安全端口在服务器上。

如果您只是想让服务器知道初始连接协议(protocol)是 TLS,您可以将服务器配置为使用负载均衡器传递的 x-forwarded-proto header 来确定是否连接是安全的。

关于amazon-web-services - Terraform AWS NLB TLS 直通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66824393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com