首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform AWS NLB TLS直通

Terraform AWS NLB TLS直通
EN

Stack Overflow用户
提问于 2021-03-27 05:15:20
回答 1查看 931关注 0票数 2

使用terraform,我在亚马逊网络服务中为我的K3S集群提供了基础设施。我已经在端口80和443上为NLB配置了两个侦听器,并提供了相应的自签名证书。这是可行的。我可以通过nlb访问集群中的HTTP服务。

代码语言:javascript
复制
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中自己实现它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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标头来确定连接是否安全。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66824393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档