Asp.net mvc Kubernetes Ingress不支持Visual Studio生成的ASP.NET MVC Hello World WebApp的CSS文件
我再次在Windows 10上使用Docker for Desktop/Kubernetes来遵循这些说明。本教程非常有效,现在我想通过添加名为的C#/ASP.NETCore3 MVC WebApp来增强它。这基本上是Visual Studio 2019为C#ASP.NET/MVC核心WebApp创建的模板 以下是hello-world-ingres.yaml:Asp.net mvc Kubernetes Ingress不支持Visual Studio生成的ASP.NET MVC Hello World WebApp的CSS文件,asp.net-mvc,asp.net-core,kubernetes-ingress,Asp.net Mvc,Asp.net Core,Kubernetes Ingress,我再次在Windows 10上使用Docker for Desktop/Kubernetes来遵循这些说明。本教程非常有效,现在我想通过添加名为的C#/ASP.NETCore3 MVC WebApp来增强它。这基本上是Visual Studio 2019为C#ASP.NET/MVC核心WebApp创建的模板 以下是hello-world-ingres.yaml: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: nam
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-world-ingress
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- backend:
serviceName: aks-helloworld-one
servicePort: 80
path: /hello-world-one(/|$)(.*)
- backend:
serviceName: aks-helloworld-two
servicePort: 80
path: /hello-world-two(/|$)(.*)
- backend:
serviceName: kuberneteshelloaspnet
servicePort: 80
path: /kuberneteshelloaspnet(/|$)(.*)
- backend:
serviceName: todolistclient
servicePort: 80
path: /todolistclient(/|$)(.*)
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-world-ingress-static
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /static/$2
spec:
rules:
- http:
paths:
- backend:
serviceName: aks-helloworld-one
servicePort: 80
path: /static(/|$)(.*)
这是与上面的入门教程一起使用的,因为我可以从浏览器中看到KubernetShelloworldAspnet的网页(http://localhost/kuberneteshelloaspnet)通过入口。但是,它的格式不正确。我认为问题在于ingress不允许浏览器获取由VisualStudio生成的CSS和其他静态文件
如何使用CSS使我的HelloWorld小程序正确显示
直接使用VisualStudio运行时,网页看起来很好(无docker、无kubernetes、无入口)
2020年9月9日周四更新
根据Matt的评论,我在浏览器中使用了开发人员工具,并确认bootstrap.min.css、boostrap.bundle.min.js、site.js、jquery.min.js的错误数为404
我找到了。然而,该解决方案似乎排除了入口容纳多个网站,每个网站都有自己的CSS和JS目录。他们正在为“/css”和“/js”等路径创建规则,这让我觉得所有应用程序都必须共享相同的css和js目录
我正在按照教程创建一个包含通配符的路径。所以我有
path: /kuberneteshelloaspnet(/|$)(.*)
这应该适应(在我的示例中,使用docker for desktop kubernetes)http://localhost/kuberneteshelloaspnet/lib/jquery/dist/jquery.min.js --对吗?嗯,它似乎不起作用
现在,Chrome中的开发者工具网络显示似乎表明js和css文件只有一个文件名,没有路径。但是当单击“Inspect”时,我看到了HTML的链接,HTML引用了子目录,如“lib”和“css”,这与VisualStudio生成的项目目录是一致的
很明显,我的入口规则允许访问主MVC控制器http://localhost:80/kuberneteshelloaspnet 但不允许访问http://localhost:80/kuberneteshelloaspnet/lib/jquery/dist/jquery.min.js (例如)
如何修改入口规则以适应这些静态文件的子目录
2020年9月12日周六更新:前进强>
此版本的hello-world-ingress.yaml适用于单个web应用程序:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-world-ingress
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- backend:
serviceName: kuberneteshelloaspnet
servicePort: 80
path: /
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-world-ingress-static
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- backend:
serviceName: kuberneteshelloaspnet
servicePort: 80
path: /lib(/|$)(.*)
这只是一个猜测,我不知道为什么它会起作用。该网页似乎可以正常工作,因为它的格式正确,我在chrome开发者工具面板中没有看到任何404错误
kind:service
和以后的kind:deployment
,而我只看到kind:incres
两次。此文件是定义服务还是部署,还是两者都定义/js
和/css
和/lib
,这样每个网站都可以有自己的jquery.min.js副本,因为它们需要不同版本的jquery“我认为问题在于ingress不允许浏览器获取CSS”
-不要猜测,只需检查它即可。右击网站上的任意位置,单击检查(在chrome中),单击网络选项卡,然后重新加载页面。您是否看到任何失败的请求?