我可以使用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
谢谢。
$ kubectl apply -f your-service-conf-file.yaml --force
$ kubectl replace
命令注:,它要求将clusterIP字段指定为相同的IP作为此服务的分配ClusterIP]]
- 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
然后您可以使用弹出类型创建服务。
更多详细信息,请参见service-types-issue。