Kubernetes 清单 Terraform

Kubernetes Manifest Terraform

我正在尝试使用 kubernetes_manifest terraform 资源创建一个 Kubernetes Ingress 对象。它抛出以下错误:

│ Error: Failed to morph manifest to OAPI type
│ 
│   with module.services.module.portal.module.appmesh.kubernetes_manifest.service_ingress_object,
│   on .terraform/modules/services.portal.appmesh/kubernetes_manifest.tf line 104, in resource "kubernetes_manifest" "service_ingress_object":
│  104: resource "kubernetes_manifest" "service_ingress_object" {
│ 
│ AttributeName("spec"): [AttributeName("spec")] failed to morph object element into object element: AttributeName("spec").AttributeName("rules"): [AttributeName("spec").AttributeName("rules")] failed to
│ morph object element into object element: AttributeName("spec").AttributeName("rules"): [AttributeName("spec").AttributeName("rules")] unsupported morph of object value into type:
│ tftypes.List[tftypes.Object["host":tftypes.String, "http":tftypes.Object["paths":tftypes.List[tftypes.Object["backend":tftypes.Object["resource":tftypes.Object["apiGroup":tftypes.String,
│ "kind":tftypes.String, "name":tftypes.String], "serviceName":tftypes.String, "servicePort":tftypes.DynamicPseudoType], "path":tftypes.String, "pathType":tftypes.String]]]]]

我的代码是:

resource "kubernetes_manifest" "service_ingress_object" {
  manifest = {
    "apiVersion" = "networking.k8s.io/v1beta1"
    "kind"       = "Ingress"
    "metadata" = {
      "name"      = "${var.service_name}-ingress"
      "namespace" = "${var.kubernetes_namespace}"
      "annotations" = {
        "alb.ingress.kubernetes.io/actions.ssl-redirect" = "{'Type': 'redirect', 'RedirectConfig': { 'Protocol': 'HTTPS', 'Port': '443', 'StatusCode': 'HTTP_301'}}"
        "alb.ingress.kubernetes.io/listen-ports"         = "[{'HTTP': 80}, {'HTTPS':443}]"
        "alb.ingress.kubernetes.io/certificate-arn"      = "${data.aws_acm_certificate.enivronment_default_issued.arn}"
        "alb.ingress.kubernetes.io/scheme"               = "internal"
        "alb.ingress.kubernetes.io/target-type"          = "instance"
        "kubernetes.io/ingress.class"                    = "alb"
      }
    }
    "spec" = {
      "rules" = {
        "host" = "${aws_route53_record.service_dns.fqdn}"
        "http" = {
          "paths" = {
            "backend" = {
              "serviceName" = "${var.service_name}-svc"
              "servicePort" = "${var.service_port}"
            }
            "path" = "/*"
          }
        }
      }
    }
  }
}

我曾尝试在“规格”字段中添加方括号,但是当我这样做时,出现以下错误:

│ Error: Missing item separator
│ 
│   on .terraform/modules/services.portal.appmesh/kubernetes_manifest.tf line 121, in resource "kubernetes_manifest" "service_ingress_object":
│  120:     "spec" = {[
│  121:       "rules" = {
│ 
│ Expected a comma to mark the beginning of the next item.

出现该错误后,我尝试在“spec”下添加逗号。在此之后它只是不断抛出相同的错误。

我明白了。您需要在“{”之前添加括号。所以代码现在看起来像这样:

resource "kubernetes_manifest" "service_ingress_object" {
  manifest = {
    "apiVersion" = "networking.k8s.io/v1beta1"
    "kind"       = "Ingress"
    "metadata" = {
      "name"      = "${var.service_name}-ingress"
      "namespace" = "${var.kubernetes_namespace}"
      "annotations" = {
        "alb.ingress.kubernetes.io/actions.ssl-redirect" = "{'Type': 'redirect', 'RedirectConfig': { 'Protocol': 'HTTPS', 'Port': '443', 'StatusCode': 'HTTP_301'}}"
        "alb.ingress.kubernetes.io/listen-ports"         = "[{'HTTP': 80}, {'HTTPS':443}]"
        "alb.ingress.kubernetes.io/certificate-arn"      = "${data.aws_acm_certificate.enivronment_default_issued.arn}"
        "alb.ingress.kubernetes.io/scheme"               = "internal"
        "alb.ingress.kubernetes.io/target-type"          = "instance"
        "kubernetes.io/ingress.class"                    = "alb"
      }
    }
    "spec" = {
      "rules" = [{
        "host" = "${aws_route53_record.service_dns.fqdn}"
        "http" = {
          "paths" = [{
            "backend" = {
              "serviceName" = "${var.service_name}-svc"
              "servicePort" = "${var.service_port}"
            }
            "path" = "/*"
          }]
        }
      }]
    }
  }
}