问题描述
我有一个Mongo,Express,React Node应用程序,当前已部署在microk8s吊舱中。我正在尝试为该应用设置Ingress。快递服务器设置为如下所示与express.static进行服务
app.use(express.static('DemoApp/build'));
app.get('*',function(req,res,next) {
res.sendFile(path.resolve(__dirname,'DemoApp','build','index.html'));
});
当我导航到kubernetes集群的ip:port时,一切正常,当我导航到入口主机的FQDN时,即使一切正常,但是一旦我向入口添加路径,则该应用仅显示一个白屏。值得注意的是,我的kubernetes节点和工作站都在内部专用网络中运行。我没有试图公开任何其他内容。我已尝试按照本文(ReactJS app displays whitescreen using Kubernetes Ingress)中提供的步骤进行操作,但尚未解决该问题。我已经为microk8s启用了内置的入口控制器。
下面是我用于无效的YAML
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
Metadata:
name: demo-ingress
annotations:
Nginx.ingress.kubernetes.io/rewrite-target: /$1
namespace: default
spec:
rules:
- host: apps.sst.com
http:
paths:
- path: /demo(/|$)(.*)
backend:
serviceName: mern-demo
servicePort: 4000
这是有效的Ingress YAML
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
Metadata:
name: demo-ingress
annotations:
namespace: default
spec:
rules:
- host: apps.sst.com
http:
paths:
- path:
backend:
serviceName: mern-demo
servicePort: 4000
另一个要注意的是我的应用程序正在使用React Router。根据进一步的研究,我想知道这是否会影响到一切。
任何帮助将不胜感激。谢谢
解决方法
在您的YAML中使用的
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
仅适用于Nginx Ingress 。当您使用默认的ingress
时,它将不起作用。您将需要手动安装它,因为它提到了here。
现在取决于您的环境是本地环境还是云环境,您需要配置MetalLB。有关更多详细信息,请检查this thread。
关于Nginx Ingress
上的MicroK8s
问题,也存在类似的StackOverflow问题,您可以在this SO thread中进行阅读。
但是,您需要使用重写吗?您不能使用multiple paths
和default backend
吗?像这样:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
backend:
serviceName: hello-world
servicePort: 60000
rules:
- http:
paths:
- path: /world
backend:
serviceName: hello-world
servicePort: 60000
- path: /kube
backend:
serviceName: hello-kubernetes
servicePort: 80