我到处读到,要设置 Https 以访问 kubernetes 集群,你需要有一个入口,而不仅仅是一个 LoadBalancer 服务,它也暴露了集群外部。
我的问题是相当理论性的:如果入口(确实如此(由负载均衡器服务、控制器(例如 nginx 映像的部署/pod(和一组规则(以便正确代理集群内的传入请求(组成,为什么我们不能在负载均衡器前面设置 Https 而不是入口?
作为练习的标题,我自己分别构建了这三个组件(负载均衡器,带有一些规则的控制器/API 网关(:这三个组件一起已经获取传入的请求并根据特定规则将它们代理到集群中,因此,我可以说,我已经自己构建了一个入口。我不能将 https 添加到此结构中,是否需要在集群前面设置冗余部分(k8s 入口(?
不确定我是否完全理解你的问题。
在Kubernetes
中,您将使用服务公开群集/应用程序,这在这里有很好的描述。在本文中可以找到所有services
的良好比较。
创建服务类型LoadBalancer
时,它会创建L4 LoadBalancer
。L4知道source IP:port
和destination IP:port
等信息,但没有关于应用层(第7层(的任何信息。HTTP/HTTPS LoadBalancers
位于第 7 层,因此他们知道应用程序。可在此处找到有关负载平衡的详细信息。
基于第 4 层的负载平衡,可根据来自网络和传输层协议的数据(如 IP 地址和 TCP 或 UDP 端口(定向流量
基于7 层的负载平衡,用于根据属性(如 HTTP 标头和统一资源标识符(添加基于内容的路由决策
入口类似于支持 L7 的LoadBalancer
。
入口是一种 Kubernetes 资源,可让您为 Kubernetes 上运行的应用程序配置 HTTP 负载均衡器,由一个或多个服务表示。这样的负载均衡器对于将这些应用程序交付到 Kubernetes 集群之外的客户端是必需的。
Ingress
还提供了许多优点。例如,如果您的集群中有许多服务,则可以创建一个LoadBalancer
并Ingress
这将能够将流量重定向到适当的服务,并允许您降低创建一些LoadBalancers
的成本。
为了使Ingress
资源正常工作,群集必须运行ingress controller
。
入口控制器是在集群中运行并根据入口资源配置 HTTP 负载均衡器的应用程序。负载均衡器可以是群集中运行的软件负载均衡器,也可以是外部运行的硬件或云负载均衡器。不同的负载均衡器需要不同的入口控制器实现。 在 NGINX 的情况下,入口控制器与负载均衡器一起部署在 Pod 中。
入口控制器很多,但最受欢迎的是Nginx Ingress Controller
所以我的回答是:
为什么我们不能在负载均衡器而不是入口前面设置 Https?
这不仅涉及使用 HTTPS 保护您的集群,还涉及 Ingress 提供的许多功能和特性。
关于HTTP(S(负载平衡的非常好的文档可以在GKE Docs上找到。