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

如何使用Terraform和ClusterIP定义Kubernetes服务,kubernetes,terraform,Kubernetes,Terraform,我可以用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' 这是一条奇怪的消息,因为我没有提供节点端口。大概它默认了ClusterIP不想要

我可以用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'
这是一条奇怪的消息,因为我没有提供节点端口。大概它默认了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
谢谢

  • 请尝试使用
    $kubectl apply-f your-service-conf-file.yaml--force

  • 您还可以执行
    $kubectl replace
    命令

    注意:需要将clusterIP字段指定为相同的IP 作为此服务的已分配群集IP

  • 您也可以使用helm解决此问题:

        - port: {{ .Values.service.externalPort }} {{- if (eq .Values.service.type "ClusterIP") }}
          nodePort: null {{- end }}
          targetPort: {{ .Values.service.internalPort }}
          protocol: TCP
          name: {{ .Values.service.name }}
    
    
    这仅在第一次安装后有效。所以没有 “声明性”解决方案,您需要手动更改服务

  • 最后,解决方法可能是先删除服务:
    $kubectl delete svc my nginx

    然后,您可以创建poper类型的服务


  • 您可以在此处找到更多信息:。

    您是从头开始创建服务还是更新现有服务?这听起来像是提供商实现中的错误?@maforcreatingnewservicekubectl工作正常。赫尔姆可能也是。问题是关于地形的。您是否尝试删除以前创建的分配给特定pod的服务?是的。创建一个新的服务w ClusterIP对我来说失败了