簡體   English   中英

如何使用 kubernetes_ingress terraform 資源創建 AWS ALB?

[英]How to create AWS ALB using kubernetes_ingress terraform resource?

我正在嘗試使用 Terraform 的kubernetes_ingress資源將 Application Load Balancer 部署到 AWS:

我正在使用我已使用helm_release資源安裝到集群的 aws-load-balancer-controller

現在我正在嘗試使用serviceingress deployment

這就是我的service的樣子:

resource "kubernetes_service" "questo-server-service" {
  metadata {
    name      = "questo-server-service-${var.env}"
    namespace = kubernetes_namespace.app-namespace.metadata.0.name
  }
  spec {
    selector = {
      "app.kubernetes.io/name" = lookup(kubernetes_deployment.questo-server.metadata.0.labels, "app.kubernetes.io/name")
    }

    port {
      port        = 80
      target_port = 4000
    }
    type = "LoadBalancer"
  }
}

這就是我的ingress的樣子:

resource "kubernetes_ingress" "questo-server-ingress" {
  wait_for_load_balancer = true
  metadata {
    name = "questo-server-ingress-${var.env}"
    namespace = kubernetes_namespace.app-namespace.metadata.0.name
    annotations = {
      "kubernetes.io/ingress.class" = "alb"
      "alb.ingress.kubernetes.io/target-type" = "instance"
    }
  }
  spec {
    rule {
      http {
        path {
          path = "/*"
          backend {
            service_name = kubernetes_service.questo-server-service.metadata.0.name
            service_port = 80
          }
        }
      }
    }
  }
}

問題是當我運行terraform apply時,它會創建一個 Classic Load Balancer 而不是 Application Load Balancer。

我嘗試將service的類型更改為NodePort但沒有幫助。

我還嘗試向ingress添加更多注釋,例如"alb.ingress.kubernetes.io/load-balancer-name" = "${name}"但是它一次創建了兩個負載均衡器。 一個內部 ALB 和一個面向 Internet 的 CLB。

有什么想法可以使用此設置創建面向 Internet 的應用程序負載均衡器嗎?

- - 更新 - -

我注意到,實際上,該service是 Classic Load Balancer,我可以通過它連接到我的deployment

Ingress 創建了一個 ALB,但它的前綴是internal ,所以我的問題是,如何創建一個面向 Internet 的 ALB?

謝謝!

嘗試使用alb.ingress.kubernetes.io/scheme: internet-facing注釋。

您可以在此處找到所有可用注釋的列表: https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/

像大多數時候一樣回答我自己的問題:)

這是正確的設置,以防萬一有人遇到它:

service的類型必須是NodePort

resource "kubernetes_service" "questo-server-service" {
  metadata {
    name      = "questo-server-service-${var.env}"
    namespace = kubernetes_namespace.app-namespace.metadata.0.name
  }
  spec {
    selector = {
      "app.kubernetes.io/name" = lookup(kubernetes_deployment.questo-server.metadata.0.labels, "app.kubernetes.io/name")
    }

    port {
      port        = 80
      target_port = 4000
    }
    type = "NodePort"
  }
}

並且ingress的注釋必須設置如下:(您可以忽略load-balancer-namehealthcheck-pass因為它們與問題無關:

resource "kubernetes_ingress" "questo-server-ingress" {
  wait_for_load_balancer = true
  metadata {
    name      = "questo-server-ingress-${var.env}"
    namespace = kubernetes_namespace.app-namespace.metadata.0.name
    annotations = {
      "kubernetes.io/ingress.class"                  = "alb"
      "alb.ingress.kubernetes.io/target-type"        = "ip"
      "alb.ingress.kubernetes.io/scheme"             = "internet-facing"
      "alb.ingress.kubernetes.io/load-balancer-name" = "questo-server-alb-${var.env}"
      "alb.ingress.kubernetes.io/healthcheck-path"   = "/health"
    }
  }

  spec {
    rule {
      http {
        path {
          path = "/*"
          backend {
            service_name = kubernetes_service.questo-server-service.metadata.0.name
            service_port = 80
          }
        }
      }
    }
  }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM