nginx - kubernetes:在 LoadBalancer 服务上设置 Https
问题描述
我到处读到要设置 Https 以访问 kubernetes 集群,您需要有一个 Ingress而不仅仅是一个 LoadBalancer 服务,它也会将集群暴露在外部。
我的问题是非常理论上的:如果一个 Ingress(它是)由一个LoadBalancer服务、一个控制器(例如 nginx 图像的部署/pod)和一组规则(为了正确代理里面的传入请求)组成集群),为什么我们不能在 LoadBalancer 而不是 Ingress 前面设置 Https?
作为练习的标题,我自己分别构建了三个组件(一个 LoadBalancer,一个带有一些规则的控制器/API 网关):这三个组件已经一起获取传入请求并根据特定规则在集群内代理它们,所以,我可以比如说,我自己建立了一个 Ingress。我不能在这个结构中添加https吗?我需要在集群前面设置一个冗余部分(一个k8s Ingress)吗?
解决方案
不确定我是否完全理解你的问题。
在Kubernetes
您使用服务公开您的集群/应用程序时,这在此处进行了很好的描述。在这篇文章services
中可以找到很好的比较。
当您创建服务类型LoadBalancer
时,它会创建L4 LoadBalancer
. L4知道 和 之类的信息source IP:port
,destination IP:port
但没有关于应用层(第 7 层)的任何信息。HTTP/HTTPS LoadBalancers
位于第 7 层,因此他们了解应用程序。可以在此处找到有关负载平衡的更多信息。
基于第 4 层的负载平衡,可根据来自网络和传输层协议(例如 IP 地址和 TCP 或 UDP 端口)的数据来引导流量
基于第 7 层的负载平衡,以添加基于属性的基于内容的路由决策,例如 HTTP 标头和统一资源标识符
Ingress类似于LoadBalancer
L7 支持。
Ingress 是一种 Kubernetes 资源,可让您为运行在 Kubernetes 上的应用程序配置 HTTP 负载均衡器,由一个或多个服务表示。这样的负载均衡器对于将这些应用程序交付给 Kubernetes 集群之外的客户端是必要的。
Ingress
也提供了许多优点。例如,如果您的集群中有许多服务,您可以创建一个LoadBalancer
,Ingress
它能够将流量重定向到适当的服务,并允许您降低创建几个LoadBalancers
.
为了使Ingress
资源工作,集群必须ingress controller
运行。
Ingress 控制器是运行在集群中的应用程序,根据 Ingress 资源配置 HTTP 负载均衡器。负载均衡器可以是在集群中运行的软件负载均衡器,也可以是在外部运行的硬件或云负载均衡器。不同的负载均衡器需要不同的 Ingress 控制器实现。在 NGINX 的情况下,Ingress 控制器与负载均衡器一起部署在一个 Pod 中。
入口控制器有很多,但最流行的是Nginx Ingress Controller
所以我的回答是:
为什么我们不能在 LoadBalancer 而不是 Ingress 前面设置 Https?
它不仅涉及使用 HTTPS 保护您的集群,还涉及 Ingress 提供的许多功能和特性。
可以在GKE Docs上找到关于 HTTP(S) 负载平衡的非常好的文档。
推荐阅读
- android - 打开 PDF Nougat+(文件目录)
- angular - 在带有 @angular/cdk-experimental 的 Angular Material 2 表中使用虚拟滚动
- c# - Acumatica - 试图复制 TYPE 字段的逻辑
- selenium - 无法从不在 iFrame 中的“表单”访问元素
- javascript - 访问下载 API onChanged 事件
- marklogic - MarkLogic 期刊大小参数
- html - HTML 表格等于列高
- linux - 排序数字值 - 由点或任何其他分隔符分隔 - 对 RHEL5 中的版本值进行排序
- mysql - 2个jsp表单保存到一个SaveServlet中
- amazon-s3 - 我可以使用 aws-sdk 将文件从我的计算机上传到 aws s3 吗?