我有一个Mongo、Express、React Node应用程序,目前部署在microk8s吊舱中。我正在尝试为应用程序设置Ingress。快递服务器的设置是为反应提供快递。静态,如下方
app.use(express.static('DemoApp/build'));
app.get('*', function(req, res, next) {
res.sendFile(path.resolve(__dirname, 'DemoApp', 'build', 'index.html'));
});
当我导航到kubernetes集群的ip:port时,一切都很好,甚至当我导航至ingress主机的FQDN时,一切也很好,但一旦我添加到ingress的路径,应用程序就会只显示一个白色屏幕。需要注意的是,我的kubernetes节点和工作站都在内部专用网络中运行。除此之外,我不想揭露任何事情。我试着遵循这篇文章中提供的步骤(ReactJS应用程序使用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
这是入口的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路由器。根据进一步的研究,我想知道这是否会影响到事情。
如有任何帮助,我们将不胜感激。感谢
重写YAML 中使用的目标注释
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
仅适用于Nginx Ingress。由于您正在使用默认的ingress
,因此它将不起作用。您需要手动安装它,正如这里提到的那样。
现在取决于您的env是本地的还是云的,您需要配置MetalLB。有关更多详细信息,您可以查看此线程。
关于MicroK8s
上的Nginx Ingress
问题,也有类似的StackOverflow问题,您可以在这个SO线程中阅读。
但是,您需要使用重写吗?不能使用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