让我们考虑一下我们有三个环境:
test.website.com
dev.website.com
prod.website.com
每个环境都包含以下微服务:webapp,service1,service2。我希望能够轻松地从JS前端调用所有服务,而无需处理域。如果我可以拨打/services/service1/
并且我在同一个域中的事实会让我处于相同的环境中,那就太棒了。
所以让我们考虑开发环境:
dev.website.com/
- >转到webapp dev.website.com/services/service1/
- >转到service1 dev.website.com/services/service1/
... 为了能够做到这一点,我按如下方式配置了入口:
- path: /services/service1/*
backend:
serviceName: service1
servicePort: 8080
- path: /services/service2/*
backend:
serviceName: service2
servicePort: 8080
- path: /*
backend:
serviceName: webapp
servicePort: 8080
这样做会很好,但事实并非如此。
service1
在被调用时会收到完整路径(/services/service1
),而不仅仅是/
。为此,我发现了这个:ingress.kubernetes.io/rewrite-target: /
- 但我也认为这个功能没有实现,这是矛盾的,没有多大意义。/services/service1/
上的呼叫最终在webapp
。这是一个好方法吗?这样做的最佳做法是什么?
修改:
根据建议我从路径中删除*
,这有助于,但也删除了必要的功能。我需要能够使用:
/en/
- > webapp
/services/service1/method1
- > service1
如果路径中没有*
,则无效。
答案 0 :(得分:1)
根据documentation of nginx-ingress,注释前缀现在为nginx.ingress.kubernetes.io
,而不是您使用的ingress.kubernetes.io
。您可以使用参数--annotations-prefix
更改它。
尝试从*
删除通配符(path
):
- path: /service/service1
backend:
serviceName: service1
servicePort: 8080
- path: /service/service2
backend:
serviceName: service2
servicePort: 8080
- path: /
backend:
serviceName: webapp
servicePort: 8080