【发布时间】:2021-11-11 06:18:19
【问题描述】:
我一直在使用 kubernetes 入口配置文件来分配由 GCP 创建的静态外部 IP 地址。 入口和部署由 GKE 管理。
ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: test-address
spec:
backend:
serviceName: test-service
servicePort: 80
有了这个yaml文件,已经创建的静态ip地址成功附加到了入口。
在 VPC 网络菜单的外部 IP 地址上,该 ip 正被转发规则使用。
Name External Address Region Type Version In use by
test-address 12.34.56.78 asia-northeast2 Static IPv4 Forwarding rule k8s2-ab-blablablabla
但是,最近我尝试测试 Terraform 以将基础架构部署到 GCP,并且我制作了一个与上述 ingress.yaml 完全相同的 Terraform 配置文件。
ingress.tf
resource "kubernetes_ingress" "test_ingress" {
metadata {
name = "test-ingress"
annotations = {
"kubernetes.io/ingress.global-static-ip-name" = "test-address"
}
}
spec {
backend {
service_name = test-service
service_port = "80"
}
}
}
在我将此配置应用到 GCP 后,入口已成功创建,但 ip 地址未附加到入口。
在 GCP 的 Ingress 详细信息中,消息出现错误
Error syncing to GCP: error running load balancer syncing routine: loadbalancer blablablablabla does not exist: the given static IP name test-address doesn't translate to an existing static IP.
在 VPC 网络菜单的外部 IP 地址上,In use by 处的 IP 地址行显示None。
这里有什么问题?我是否错过了 Terraform 的某些内容?
【问题讨论】:
-
你能不能用
output "load_balancer_ip" { value = kubernetes_ingress.test_ingress.status.0.load_balancer.0.ingress.0.ip }来检查哪个是IP(如果有)? -
您是否尝试在 Kubernetes 清单入口仍在使用静态 IP 地址时重用它?
-
@ydaetskcoR 不,我刚刚在 tf 文件 "google_compute_address" "server_address" { name = "server-address" address_type = "EXTERNAL" region = "asia-northeast2- c" network_tier = "PREMIUM" project = "test-project" }
-
这可能是因为它需要是一个全球 IP 而不是一个区域 IP——这为我解决了这个问题
标签: kubernetes terraform kubernetes-ingress terraform-provider-gcp