【问题标题】:Google Cloud mixed HTTP/HTTPS Application load balancingGoogle Cloud 混合 HTTP/HTTPS 应用负载平衡
【发布时间】:2017-05-02 01:53:57
【问题描述】:

我想配置 Google 可以负载平衡,以便:

  • 对端口 443 的所有边缘请求都会在负载平衡器处终止 SSL,并路由到托管实例组中的端口 8080
  • 对端口 80 的所有边缘请求都会路由到托管实例组中的端口 8081,然后该实例组将向强制 SSL 的 HTTPS 服务发送 307 响应。

我有:

全局转发规则

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

目标代理

  • httpsreditect-target-proxy -> httpredirect_urlmap
  • webapp-target-proxy -> webapp_urlmap

网址映射

  • httpredirect_urlmap -> redirect_backend(实例池中的8​​081)
  • webapp_urlmap -> webapp_backend(实例池中的8​​080)

这不起作用。

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

是否可以根据端口将流量路由到不同的后端? 选项是他们在 GUI 中的,没有验证错误,感觉应该可以,但是当后端端口全部设置时然后将后端设置为相同的端口?

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

【问题讨论】:

    标签: google-cloud-platform


    【解决方案1】:

    做到这一点的关键是https://cloud.google.com/compute/docs/load-balancing/http/backend-service#restrictions_and_guidance 的一个容易错过的sn-p。

    如果您不将同一个实例组添加到两个不同的后端,您的配置会更简单。如果您确实将相同的实例组添加到两个后端:

    ...

    如果您的实例组分别为多个后端提供两个或多个端口,您必须在实例组中指定不同的端口名称。

    初始设置并不简单,因此以下是参考。

    基于我的配置中的示例:

    • 托管实例组
      • 在端口 80 上运行的主 webapp
      • 在 8081 端口上运行的 HTTP 重定向服务

    防火墙

    确保您的防火墙规则允许 Google 对您的服务进行健康检查:

    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"
    

    健康检查

    确保您为检查正确内部端口的两个服务设置了健康检查。

    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
    

    我遇到的问题

    • 确保正确配置防火墙以允许运行状况检查并设置运行状况检查。
    • 如果出现间歇性502 错误,请检查云控制台中的负载平衡器报告运行状况良好的实例

    其他说明

    • 因为需要两个 url 映射,所以您需要为两个查看我的帐单信息的负载平衡器付费。端口 80 和端口 443 都使用自己的负载均衡器
    • 看起来不可能像AWS 那样使用网络负载平衡器来终止 SSL 并提供 HTTP 服务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多