[英]Can't create AWS ALB kubernetes ingress controller in Terraform
[英]How to create AWS ALB using kubernetes_ingress terraform resource?
我正在嘗試使用 Terraform 的kubernetes_ingress
資源將 Application Load Balancer 部署到 AWS:
我正在使用我已使用helm_release
資源安裝到集群的 aws-load-balancer-controller 。
現在我正在嘗試使用service
和ingress
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-name
和healthcheck-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.