首页 > 解决方案 > 无法在我的 GKE 集群中将服务应用为“类型:ClusterIP”

问题描述

我想将我的服务部署为 ClusterIP,但无法将其应用于给定的错误消息:

[xetra11@x11-work coopr-infrastructure]$ kubectl apply -f teamcity-deployment.yaml 
deployment.apps/teamcity unchanged
ingress.extensions/teamcity unchanged
The Service "teamcity" is invalid: spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP'

这是我的 .yaml 文件:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: teamcity
  labels:
    app: teamcity
spec:
  replicas: 1
  selector:
    matchLabels:
      app: teamcity
  template:
    metadata:
      labels:
        app: teamcity
    spec:
      containers:
      - name: teamcity-server
        image: jetbrains/teamcity-server:latest
        ports:
        - containerPort: 8111
---
apiVersion: v1
kind: Service
metadata:
  name: teamcity
  labels:
    app: teamcity
spec:
  type: ClusterIP
  ports:
  - port: 8111
    targetPort: 8111
    protocol: TCP
  selector:
    app: teamcity
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: teamcity
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  backend:
    serviceName: teamcity
    servicePort: 8111

标签: kubernetesgoogle-kubernetes-enginekubernetes-ingresskubernetes-service

解决方案


按文件名将配置应用于资源:

kubectl apply -f [.yaml file] --force

如果该资源尚不存在,则将创建该资源。要使用“应用”,请始终使用“应用”或“创建 --save-config”来创建资源。

2)如果第一个失败,你可以强制替换,删除然后重新创建资源:

kubectl replace -f grav-deployment.yml

此命令仅在grace-period=0 时使用。如果为 true,则立即从 API 中删除资源并绕过优雅删除。请注意,立即删除某些资源可能会导致不一致或数据丢失,需要确认。


推荐阅读