多个 nginx 入口重写的默认路径
Default path on multiple nginx ingress rewrite
这是我的情况,我在 kubernetes(入口)上,有两张 docker 图片:一张专用于网络,第二张专用于 api。
在下一个配置下(在消息的末尾):/web
将显示将对 /api
进行一些调用的前端,一切都很好.
但 /
是 404,因为没有定义任何内容,我无法在入口配置中找到一种方法来告诉 /
应该重定向到 /web
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ingress
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- demo.com
secretName: tls-secret
rules:
- host: demo.com
http:
paths:
- path: /api
backend:
serviceName: api-app
servicePort: 8080
- path: /web
backend:
serviceName: web-app
servicePort: 80
这取决于您的前端和后端应用对路径的期望。通常,前端将 ,在您的情况下,听起来您的后端需要在外部路径(/api
)上与它在集群内的工作路径(/
)上可用.您可以重写对 api 的请求的目标,以便 /api
将在请求路由到后端时转到 /
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ingress-backend
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- demo.com
secretName: tls-secret
rules:
- host: demo.com
http:
paths:
- path: /api
backend:
serviceName: api-app
servicePort: 8080
并且您还可以为不重写目标的前端定义一个单独的入口(具有不同的名称),以便对 /web
的请求将转到 /web
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ingress-frontend
annotations:
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- demo.com
secretName: tls-secret
rules:
- host: demo.com
http:
paths:
- path: /web
backend:
serviceName: web-app
servicePort: 80
这是我的情况,我在 kubernetes(入口)上,有两张 docker 图片:一张专用于网络,第二张专用于 api。
在下一个配置下(在消息的末尾):/web
将显示将对 /api
进行一些调用的前端,一切都很好.
但 /
是 404,因为没有定义任何内容,我无法在入口配置中找到一种方法来告诉 /
应该重定向到 /web
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ingress
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- demo.com
secretName: tls-secret
rules:
- host: demo.com
http:
paths:
- path: /api
backend:
serviceName: api-app
servicePort: 8080
- path: /web
backend:
serviceName: web-app
servicePort: 80
这取决于您的前端和后端应用对路径的期望。通常,前端将 /api
)上与它在集群内的工作路径(/
)上可用.您可以重写对 api 的请求的目标,以便 /api
将在请求路由到后端时转到 /
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ingress-backend
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- demo.com
secretName: tls-secret
rules:
- host: demo.com
http:
paths:
- path: /api
backend:
serviceName: api-app
servicePort: 8080
并且您还可以为不重写目标的前端定义一个单独的入口(具有不同的名称),以便对 /web
的请求将转到 /web
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ingress-frontend
annotations:
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- demo.com
secretName: tls-secret
rules:
- host: demo.com
http:
paths:
- path: /web
backend:
serviceName: web-app
servicePort: 80