如何使用 Google 部署管理器 (Python + YAML) 部署内部 HTTP(S) LoadBalancer?

问题描述

我正在为由单体应用和微服务组成的 Web 应用程序实现 IaC。我想在我们所有的微服务前面放置一个 internal HTTP load balancer,但还没有找到任何示例。我看着Cloud Foundation Toolkit。这里的内部负载均衡器仅支持 TCP/UDP 内部负载均衡器。 Google 的 deploymentmanager-samples 根本没有提到它!!此时,似乎唯一的选择是从头开始构建 python 模板。

在我跳入那个兔子洞之前,想检查一下是否有任何可用的示例或示例。

解决方法

根据一些Google文档,您只需要修改内部TCP LB模板中的一些值即可。

以下是内部TCP LB示例代码的regionBackendService。

{
      'name': loadbalancer_name,'type': 'compute.v1.regionBackendService','properties': {
          'region': properties['region'],'network': properties['network'],'healthChecks': ['$(ref.' + healthcheck_name + '.selfLink)'],'backends': properties['instance-groups'],'protocol': 'TCP','loadBalancingScheme': 'INTERNAL',}
  }

这是 Google document 处的 compute.v1.regionBackendService 参考。

协议

可能的值为 HTTP、HTTPS、HTTP2、TCP、SSL、UDP 或 GRPC。 取决于所选的负载均衡器或 Traffic Director 配置。请参阅负载均衡器的文档或 交通总监了解更多信息。

负载均衡方案

为内部 HTTP(S) 负载平衡选择 INTERNAL_MANAGED。

因此您需要将 'protocol':'TCP' 修改为 'protocol':'HTTP'HTTPS,并将 'loadBalancingScheme': 'INTERNAL' 修改为 'loadBalancingScheme': 'INTERNAL_MANAGED'

以下是 TCP 内部 LB 代码的转发规则。

{
      'name': forwardingrule_name,'type': 'compute.v1.forwardingRule','properties': {
          'ports': [80],'subnetwork': properties['subnet'],'region': properties['region'],'backendService': '$(ref.' + loadbalancer_name + '.selfLink)',}
  }

您也可以找到关于此资源的 reference

负载均衡方案

INTERNAL_MANAGED 用于: 内部 HTTP(S) 负载平衡

IP协议

内部 HTTP(S) 负载平衡:负载平衡方案是 INTERNAL_MANAGED,只有 TCP 有效。

因此,您需要将 loadBalancingScheme 值从 INTERNAL 修改为 INTERNAL_MANAGED。 或者您可能需要将 IPProtocol 值添加到您的转发规则中。

最后,下面是 TCP 内部 LB 代码的健康检查。

{
      'name': healthcheck_name,'type': 'compute.v1.healthCheck','properties': {
          'type': 'TCP','tcpHealthCheck': {
              'port': 80
          },}
  }

正如我在 document 中发现的那样,对于 http(s) 内部 LB,您必须使用“regionhealthcheck”而不是“healthcheck”。

所以需要修改资源类型为compute.v1.regionHealthChecks

我不完全确定我的描述,但您可以通过参考 Google 文档和示例代码创建自己的 HTTP(S) 内部 LB。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...