Удалите внешний IP-адрес из приложения gke с помощью kubectl - PullRequest
1 голос
/ 22 апреля 2020

После установки Prometheus для кластера gke я выполнил шаг, чтобы добавить внешний IP-адрес для Grafana:

kubectl patch svc "prometheus-1-grafana" --namespace "cluster-1" \
  -p '{"spec": {"type": "LoadBalancer"}}'

, но теперь больше не хочу, чтобы Grafana была доступна через внешний ip.

Я пытался запустить с -p '{"spec": {"type": "ClusterIP"}}', но я просто получаю сообщение об ошибке:

The Service "prometheus-1-prometheus" is invalid: 
spec.ports[0].nodePort: Forbidden: may not be used when
`type` is 'ClusterIP'

Как выполнить указанную выше команду kubectl patch svc для удаления внешнего ip ?

Спасибо

1 Ответ

2 голосов
/ 22 апреля 2020

Когда вы меняете услугу на LoadBalancer, службе присваивается NodePort.

Чтобы вернуться к ClusterIP, вам также необходимо удалить NodePort.

  • Используя kubectl patch, мы установим NodePort в NULL, вот команда:
kubectl patch svc "prometheus-1-grafana" --namespace "cluster-1" --type="merge" \
-p '{"spec":{"ports":[{"nodePort":null,"port":<PORT_NUMBER>}],"type":"ClusterIP"}}'

Примечание: Kubernetes не будет позвольте вам установить nodePort на null в одиночку, поскольку поле Port является обязательным, убедитесь, что вы проверили правильный порт и изменили его, в качестве примера я использую http-сервер.

  • При желании вы можете создать patch.yaml:
spec:
  ports:
  - port: <PORT_NUMBER>
    protocol: TCP
    targetPort: <TARGET_PORT_NUMBER>
  type: ClusterIP

и применить его:

kubectl patch svc "prometheus-1-grafana" --namespace "cluster-1" \
--type="merge" --patch "$(cat patch.yaml)"  

Воспроизведение:

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
echo-svc     ClusterIP   10.0.13.9    <none>        80/TCP    65m

$ kubectl patch svc "echo-svc" -p '{"spec": {"type": "LoadBalancer"}}'                                                                
service/echo-svc patched

$ kubectl get svc
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
echo-svc     LoadBalancer   10.0.13.9    <pending>     80:32021/TCP   65m

$ kubectl patch svc "echo-svc" --type="merge" -p '{"spec":{"ports":[{"nodePort":null,"port":80}],"type":"ClusterIP"}}'
service/echo-svc patched

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
echo-svc     ClusterIP   10.0.13.9    <none>        80/TCP    66m

$ kubectl patch svc "echo-svc" -p '{"spec": {"type": "LoadBalancer"}}'                                                                
service/echo-svc patched

$ kubectl get svc
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)        AGE
echo-svc     LoadBalancer   10.0.13.9    35.223.145.193   80:30394/TCP   66m

$ cat patch.yaml 
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  type: ClusterIP

$ kubectl patch svc "echo-svc" --type="merge" --patch "$(cat patch.yaml)"                                                             
service/echo-svc patched

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
echo-svc     ClusterIP   10.0.13.9    <none>        80/TCP    66m

Ссылки:

...