我已经为此工作了一段时间,似乎什么也做不了。
基本上,我有一个微服务的入口 Controller ,其URL为:
- path: /client/?(.*)
backend:
serviceName: client-cluster-ip-service
servicePort: 3000
但是,当我导航到
192.168.64.4/client
(这是minikube ip
)时,我什么也看不到,因为用于静态文件的URL npm start
是/static
。我需要将其更改为/client/static
。那可能吗?
我知道
homepage: "/client"
不是一个选项,因为它仅用于生产。这是在CRA中,因此我想避免将其弹出。编辑:
添加了我当前的
ingress.yaml
:apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: ingress-service
namespace: default
spec:
rules:
- http:
paths:
- path: /client/?(.*)
backend:
serviceName: client-cluster-ip-service
servicePort: 3000
- path: /api/?(.*)
backend:
serviceName: server-cluster-ip-service
servicePort: 5000
/api
路由工作正常,因为Django具有一种处理前缀路径的内置方法。如果不这样做,它将无法正确提供static
文件,特别是对于admin
门户:FORCED_SCRIPT_NAME = '/api'
STATIC_URL = '/api/static/'
ReactJS,显然不在开发中。您可以手动导航到
/client/static/js/bungle.js
并在此处查看.js
。因此,/client
需要以某种方式添加到/static/
路径的前缀。我确实尝试更改以下内容:
nginx.ingress.kubernetes.io/rewrite-target: /$2
这产生了一些奇怪的行为。
/client
上,仍然是同样的问题,但在任何位置(例如/static
,/client/static
等)都找不到/static
文件/api
上,无论有没有FORCE_SCRIPT_NAME
,都无法使其提供任何服务。入口正在进入Django,但表示无法匹配任何路线,这非常奇怪。 最佳答案
在您的入口定义中使用重写注释,我认为您的情况将是这样的:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
$ 2被替换为匹配项的捕获(。*),那么,如果您尝试访问/ client / static,则结果重写为/ static ...从理论上讲应该可以,请尝试一下!
如果这样做不起作用,请让我知道尝试找出原因
这也是我的资源的类似定义,并不完全符合您的情况,但是我正在使用重写,并且它在这里起作用。
apiVersion: v1
kind: Ingress
metadata:
name: proxy-ingress
namespace: repoflow-s3-proxy-demo
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /resources.repoflow.com/resources/$2
nginx.ingress.kubernetes.io/upstream-vhost: s3.amazonaws.com
spec:
rules:
- host: s3-proxy.repoflow.com
http:
paths:
- path: /resources(/|$)(.*)
backend:
serviceName: resources-external-service
servicePort: 80
关于reactjs - 还是要使用npm start从带有前缀的网址(例如/client/static)中转换/static?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832144/