如何让已经暴露的服务不被暴露?

时间:2021-01-11 10:44:41

标签: kubernetes kubernetes-service

我为 minikube 集群上的 pod 部署了 (LoadBalancer) 服务,然后通过 minikube service [my_service] 命令公开它。现在我试图“关闭曝光”但找不到任何方法来做到这一点,除了删除它我想避免的。是否可以只关闭公开,而不删除(并重新部署)现有的已公开服务?

1 个答案:

答案 0 :(得分:2)

背景

在关于 ServiceTypes 的 Kubernetes 文档中,您可以找到有关信息,如果您想在外部公开您的集群,您必须使用 NodePortLoadBalancer

如果您想将服务/应用程序保留在集群中,则应使用 ClusterIP

<块引用>

cluster-internal IP 上公开服务。 选择此值会使服务只能从集群内部访问。这是默认的 ServiceType。

根据您的版本,您可以对其进行编辑或使用变通方法。例如,在 K8s 1.16 中,您将无法执行此操作,因为可能会发生一些错误。

$ kubectl get svc
NAME         TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
kubernetes   ClusterIP      10.8.0.1      <none>          443/TCP        3d20h
my-nginx     LoadBalancer   10.8.14.224   34.121.77.108   80:32039/TCP   3m16s
$ kubectl patch service my-nginx -p '{"spec":{"type":"ClusterIP"}}'
The Service "my-nginx" is invalid: spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP'

解决方案

但是,由于您使用的是 Minikube,所以我猜您使用的是较新的版本 (1.20),因此您可以使用以下方法进行更改:

  1. kubectl 编辑

kubectl edit svc <yourSvcName> 并将类型更改为 ClusterIP。 它将打开 Vi 编辑器,您可以在其中将 spec.type 更改为 ClusterIP 或将其删除,因为 Kubernetes 服务的默认类型为 ClusterIP,因此如果未指定它, Kubernetes 将自动使用 ClusterIP

$ kubectl get svc
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        25s
my-nginx     LoadBalancer   10.107.129.201   <pending>     80:30173/TCP   8s
minikube-new:~$ kubectl edit svc my-nginx
service/my-nginx edited
sekreta@minikube-new:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   46s
my-nginx     ClusterIP   10.107.129.201   <none>        80/TCP    29s
  1. kubectl 补丁

$ kubectl patch service <yourServiceName> -p '{"spec":{"type":"ClusterIP"}}'

$ kubectl get svc
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        10m
my-nginx     LoadBalancer   10.107.129.201   <pending>     80:30456/TCP   2m
minikube-new:~$ kubectl patch service my-nginx -p '{"spec":{"type":"ClusterIP"}}'
service/my-nginx patched
minikube-new:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   10m
my-nginx     ClusterIP   10.107.129.201   <none>        80/TCP    3m
  1. kubectl apply

您可以编辑您的 Yaml 并删除 spec.type 或拥有 2 个带有 ClusterIPLoadBalancer 的 Yaml,然后根据您的需要切换它们。

$ kubectl apply -f svc.yaml 
service/my-nginx configured
minikube-new:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   22m
my-nginx     ClusterIP   10.111.237.133   <none>        80/TCP    16s
  1. 使用一些 3rd 方软件在您的集群中进行更改,例如 Helm 和使用模板。