我以为这会很简单,但显然事实并非如此。
我有两个CRA微服务正在运行:
/
/admin
个
minikube ip
是192.168.64.5
,所以浏览器中的完整路由应该是192.168.64.5/
和192.168.64.5/admin
。Dockerfile.dev
只是每个都以npm start
开始。
根路由工作正常,但是/admin
我一辈子都无法让静态文件正确服务......花了几个小时才找到它。我得到的只是Uncaught SyntaxError: Unexpected token '<'
,这是因为静态文件没有得到正确服务。
也就是说,当我执行npm build
,或者只是转到localhost:3000/admin
时,web应用程序得到了正确的服务。npm build
显然不是开发的理想选择。使用localhost
只是绕过了集群路由,所以在开发中可能会遇到的问题现在会在暂存中出现。如果我不能让它工作,我将不得不走这条路。
我已尝试使用"homepage:"
和basename={process.env.PUBLIC_URL}
,但无法解决问题:
第一个
此外,尝试使用.env
PUBLIC_URL
,但效果与"homepage":
相同。
documentation表示:
通常,创建React应用程序会忽略主机名。
但是很明显,minikube ip
和集群有一些不太喜欢的地方,这似乎是一个很常见的需求,所以可能有一个直接的解决方案,我只是忽略了。
有什么建议吗?
# ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: ingress-service-dev
namespace: default
spec:
rules:
- http:
paths:
- path: /admin/?(.*)
backend:
serviceName: admin-cluster-ip-service-dev
servicePort: 4001
- path: /?(.*)
backend:
serviceName: client-cluster-ip-service-dev
servicePort: 3000
- path: /api/?(.*)
backend:
serviceName: api-cluster-ip-service-dev
servicePort: 5000
1条答案
按热度按时间9nvpjoqh1#
好的,很明显这个问题是
ingress.yaml
中的nginx.ingress.kubernetes.io/rewrite-target: /$1
。我把它注解掉了,它开始工作了。您可以参考上面的
index.html
、index.js
和package.json
,因为它们没有变化。最后得到的
ingress.yaml
是:到目前为止没有任何损坏,一切都按预期工作。