为了访问Kubernetes仪表板,您必须在本地计算机上运行kubectl代理,然后将Web浏览器指向该代理。同样,如果要提交Spark作业,请再次在本地计算机上运行kubectl代理,然后针对本地主机地址运行spark-submit。
我的问题是,为什么Kubernetes会有这种特殊的安排?仪表板服务正在Kubernetes集群上运行,那么为什么我不将Web浏览器直接指向集群呢?为什么要有代理?在某些情况下,代理的需求不便。例如,我要从Web服务器提交一个Spark作业。我无法做到这一点-我必须先运行代理,但这将我绑定到特定的集群。我可能有很多Kubernetes集群。
Kubernetes为何设计为只能通过代理访问?
为什么 Kubernetes 的设计使得只能通过代理访问它?
简单来说,就是为了安全和方便。
默认情况下,集群是隔离的,这样做可以减轻管理员的负担,让他们不必考虑暴露的服务可能造成的所有可能的安全漏洞。
代理在集群(API Server)和客户端之间提供安全连接,这避免了您必须更改所有应用程序来实现安全逻辑只是为了与集群通信,这样,您只需进行一次身份验证,每个应用程序都使用此代理安全连接,无需任何更改。
正如您的示例中所述,您不必在集群上进行身份验证即可进行通信,kubectl 为您完成了这项工作,并且每个 API 服务器调用都将代表您设置安全性。
集群也可以在没有代理的情况下访问,问题是你需要手动配置它并向服务器验证应用程序,失去了使用简单命令的便利性。
您可以通过多种方式访问集群中的应用程序:
hostIP:hostPort,其中hostIP是容器正在运行的Kubernetes节点的IP地址,并且hostPort是用户请求的端口。30000-32767。所有群集节点都侦听该端口,并将所有流量转发到相应的服务。NodeIP:Nodeport该服务。因此,基本上: [[[ Kubernetes Service type:ClusterIP] + NodePort ] + LoadBalancer ]
现在,大约kubectl proxy。它使用第一种方式连接到群集。基本上,它读取.kube / config中的群集配置,并从那里使用凭据通过群集API Server身份验证和授权阶段。然后,它创建了从本地计算机到API服务器接口的通信通道,因此,您可以使用本地端口将请求发送到Kubernetes集群API,而不必为每个请求指定凭据。
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |