如何使用Terraform和ClusterIP定义Kubernetes服务

问题描述 投票:0回答:1

我可以使用NodePort或LoadBalancer定义一个服务,但是当我尝试使用ClusterIP Terraform时会显示此消息

Failed to update service: Service "hello-service" is invalid: spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP'

这是一个奇怪的消息,因为我没有提供nodePort。大概是默认情况下ClusterIP不需要的东西。这是我的服务定义:

resource "kubernetes_service" "hello-service" {
  metadata {
    name = "hello-service"
    labels = {
      app = "hello"
    }
  }
  spec {
    type = "ClusterIP" 
    selector = {
      app = "hello"
    }
    port {
      port        = 80
      target_port = 8080
      protocol = "TCP"
    }

  }
}

我看过文档,还没有发现对于ClusterIP必须有所不同的任何内容。我错过了什么?

terraform --version
Terraform v0.12.4
+ provider.google v3.3.0
+ provider.kubernetes v1.10.0

Running on GCP

谢谢。

kubernetes terraform
1个回答
0
投票
  1. 请尝试使用$ kubectl apply -f your-service-conf-file.yaml --force
  2. 您也可以执行$ kubectl replace命令

    注:,它要求将clusterIP字段指定为相同的IP作为此服务的分配ClusterIP]]

  3. 您也可以使用头盔来解决此问题:
  4. - port: {{ .Values.service.externalPort }} {{- if (eq .Values.service.type "ClusterIP") }} nodePort: null {{- end }} targetPort: {{ .Values.service.internalPort }} protocol: TCP name: {{ .Values.service.name }}

    这仅在第一次安装后

    之后

    起作用。所以没有“声明式”解决方法,您需要手动更改服务。
  5. 最终解决方法可能是先删除服务:$ kubectl delete svc my-nginx
  6. 然后您可以使用弹出类型创建服务。

    更多详细信息,请参见service-types-issue

© www.soinside.com 2019 - 2024. All rights reserved.