问题描述
我正在为由单体应用和微服务组成的 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。