【问题标题】:Google Cloud Load Balancer - 502 - Unmanaged instance group failing health checksGoogle Cloud Load Balancer - 502 - 非托管实例组未通过运行状况检查
【发布时间】:2018-06-05 13:21:45
【问题描述】:

我目前有一个使用 443 前端、后端和运行状况检查的 HTTPS 负载均衡器设置,它为单个主机 nginx 实例提供服务。

当通过浏览器直接导航到主机时,页面会使用有效的 SSL 证书正确加载。

尝试通过负载平衡器 IP 访问站点时,我收到 502 - 服务器错误消息。我检查了 Google 日志,发现负载均衡器出现“failed_to_pick_backend”错误。我还注意到它没有通过健康检查。

一些挖掘将我带到这两个链接:https://cloudplatform.googleblog.com/2015/07/Debugging-Health-Checks-in-Load-Balancing-on-Google-Compute-Engine.html

https://github.com/coreos/bugs/issues/1195

问题 #1 - 不确定 google-address-manager 是否在服务器上运行 (RHEL 7)。我在 路线。已安装 Google SDK。这是 Google 提供的图片 如果我在控制台中更新 IP 地址,它也会更新 主人。如何检查 google-address-manager 是否正在运行 RHEL7?

[root@server]# ip route ls table local type local scope host
10.212.2.40 dev eth0 proto kernel src 10.212.2.40
127.0.0.0/8 dev lo proto kernel src 127.0.0.1
127.0.0.1 dev lo proto kernel src 127.0.0.1

所有谷歌服务的输出

[root@server]# systemctl list-unit-files
google-accounts-daemon.service                enabled
google-clock-skew-daemon.service              enabled
google-instance-setup.service                 enabled
google-ip-forwarding-daemon.service           enabled
google-network-setup.service                  enabled
google-shutdown-scripts.service               enabled
google-startup-scripts.service                enabled

问题 #2:未收到 200 OK 响应。证书有效 在 LB 和服务器上也是如此。当对着卷曲运行时 应用服务器 我收到此响应。

root@server.com  curl -I https://app-server.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

想法?

【问题讨论】:

    标签: ssl nginx google-cloud-platform google-compute-engine rhel7


    【解决方案1】:

    一些更新和经验教训:

    我发现“google-address-manager”现在已被弃用,取而代之的是正在运行的“google-ip-forward-daemon”。

    [root@server ~]# sudo service google-ip-forwarding-daemon status
    Redirecting to /bin/systemctl status google-ip-forwarding-daemon.service
     google-ip-forwarding-daemon.service - Google Compute Engine IP Forwarding Daemon
       Loaded: loaded (/usr/lib/systemd/system/google-ip-forwarding-daemon.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2017-12-22 20:45:27 UTC; 17h ago
     Main PID: 1150 (google_ip_forwa)
       CGroup: /system.slice/google-ip-forwarding-daemon.service
               └─1150 /usr/bin/python /usr/bin/google_ip_forwarding_daemon
    

    有一个活动的防火墙规则允许 IP 范围 130.211.0.0/22 和 35.191.0.0/16 用于端口 443。目标也已正确设置。

    最后,健康检查当前使用的是默认的“/”路径。开发人员在开发过程中已在站点前面放置了身份验证。如果我绕过 SSL 证书错误,我在运行 curl 时收到 401 未授权。这是我们遇到问题的根本原因。为了补救,我们修改了 nginx 基本身份验证配置以禁用对新路由的身份验证(例如 /health)

    一旦更新了 nginx 配置并且在健康检查时将路径更新为新的 /health 路由,我们收到了有效的 200 个响应。这允许健康检查返回健康的实例并允许 LB 通过流量

    【讨论】:

      【解决方案2】:

      您应该为健康检查服务添加防火墙规则 - https://cloud.google.com/compute/docs/load-balancing/health-checks#health_check_source_ips_and_firewall_rules 并确保您的后端服务侦听负载均衡器 ip(最简单的是绑定到 0.0.0.0) - 这对于内部负载均衡器来说绝对正确,不确定带有外部 ip 的 HTTPS。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-25
        • 1970-01-01
        相关资源
        最近更新 更多