这是我的情况,我在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
答案 0 :(得分:1)
这取决于您的前端和后端应用程序对路径的期望。通常,前端将need to be able to find the backend on a certain external path,并且在您的情况下,您的后端需要在外部(/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