通过统一域名不同url访问多个集群的dashabord服务

【 TiDB 使用环境】测试环境
【 TiDB 版本】v7.1.0。 operator版本为1.4.6
【复现路径】
【遇到的问题:问题现象及影响】
如何通过统一域名不同url访问多个集群的dashabord服务,例如:
域名为: www.tidb-dashboard.com
集群一的ns为:aaa
集群二的ns为:bbb
集群三的ns为:ccc

访问集群一的dashboard服务:http://www.tidb-dashboard.com/dashboard/aaa
访问集群二的dashboard服务:http://www.tidb-dashboard.com/dashboard/bbb
访问集群三的dashboard服务:http://www.tidb-dashboard.com/dashboard/ccc

通过nginx配置吧。。。

nginx转发了解一下

嗯,思路是这样的,nginx转发到ingress,再由ingress转发到service,
中间涉及到url裁剪和dashboard的http pash,测试了几个方案,没测通。

了解了,没测通

访问集群一的dashboard服务:http://www.tidb-dashboard.com/aaa/dashboard
访问集群二的dashboard服务:http://www.tidb-dashboard.com/bbb/dashboard
访问集群三的dashboard服务:http://www.tidb-dashboard.com/ccc/dashboard
建议还是
访问集群一的dashboard服务:http://tidb-aaa.tidb-dashboard.com/dashboard
访问集群二的dashboard服务:http://tidb-bbb.tidb-dashboard.com/dashboard
访问集群三的dashboard服务:http://tidb-ccc.tidb-dashboard.com/dashboard

多个二级域名,注意添加白名单只允许您自己的互联网ip可以访问

嗯,这样也可以,但最好是把dashboard放前边,我们这边有格式要求

http://tidb-aaa.tidb-dashboard.com/dashboard”这个url不太可行,域名“tidb-dashboard.com”是固定的,后边的路径会随着ns的变化而变化

https://tidb-dev.xxx.com/dashboard
https://tidb-report.xxx.com/dashboard

这是我们配置,两套监控,分配了两个二级域名

嗯,这种需要人为介入,我们现在要求自动化

使用Ingress或者nginx都可以实现,看你架构了。

nginx配置

这个方案就是我们正在测试的方案,dashborad的path prefix不生效,导致该方案不通

你们的通吗

nginx配置不负责,核心点不在这理,核心点在dashboard的http path上

这个方案在代理单个dashboard服务时可行,代理多个集群时需要根据“/dashboar/cluster_id”做转发,这是时候就不行了

http {
server {
listen 80;
server_name www.tidb-dashboard.com;

    location /dashboard/aaa {
        proxy_pass http://aaa-tidb-dashboard-service; # aaa集群dashboard地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /dashboard/bbb {
        proxy_pass http://bbb-tidb-dashboard-service; # bbb集群dashboard地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /dashboard/ccc {
        proxy_pass http://ccc-tidb-dashboard-service; # ccc集群dashboard地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

}

这么写不行吗?为什么要去匹配集群ID呢?直接匹配地址不行吗?

这个方案需要维护nginx配置,灵活性略有欠缺,
我们目前的方案是nginx匹配“/dashboard”路径,将“/dashboard”开头的请求全部转发到后端ingress,再由ingress匹配“/dashboard/cluster_id”,将请求转发到不同的tidb集群的dashboard服务上

这样的话,后期维护少很多

1 个赞

我们公司别的部门有的在用这个方案,需要有个程序实施监听k8s中namespace的变化,以便增加或删除相关的配置

嗯嗯 ,明白了。殊途同归,达到要求就好~!

受公司业务类型所限,所以技术方案也不相同