3

我想使用 terraform 将大使设置为 Kubernetes 的 API 网关。有几种方法可以配置大使。根据文档,推荐的方法是为每个在集群外路由和公开的服务使用 kubernetes 注释。使用 kubernetes yaml 配置很容易做到这一点:

kind: Service
apiVersion: v1
metadata:
  name: my-service
  annotations:
    getambassador.io/config: |
      ---
        apiVersion: ambassador/v0
        kind:  Mapping
        name:  my_service_mapping
        prefix: /my-service/
        service: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

以建议getambassador.io/config开头的字段值是多行字符串值。|如何使用 terraform HCL 实现相同的目标?

4

1 回答 1

5

Terraform 文档包含有关使用多行字符串的部分<<EOF your multiline string EOF

resource "kubernetes_service" "my-service" {
  "metadata" {
    name = "my-service"
    annotations {
      "getambassador.io/config" = <<EOF
        apiVersion: ambassador/v0
        kind:  Mapping
        name:  my_service_mapping
        prefix: /my-service/
        service: my-service
        EOF
    }
  }
  "spec" {
    selector {
      app = "MyApp"
    }
    port {
      protocol = "TCP"
      port = 80
      target_port = "9376"
    }
  }
}

确保 yaml 配置中没有三连字符 ( ---)。Terraform 解析不正确。

于 2019-01-16T13:27:13.763 回答