一个域名聚合多个服务的典型场景是:web UI在domain/根路径下公开,api后端服务在domain/api下公开。
接下来我们就以这个场景为例简要介绍两种实现方式。
1 使用NGINX 在主服务的nginx中配置多个location (这个方式依赖k8s组件dns,且最好将同一域名下的所有服务部署到同一个命名空间)
代码如下
server {
listen 80;
server_name _;
# 注意:
# 为了清晰说明一个域名聚合多个服务的用法,此例省略了其他非必要配置
# proxy_pass 后的参数最后带不带/ 决定着在向后端传递路径时 是否从路径上删除location后的值
# 比如 location /_api { proxy_pass http://api-service:8080/;}
# 这种写法会使路径/api/a/b/c在传向api-service时变为/a/b/c
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ^~ /_api/ {
proxy_pass http://inner-api.demo:8080/;
}
location ^~ /sub01/ {
proxy_pass http://sub01.demo:80/;
}
location ^~ /sub01_api/ {
proxy_pass http://sub01-api.demo:8080/;
}
location ^~ /sub02/ {
proxy_pass http://sub02.demo:80/;
}
location ^~ /sub02_api/ {
proxy_pass http://sub02-api.demo:8080/;
}
}
2 使用 Ingress (可能需要通过配置注解 重写_api/user/login路径为/user/login)
拿nginx ingress举例 Prefix写法如下
Annotations-注释
键 值
nginx.ingress.kubernetes.io/rewrite-target /$1
nginx.ingress.kubernetes.io/use-regex true
参考文档:
发表回复