如何使用 Google Cloud Engine HTTP(S) 负载均衡器访问已在 Google Cloud Platform 上的 k8s 中部署的应用程序?

如何使用 Google Cloud Engine HTTP(S) 负载均衡器访问已在 Google Cloud Platform 上的 k8s 中部署的应用程序?

目的:使用 HTTP(S) 负载均衡器 (HLB) 访问驻留在 kubernetes (k8s) 命名空间中的应用程序

方法

TCP 负载平衡 (TLB)(第 4 层)

  • 已在 Google Cloud Platform (GCP) 上创建 k8s 集群
  • 已创建静态 IP
  • 已创建 TLB、分配静态 IP 并更新 DNS
  • 导航到 some.domain.com 显示已在“some”命名空间中部署的应用程序
  • another.domain.com 显示在“another”命名空间内运行的应用程序
  • 当部署了其他命名空间时,例如,something-else,然后转到 something-else.domain.com 也会从该命名空间返回应用程序。

HTTP(S) 负载平衡(第 7 层)

  • 假设是可以以相同的方式访问应用程序,即只需用第 7 层 TLB 替换 TLB。
  • 遵循官方 GCP 之一,配置后端,保留默认路径,并在前端部分配置证书
  • DNS 已更新
  • 五分钟后,访问 some.domain.com 时返回 HTTP 502
  • 入口 nginx 日志 POD 日志被跟踪,但在刷新 some.domain.com 时没有添加其他日志记录
  • GCP 日志显示存在“后端错误”
  • 负载均衡器的健康检查最初运行不佳,当添加 10256 HTTP 检查后,服务变为绿色
  • 当导航到某些命名空间时,会显示以下错误:

错误:服务器错误

服务器遇到临时错误,无法完成您的请求。

请于 30 秒后重试。

讨论

  • 尽管添加了相同的健康检查(即用于 TLB 的健康检查)并将 HLB 变为绿色,但这可能是误报。
  • 根据此问答,该问题是由不健康的服务引起的,但添加了 TCP 检查 10256,使服务变为绿色,然后问题仍然存在。是否应该添加另一项检查?
  • 认为 TLB 也能以同样的方式工作的假设看起来是错误的。根据 GCP 日志,HLB 甚至无法将流量路由到命名空间。

子问题

  • 应该配置什么健康检查来检查HLB?
  • HLB的路由与TLB有何不同?

答案1

请查看以下 GCP 文档:

  1. 配置使用 Ingress 进行 HTTP(S) 负载平衡 - 本文档提供了一个教程,介绍如何通过配置 Ingress 资源在外部 HTTP(S) 负载平衡器后面运行 Web 应用程序,非常有帮助。
  2. 使用以下方式公开应用程序服务- 在这里,您可以创建一个 Deployment,并通过创建 Service(即 ClusterIP(默认)、NodePort、LoadBalancer、ExternalName 或 Headless)来公开其 Pod。然后,您可以向 Service 发送 HTTP 请求。
  3. 如何健康检查工作 - 在这里您将能够验证健康检查所需的探测 IP 范围和防火墙规则。

相关内容