如何使用 Terraform 为 Kubernetes 入口分配静态 IP 地址?

Eri*_*Lee 5 kubernetes terraform kubernetes-ingress terraform-provider-gcp

我一直在使用 kubernetes 入口配置文件来分配 GCP 创建的静态外部 IP 地址。入口和部署由 GKE 管理。

入口.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
Run Code Online (Sandbox Code Playgroud)

使用此 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 配置文件。

入口.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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我将此配置应用于 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 地址上,IP 地址行In use by显示None

这里有什么问题?我是否错过了 Terraform 的某些内容?

小智 5

正如@MattBrowne 在评论中所说,需要是全球知识产权,而不是区域性的。这也为我解决了。