首页 文章

Google Cloud混合了HTTP / HTTPS应用程序负载 balancer

提问于
浏览
2

我想配置Google Can Load balancer ,以便:

  • 对端口443的所有边缘请求在负载均衡器处终止SSL并路由到托管实例组中的端口8080

  • 对端口80的所有边缘请求路由到托管实例组中的端口8081,然后该托管实例组将向强制SSL的HTTPS服务发送307响应 .

我有:

Global forwading rules

  • 全局转发规则STATIC_IP:80 - > httpsreditect-target-proxy

  • 全局转发规则STATIC_IP:443 - > webapp-target-proxy

Target proxies

  • httpsreditect-target-proxy - > httpredirect_urlmap

  • webapp-target-proxy - > webapp_urlmap

URL Maps

  • httpredirect_urlmap - > redirect_backend(实例池中的8081)

  • webapp_urlmap - > webapp_backend(实例池中为8080)

这不起作用 .

使用此设置,如果我将redirect_backend端口设置为8081,则webapp_backend端口也会更改为8081.同样,如果我将webapp_backend端口设置为8080,则redirect_backend端口设置为8080 .

Is it possible to route traffic based on port to different backends? 选项是他们在GUI中,没有验证错误,感觉应该是可能的但是当设置后端端口时,所有后端都被设置为同一个端口?

我知道将HAProxy放在节点上是一种解决方案并反向代理那里的微服务,但我宁愿让Google Cloud Application Loadbalancer终止SSL作为使用f1-micro实例 .

1 回答

  • 4

    这样做的关键是https://cloud.google.com/compute/docs/load-balancing/http/backend-service#restrictions_and_guidance上的一个容易错过的片段 .

    如果不将同一实例组添加到两个不同的后端,则配置会更简单 . 如果确实将同一实例组添加到两个后端:...如果实例组分别为多个后端提供两个或多个端口,则必须在实例组中指定不同的端口名称 .

    初始设置非常简单,因此下面是参考 .

    基于我的配置中的示例:

    • 托管实例组

    • 在端口80上运行的主要webapp

    • 在端口8081上运行的HTTP重定向服务

    防火墙

    确保您拥有防火墙规则,允许Google通过 Health 检查访问您的服务:

    gcloud compute firewall-rules create allow-http-from-lb \
      --description "Incoming http allowed from cloud loadbalancer." \
      --allow tcp:80
      --source-ranges "130.211.0.0/22"
    
    gcloud compute firewall-rules create allow-http-redirect-from-lb \
      --description "Incoming http redirect service allowed from cloud loadbalancer." \
      --allow tcp:8081
      --source-ranges "130.211.0.0/22"
    

    Health 检查

    确保为两个服务检查正确的内部端口设置了 Health 检查 .

    gcloud compute http-health-checks create webapp-healthcheck \
      --description "Main webapp healthcheck" \
      --port 80 \
      --request-path "/healthcheck"
    
    gcloud compute http-health-checks create httpsredirect-service-healthcheck \
      --description "HTTP redirect service healthcheck" \
      --port 8081 \
      --request-path "/healthcheck"
    

    配置命名端口

    如果您的实例组在要在公共负载均衡器下公开的不同端口上运行多个微服务,则看起来是关键 .

    INSTANCE_GROUP_NAMEREGIONnamed-ports 替换为您的服务的正确值 .

    gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME \
      --region=REGION \
      --named-ports "webapp:80,httpsredirectservice:8081"
    

    创建负载均衡器后端

    确保 --port-name 与上一步中的正确命名端口匹配 .

    gcloud compute backend-services create webapp-lb-backend \
      --http-health-check webapp-healthcheck \
      --protocol http \
      --description "Webapp load balancer backend" \
      --port-name webapp
    
    
    gcloud compute backend-services create httpsredirect-lb-backend \
      --http-health-check webapp-healthcheck \
      --protocol http \
      --description "HTTP -> HTTPS redirect service load balancer backend" \
      --port-name httpsredirectservice
    

    为两个服务创建URL映射

    确保 --default-service 使用上一步中配置的值 .

    gcloud compute url-maps create webapp-urlmap \
      --default-service webapp-lb-backend
    
    gcloud compute url-maps create httpsredirect-urlmap \
      --default-service httpsredirect-lb-backend
    

    创建目标代理

    目标代理由一个或多个全局转发规则引用,并将传入的HTTP或HTTPS请求路由到URL映射 .

    我们为webapp创建一个https目标代理,以在负载均衡器处终止SSL .

    gcloud compute target-https-proxies create webapp-target-proxy \
      --url-map webapp-urlmap \
      --ssl-certificate [SSL_CERTIFICATES]
    

    重定向服务:

    gcloud compute target-http-proxies create httpsredirect-target-proxy \
      --url-map httpsredirect-urlmap
    

    全球转发规则

    最后一步是创建全局转发规则

    gcloud compute forwarding-rules create webapp-forwarding-rule
      --global \
      --address LB_STATIC_IP \
      --port-range 443 \
      --target-https-proxy webapp-target-proxy
    
    gcloud compute forwarding-rules create httpsredirect-forwarding-rule
      --global \
      --address LB_STATIC_IP \
      --port-range 80 \
      --target-http-proxy httpsredirect-target-proxy
    

    我遇到的问题

    • 确保正确配置防火墙以允许设置运行状况检查和运行状况检查 .

    • 如果获得intermitent 502 错误,请检查 Cloud 控制台中的loadbalencers报告 Health 实例

    其他说明

    • Because two url maps are needed you are charged for two load balancers looking at my billing info . 端口80和端口443都使用自己的负载均衡器

    • 没有't look like it'可以使用网络负载均衡器来终止SSL和服务HTTP,这可以在 AWS 上完成

相关问题