kubectl代理的目的是什么?

时间:2019-01-23 17:51:29

标签: kubernetes

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以通过多种方式访问​​集群中的应用程序:

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

因此,基本上:[[[ Kubernetes Service type:ClusterIP] + NodePort ] + LoadBalancer ]

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

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

答案 1 :(得分:1)

  

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

简单来说,出于安全性便利性

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

代理在群集(API服务器)和客户端之间提供了安全的连接,这避免了您不得不更改所有应用程序以实现仅用于与群集通信的安全逻辑的方式,因此,您只需进行一次身份验证应用程序使用此安全连接,无需进行任何更改。

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

还可以在没有代理的情况下访问群集,问题是您需要手动配置它并向服务器验证应用程序,而失去了使用简单命令进行操作的便利性。