使用 kubectl 从 gke 应用程序中删除外部 ip 地址
Remove external ip address from gke application with kubectl
在getting Prometheus up for a gke cluster之后,我运行为Grafana添加外部IP地址的步骤:
kubectl patch svc "prometheus-1-grafana" --namespace "cluster-1" \
-p '{"spec": {"type": "LoadBalancer"}}'
但现在不再希望通过外部 ip 访问 Grafana。
我试过 运行 -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?
当您将服务更改为 LoadBalancer
时,NodePort
将归因于该服务。
为了 return 到 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
字段是必填项,make一定要检查正确的端口并进行更改,我以 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
参考文献:
在getting Prometheus up for a gke cluster之后,我运行为Grafana添加外部IP地址的步骤:
kubectl patch svc "prometheus-1-grafana" --namespace "cluster-1" \
-p '{"spec": {"type": "LoadBalancer"}}'
但现在不再希望通过外部 ip 访问 Grafana。
我试过 运行 -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?
当您将服务更改为 LoadBalancer
时,NodePort
将归因于该服务。
为了 return 到 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
字段是必填项,make一定要检查正确的端口并进行更改,我以 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
参考文献: