我有一个多租户应用程序的要求,其中每个租户都应由如下所示的子域分隔
t1.example.com
t2.example.com
t3.example.com
.
.
.
tn.example.com
因此,在这种情况下,可以有任意数量的租户。我有一个名为 myservice 的Kubernetes后端服务,负责处理所有这些请求,因此需要根据其子域进行标识。 例如如果请求来自tn.example.com,则需要将其重定向到-> myservice / tn 。
t2.example.com -> myservice/t2
t3.example.com -> myservice/t3 and so on.
因此,这里的子域名将是重定向期间的path参数,这将从应用程序角度区分不同的子域。我需要为任意数量的子域动态地执行此操作。 在Kubernetes Nginx入口控制器中如何实现呢?
答案 0 :(得分:0)
恐怕Nginx Ingress不能以简单直接的方式提供您所需要的东西。
但是,您始终可以使用更多高级功能,例如使用configuration snippet through annotation覆盖Server/Location Block
部分,然后使用lua Block提取subdomain
并将请求URI更改为后端。>
Github上有类似的线程,其中用户sanigo
使用configuration-snippet
和lua block
作为解决方法。
nginx.ingress.kubernetes.io/configuration-snippet: |
location ~ ^/v2/ {
set_by_lua_block $repo {
local host = ngx.req.get_headers()["host"];
local reg = "^(?<repo>[^.]+).*";
local m = ngx.re.match(host, reg);
return m['repo'];
}
rewrite ^/(.*)$ /repository/$repo/$1 last;
}
快速笔记:在此示例中,<repo>
的行为与subdomain
完全相同。