• 排查 docker flow proxy 的 503 问题


    这是今天我们在开发环境下 docker swarm 集群上遇到的问题,在这篇博文中记录一下排查过程。

    先登录到应用容器内检查一下其中运行的站点是否能正常访问:

    # docker exec -it 024be860ad79 /bin/bash
    # curl -s -D - -o /dev/null http://127.0.0.1
    HTTP/1.1 200 OK

    可以正常访问。

    然后登录到 docker flow proxy 的 proxy_proxy 服务的容器内,检查一下是否可以正常访问应用容器中的站点:

    # docker exec -it $(docker ps --filter name=proxy_proxy -q | head -1) /bin/sh
    
    # apk add --update curl
    # curl -s -D - -o /dev/null http://q_web
    HTTP/1.1 200 OK

    也可以正常访问。

    接着查看该容器内 HAProxy 的配置文件:

    cat /cfg/haproxy.cfg

    发现很多根据主机名进行路由转发的 acl 配置丢失,原本有很多下面这样的路由配置

    acl url_q_web80_0 path_beg /
    acl domain_q_web80_0 hdr(host) -i q.cnblogs.com
    use_backend q_web-be80_0 if url_q_web80_0 domain_q_web80_0

    而 backend 的配置正常。

    于是强制更新 proxy_proxy 服务:

    $ docker service update -d=false --force proxy_proxy
    proxy_proxy
    overall progress: 2 out of 2 tasks 
    1/2: running   [==================================================>] 
    2/2: running   [==================================================>] 
    verify: Waiting 1 seconds to verify that tasks are stable... 

    更新后,HAProxy 的路由配置数据恢复正常。

    但过了会,HAProxy 的路由配置数据又丢失了。

    用下面的命令查看 swarm-listener 的路由配置,路由都是正常的,/cfg/haproxy.cfg 的路由配置问题并没有影响到实际的路由配置。

    curl http://swarm-listener:8080/v1/docker-flow-swarm-listener/get-services

    查看 swarm-listener 的日志

    docker service logs proxy_swarm-listener

    发现下面的错误:

    ERROR: Request http://proxy:8080/v1/docker-flow-proxy/reconfigure?distribute=true&port=80&serviceDomain=q.cnblogs.com&serviceName=q_web returned status code 500

    折腾半天没解决,只能重建集群。

    在重建集群部署应用时,特地观察了一下 /cfg/haproxy.cfg 中的配置是如何被更新的。

    当使用 docker stack deploy 命令部署时,proxy_swarm-listener 日志中会有这样的记录:

    Sending service created notification to http://proxy:8080/v1/docker-flow-proxy/reconfigure?distribute=true&port=80&serviceDomain=q.cnblogs.com&serviceName=q_web

    然后 proxy_proxy 容器中的 /cfg/haproxy.cfg 文件被添加这样的配置:

    acl domain_q_web80_0 hdr(host) -i q.cnblogs.com dev-q.cnblogs.com
    use_backend q_web-be80_0 if url_q_web80_0 domain_q_web80_0
    
    backend q_web-be80_0
        mode http
        server q_web q_web:80
  • 相关阅读:
    Java之Stream流及方法引用的详细解析二
    金融大模型的下一步是什么?奇富科技费浩峻:大模型需要向小模型学习
    大小屏适配
    贝锐蒲公英异地组网:降低建筑工地远程视频监控成本、简化运维
    POJ1062 , kuangbin专题 昂贵的聘礼
    Java 面试,创建了几个String 对象? 我让问!让你问!让你问!
    阿里云物联网平台专用工具详细说明
    Linux-git
    八大排序之交换排序
    CC++ socket网络编程扫盲篇
  • 原文地址:https://blog.csdn.net/m0_62089210/article/details/127821219