【发布时间】:2019-01-20 01:47:15
【问题描述】:
我的后端运行了三个服务,并且 Ingress 路由定义如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- myapp.westeurope.cloudapp.azure.com
secretName: acme-crt-secret
rules:
- host: myapp.westeurope.cloudapp.azure.com
http:
paths:
- path: /
backend:
serviceName: myapp-mvc
servicePort: 80
- path: /api
backend:
serviceName: myapp-api
servicePort: 80
- path: /identity
backend:
serviceName: myapp-identity
servicePort: 80
问题是 myapp-api 已经在监听对/api/v1/myresource 的请求。在当前配置下,myapp-api 服务仅向myapp.westeurope.cloudapp.azure.com/api/api/v1/myresource 提供请求(请注意.../api/api/...)。
是否可以通过 myapp-api 服务向 /api 提供请求,但在不创建另一个 Ingress 的情况下将这些请求重写为服务的 /?因此,myapp-api 应该为myapp.westeurope.cloudapp.azure.com/api/v1/myresource 提供请求。
【问题讨论】:
-
你解决了这个问题吗?
-
不完全令人满意。在我的例子中,我使用 .NET Core 作为服务,它为提取第一个路径的 http 请求 (
UsePathBase(...)) 提供了一个中间件。我认为其他选择是使用 nginx 以外的其他入口实现,或者使用多个入口。
标签: nginx kubernetes kubernetes-ingress nginx-ingress