【问题标题】:Terraform AWS NLB TLS PassthroughTerraform AWS NLB TLS 直通
【发布时间】:2021-06-23 17:20:12
【问题描述】:

我使用 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
}

这是我的代码的精简版。

我已将入口控制器配置为分别在 NodePorts 30000 和 30001 上侦听 HTTP 和 HTTPS。这也有效。

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

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

【问题讨论】:

    标签: amazon-web-services terraform tls1.2 nlb


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我没有尝试标题,因为我认为它会失败,0 但错误的假设会导致大量不必要的工作和复杂性,所以我会先尝试一下。谢谢
    • 啊,我明白了,谢谢。 TLS 直通不涉及会话的 TLS 部分中的 lb - 它实际上只是将任何 TCP 流量传递到目标组。我真的把它复杂化了!
    • @SoftwareEngineer 就是这样。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2020-04-07
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多