【发布时间】:2022-01-03 07:16:46
【问题描述】:
我正在尝试使用 Terraform 的 kubernetes_ingress 资源将 Application Load Balancer 部署到 AWS:
我正在使用aws-load-balancer-controller,我使用helm_release 资源安装到我的集群。
现在我正在尝试使用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?
谢谢!
【问题讨论】:
-
您能分享使用 helm_release 安装 aws-load-balancer-controller 的 tf 文件吗?
-
您自己需要它吗?如果是这样,请在 PM 中 ping 我,我会发送给您。编辑:如果需要,您实际上可以在我的仓库中找到它:github.com/matewilk/questo/blob/master/tf/k8s/…
标签: amazon-web-services kubernetes terraform load-balancing