gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:16:56 26 4
gpt4 key购买 nike

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

最佳答案

背景
在关于 ServiceTypes 的 Kubernetes 文档中,您可以找到信息,如果您想在外部公开集群,则必须使用 NodePortLoadBalancer
如果您想将您的服务/应用程序保留在集群中,您应该使用 ClusterIP :

Exposes the Service on a cluster-internal IP. Choosing this value makes the Service only reachable from within the cluster. This is the default 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),因此您可以使用以下方法更改它:
  • 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
  • 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
  • kubectl 应用

  • 您可以编辑您的 Yaml 并删除 spec.type 或使用 ClusterIPLoadBalancer 拥有 2 个 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
  • 使用一些 3rd 方软件在您的集群中进行更改,例如 Helm 并使用模板。
  • 关于kubernetes - 如何让已经暴露的服务不被暴露?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65665363/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com