我可以使用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
谢谢。
答案 0 :(得分:0)
请尝试使用$ 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。