带有入口的microk8s kubernetes中的MERN应用程序,页面不显示
MERN app in microk8s kubernetes with ingress, page does not display
我有一个 Mongo、Express、React Node 应用程序,目前部署在 microk8s pod 中。我正在尝试为应用程序设置 Ingress。 Express 服务器设置为使用 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 节点和工作站都 运行 在内部专用网络中。我不想揭露除此之外的任何东西。我已尝试按照 post () 中提供的步骤进行操作,但仍未解决问题。我为 microk8s 启用了内置入口控制器。
下面是我用于入口的 YAML,但它不起作用
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
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 路由器。根据进一步的研究,我想知道这是否会影响一切。
如有任何帮助,我们将不胜感激。谢谢
rewrite-target YAML 中使用的注解
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
仅适用于 Nginx Ingress. As you are using your default ingress
it will not work. You would need to install it manually as it is mentioned here。
现在取决于您的环境,如果它是本地的或云端的,您需要配置 MetalLB. For more details you can check 。
关于 MicroK8s
上的 Nginx Ingress
问题也有类似的 Whosebug 问题,您可以在 .
中阅读相关内容
但是,你需要使用rewrite吗?您不能使用 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
我有一个 Mongo、Express、React Node 应用程序,目前部署在 microk8s pod 中。我正在尝试为应用程序设置 Ingress。 Express 服务器设置为使用 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 节点和工作站都 运行 在内部专用网络中。我不想揭露除此之外的任何东西。我已尝试按照 post (
下面是我用于入口的 YAML,但它不起作用
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
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 路由器。根据进一步的研究,我想知道这是否会影响一切。
如有任何帮助,我们将不胜感激。谢谢
rewrite-target YAML 中使用的注解
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
仅适用于 Nginx Ingress. As you are using your default ingress
it will not work. You would need to install it manually as it is mentioned here。
现在取决于您的环境,如果它是本地的或云端的,您需要配置 MetalLB. For more details you can check
关于 MicroK8s
上的 Nginx Ingress
问题也有类似的 Whosebug 问题,您可以在
但是,你需要使用rewrite吗?您不能使用 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