首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes流形地形

Kubernetes流形地形
EN

Stack Overflow用户
提问于 2021-12-10 15:59:46
回答 2查看 1.7K关注 0票数 0

我正在尝试使用kubernetes_manifest terraform资源创建一个Kubernetes In匀浆对象。它引发以下错误:

代码语言:javascript
复制
│ 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]]]]]

我的代码是:

代码语言:javascript
复制
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" = "/*"
          }
        }
      }
    }
  }
}

我尝试在"spec“字段中添加括号,但是当我这样做时,我只犯了以下错误:

代码语言:javascript
复制
│ 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“下添加逗号。它只是在这之后不断地抛出相同的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-10 17:08:53

我想通了。您需要在"{“之前添加括号。因此,代码现在看起来如下:

代码语言:javascript
复制
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" = "/*"
          }]
        }
      }]
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2022-07-14 09:47:03

或者,Kubernetes YAML清单可以很容易地转换为HCL格式,使用这个手工CLI工具;

https://github.com/jrhouston/tfk8s

安装工具。

go install https://github.com/jrhouston/tfk8s

并转换您的k8s YAML清单。

tfk8s -f yaml_manifest.yaml

这将以CLI标准输出HCL格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70307249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档