kubectl代理的目的是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubectl代理的目的是什么?相关的知识,希望对你有一定的参考价值。

要访问Kubernetes仪表板,您必须在本地计算机上运行kubectl代理,然后将Web浏览器指向代理。同样,如果要提交Spark作业,则再次在本地计算机上运行kubectl proxy,然后针对localhost地址运行spark-submit。

我的问题是,为什么Kubernetes有这种奇特的安排?仪表板服务正在Kubernetes集群上运行,那么为什么我不直接将Web浏览器指向集群?为什么要代理?在某些情况下,代理的需要是不方便的。例如,从我的Web服务器,我想提交一个Spark作业。我不能这样做 - 我必须首先运行代理,但这将我绑定到特定的群集。我可能有很多Kubernetes集群。

为什么Kubernetes设计为只能通过代理访问它?

答案

您可以通过不同方式访问群集中的应用程序:

  1. 通过使用apiserver as a proxy,但您需要通过身份验证和授权阶段。
  2. 通过使用hostNetwork。当pod配置为hostNetwork:true时,在此类pod中运行的应用程序可以直接查看启动pod的主机的网络接口。
  3. 通过使用hostPort。容器端口将在hostIP:hostPort中暴露给外部网络,其中hostIP是容器运行的Kubernetes节点的IP地址,hostPort是用户请求的端口。
  4. 使用类型为:ClusterIP的服务。 ClusterIP服务仅可供群集和群集节点中的Pod使用。
  5. 使用类型为:NodePort的服务。除了ClusterIP之外,此服务随机或由30000-32767范围内的用户端口指定。所有群集节点都侦听该端口并将所有流量转发到相应的服务。
  6. 使用类型为:LoadBalancer的服务。它仅适用于受支持的云提供商,而适用于On Premise集群的Metallb。除了打开NodePort之外,Kubernetes还创建了云负载均衡器,可以将流量转发到NodeIP:Nodeport以获得该服务。

所以,基本上:[[[ Kubernetes Service type:ClusterIP] + NodePort ] + LoadBalancer ]

  1. 通过使用Ingress(入口控制器+入口对象)。入口控制器由Nodeport或LoadBalancer服务公开,并作为群集服务的L7反向代理/ LB。它可以访问ClusterIP服务,因此,如果使用Ingress,则无需公开服务。您可以将其用于SSL终止以及基于URL路径转发流量。最受欢迎的入口控制器是: kubernetes/nginx-ingressnginxinc/kubernetes-ingressHAProxy-ingressTraefik

现在,关于kubectl proxy。它使用第一种方式连接到群集。基本上,它读取.kube / config中的群集配置,并使用其中的凭据通过群集API服务器身份验证和授权阶段。然后,它创建从本地计算机到API-Server接口的通信通道,因此,您可以使用本地端口向Kubernetes集群API发送请求,而无需为每个请求指定凭据。

另一答案

为什么Kubernetes设计为只能通过代理访问它?

简单来说,为了安全和方便。

默认情况下,群集是隔离的,这样做可以减轻管理员考虑暴露服务可能会打开的所有可能的安全漏洞的负担。

代理在集群(API Server)和客户端之间提供安全连接,这样可以避免必须更改所有应用程序以实现安全逻辑,只是为了与集群进行通信,这样,您可以进行一次身份验证,并且每个应用程序都使用此安全连接,无需任何更改。

如您的示例中所述,您无需在群集上进行身份验证即可进行通信,kubectl为您完成了工作,并且每个API Server调用都将代表您设置安全性。

也可以在没有代理的情况下访问集群,问题是您需要手动配置它并向服务器验证应用程序,并且无法使用简单的命令。

以上是关于kubectl代理的目的是什么?的主要内容,如果未能解决你的问题,请参考以下文章

代理设计模式

Forge Viewer - 如何在场景中访问(或获取渲染/片段代理)克隆的网格?

spring aop中this和target区别

Java代理

Spring学习4:代理

kubectl 命令详解:annotate