【问题标题】:NGINX loadbalancing on KubernetesKubernetes 上的 NGINX 负载均衡
【发布时间】:2019-04-10 04:00:27
【问题描述】:

我有一些服务在 Kubernetes 中运行。我需要一个 NGINX 在他们前面,根据 URL 重定向流量,处理 SSL 加密和负载平衡。

有一个适用于该场景的 nginx.conf。我缺少的是在 gcloud 上设置架构的正确方法。

使用 nginx 启动 StatefulSet 并让负载平衡服务公开 NGINX 是否正确?我是否理解正确,gcloud LB 会将配置的端口(例如 80 + 443)传递给我的 NGINX 服务,我可以在其中处理其余部分并将流量转发到后端服务?

【问题讨论】:

  • gcloud 负载均衡器是否提供 ssl 加密终止、url 路由等?如果是,那么您只需要直接在 glocud 负载均衡器中注册您的服务节点端口即可。

标签: nginx kubernetes google-cloud-platform


【解决方案1】:

你真的不需要StatefulSetDeployment 就可以了,因为 nginx 已经在 gcloud TCP 负载平衡器前面,如果由于任何原因你的 nginx pod 出现故障,gcloud 负载平衡器不会将流量转发给它。由于您已经拥有 gcloud 负载均衡器,因此您必须使用 NodePort Service 类型,并且您必须将 gcloud 负载均衡器指向该特定端口上 K8s 集群上的所有节点。

请注意,您的nginx.conf 必须知道如何路由到您的 K8s 集群内部的所有服务。我建议你设置一个nginx ingress controller,它基本上会通过Ingress 资源为你管理nginx.conf,你也可以将它公开为LoadBalancer 服务类型。

【讨论】:

  • 谢谢。 Ingress 控制器和在 LoadBalancer 后面运行的简单 nginx pod 有什么区别?
  • 入口控制器管理 nginx 配置,而不是您管理 nginx 配置。
  • 好吧,那么两种情况下的请求流程都是User --> LB service --> NGINX --> Pods?
  • 我希望这是相关的:在玩耍时,我在 kubernetes 集群之外启动了一个 nginx VM 并分配了一个外部 IP。我能够使用其内部 IP 地址将请求委托给我的 pod。但是此 VM 无法解析内部主机名(服务设置为 ClusterIP: None)。我想这与 nginx VM 不是 kubernetes 集群的一部分有关?
  • 是的。这也是正确的,ClusterIP 服务在集群之外是看不到的。 DNS 也无法解析,因为 coredns 或 kube-dns 在集群内解析。
猜你喜欢
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
相关资源
最近更新 更多