kubectl代理的目的是什么?

use*_*738 5 kubernetes

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

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

Kubernetes为何设计为只能通过代理访问?

Die*_*des 9

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

简单来说,就是为了安全方便

默认情况下,集群是隔离的,这样做可以减轻管理员的负担,让他们不必考虑暴露的服务可能造成的所有可能的安全漏洞。

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

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

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


VAS*_*VAS 5

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

  1. 通过使用apiserver作为代理,但是您需要通过身份验证和授权阶段。
  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. 通过使用类型为Services的服务:LoadBalancer。它仅适用于受支持的Cloud Providers和Metallb for Premise群集。除了打开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服务器接口的通信通道,因此,您可以使用本地端口将请求发送到Kubernetes集群API,而不必为每个请求指定凭据。