Kubernetes v2.6.1通过Terraform创建Ingress报错找不到请求资源
问题根因
你遇到的报错核心是Terraform使用的Ingress API版本与你的Kubernetes集群不兼容:
- 报错提示
post ingresses.extensions说明你当前用的kubernetes_ingressTerraform资源,默认调用已经废弃的extensionsAPI组下的Ingress接口 - 你的Kubernetes集群版本较高(1.19及以上),已经彻底移除了
extensions/v1beta1版本的Ingress API,仅保留networking.k8s.io/v1版本的API,所以返回找不到请求资源的错误 - 你写的YAML可以正常运行,是因为YAML开头明确指定了
apiVersion: networking.k8s.io/v1,调用的是集群中存在的API接口。
关于字段差异的说明
你观察到的YAML用rules、Terraform配置用rule是HCL语法的正常特性:
- YAML中
rules是数组类型,对应多条规则 - Terraform HCL中对于数组类型的嵌套块,直接用单数形式的块名重复声明即可,最终提交到Kubernetes时会自动转换为复数的
rules数组,这个差异不是报错原因。
修复方案
你需要将旧的kubernetes_ingress资源替换为适配v1版本API的kubernetes_ingress_v1资源,同时调整配置结构匹配v1规范,修改后的配置参考:
resource "kubernetes_ingress_v1" "jenkins-ingress" { metadata { name = "${var.name}-ingress" namespace = var.namespace annotations = { "ingress.kubernetes.io/rewrite-target" = "/" "kubernetes.io/ingress.class" = "nginx" } } spec { rule { host = "domain.com" http { path { path = "/" path_type = "Prefix" backend { service { name = var.name port { number = 8080 } } } } } } } }
内容的提问来源于stack exchange,提问作者user1747547
相关产品推荐
相关产品推荐

