首页 文章

Google Cloud Load Balancer - 502 - 未管理的实例组运行状况检查失败

提问于
浏览
2

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

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

当试图通过负载均衡器IP访问该站点时,我收到502 - 服务器错误消息 . 我检查了Google日志,并在负载均衡器上发现“failed_to_pick_backend”错误 . 我也注意到它没有通过 Health 检查 .

一些挖掘引导我到这两个链接: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) . 我没有在路由中看到HTTPS负载均衡器IP的条目 . 已安装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和服务器上都有效且相同 . 当针对应用服务器运行curl时,我收到此响应 .

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

思考?

2 回答

  • 1

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

  • 0

    一些更新和经验教训:

    我发现“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
    

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

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

    一旦更新了nginx配置并且在 Health 状况检查中将路径更新到新的/ Health 路径,我们就会收到有效的200个响应 . 这允许运行状况检查返回 Health 实例并允许LB通过流量

相关问题