将kubernetes流量暴露为80(http)和443(https)



目前,我的kubernetes集群(位于AWS上(有一个简单的Deployment设置,它有一个web容器侦听80443

集群还有一个NodePort服务,它将3008030443端口上的流量公开给公众。我正在想办法接受80443上的公共流量。

有什么好方法可以做到这一点?

我对可能解决方案的想法

  1. 在AWS上手动配置ELB,它可以将80443流量映射到300800443端口。

  2. 使用kubernetes支持的LoadBalancer,但我在这里描述了将集群与AWS集成的一些问题。我宁愿尝试其他可能的解决方案,也不愿拘泥于此。

  3. 我看到过很多关于Ingress服务的帖子,但各种帖子的设置完全不同。我想知道在我的设置中,什么是Ingress的好用例。在我的情况下,Ingress应该取代我的NodePort服务吗?

感谢

一旦NodePort服务绑定到所有集群节点上的指定端口,您只需要将流量传递到这些节点中的任何一个,或者传递到所有节点。有时它可能会导致额外的延迟,但从连接的角度来看,它应该可以正常工作。

您可以手动配置负载均衡器,然后将所有群集节点添加到其池中,并为它们配置运行状况检查,以便在特定节点出现故障时将节点从池中排除。

Ingress实际上以类似的方式工作。所有到达任何节点特定端口的流量都会转发到入口吊舱入口控制器查找已创建的入口对象,并根据这些对象中的规范配置进入吊舱。实际上,在我的示例中,入口控制器进入吊舱是相同的。

Ingress可以提供额外的逻辑来管理HTTP级别的流量,如基于路径的路由、在将请求发送到服务之前调整请求、充当SSL端点等。
但无论如何,您都应该以某种方式将外部流量传递到节点。此时,我们将返回负载均衡器配置。

在某些情况下,当您的集群部署在提供负载均衡器服务的云上时,Ingress控制器也会负责创建云Load Balancer

您是否使用kops在AWS上部署您的Kubernetes集群?

通常,kops会创建一个与AWS集成的集群,而不会出现任何问题,因此您可以使用LoadBalancer类型的服务。手动执行所有操作都可能会出现很难找到和纠正的小配置错误。

请查看非常好的文章:

  • Kubernetes NodePort vs LoadBalancer vs Ingress?我什么时候应该用什么

如何在AWS上创建Ingress:

  • 如何在AWS集群上设置NGINX入口控制器
  • Ingress
  • 使用kube ingress aws控制器和capper创建ingress

最新更新