[alibaba/arthas]tunnel server 如何集群部署

2022-11-10 657 views
9

大佬们 有没有tunnel server集群部署的demo,官网写的太简单了,不明白如何操作实施

回答

7

参考这个配置,需要nginx lua功能。

原理是 tunnel server上有个api,可以查询agentId所在的 tunnel server地址,nginx再把请求转发到对应的 tunnel server。

    # arthas tunnel server pages
    rewrite ^/arthas-tunnel$ /arthas-tunnel/ permanent;
    location ^~/arthas-tunnel/ {
        proxy_set_header Host $host;
        rewrite ^/arthas-tunnel/(.*)$ /$1 break;
        proxy_pass  http://arthas_tunnel;
    }

    # arthas tunnel server port
    location /tunnelws {
        set $target '127.0.0.1';

        access_by_lua_block {
            -- try to find target server from API
            if ngx.var.arg_id then
                local findHostUrl = "/arthas-tunnel/api/cluster/findHost?agentId=" .. ngx.var.arg_id
                local res = ngx.location.capture(findHostUrl)
                if res.status == 200 and res.body and res.body ~= "" then
                    ngx.var.target = res.body
                end
            end
        }
            # -- try to set target server from url
            # if ngx.var.target == "127.0.0.1" and ngx.var.arg_targetServer then
            #     ngx.var.target = ngx.var.arg_targetServer
            # end

        proxy_pass "http://$target:7777";
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
    }

欢迎社区提供一个demo,可以考虑用docker compose。

1

“原理是 tunnel server上有个api,可以查询agentId所在的 tunnel server地址,nginx再把请求转发到对应的 tunnel server”

@hengyunabc 大佬,请教下 如果让agent与所有的tunel-server 建立上WS 连接,是不是前端随便连到哪个Tunel Server 就可以了呢?

6

tunnel server隐藏在nginx后面,agent不可能连接到所有的tunnel server。

8

看之前 bistory 的做法是,proxy(tunnel serve)提供一个域名,agent与proxy连接之前,先通过域名请求获取所有的proxy节点,这时候就可以拿到所有节点了