Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Kubernetes Ingress不支持Visual Studio生成的ASP.NET MVC Hello World WebApp的CSS文件_Asp.net Mvc_Asp.net Core_Kubernetes Ingress - Fatal编程技术网

Asp.net mvc Kubernetes Ingress不支持Visual Studio生成的ASP.NET MVC Hello World WebApp的CSS文件

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

我再次在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:
  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错误

  • 请帮助我理解这个hello-world-ingres.yaml文件的内容。我希望看到
    kind:service
    和以后的
    kind:deployment
    ,而我只看到
    kind:incres
    两次。此文件是定义服务还是部署,还是两者都定义
  • 是否可以增强我的解决方案,使我托管多个网站,其中每个网站都有一个单独的路径,每个网站都有单独的子路径,如
    /js
    /css
    /lib
    ,这样每个网站都可以有自己的jquery.min.js副本,因为它们需要不同版本的jquery
  • 除此之外,我删除了重写规则。我想何时使用重写规则?重写规则可以帮助我适应多个网站吗
  • 2020年9月18日星期五:进展情况? . 这个博客中描述的症状与我的相匹配。然而

    谢谢

    Siegfried

    我一直在使用它来演示重写规则

    使用重写规则的问题在于,它不能容纳具有不同静态文件副本(如jquery.min.js)的多个web应用程序

    C#/VB.NET ASP.NET核心程序员的解决方案是使用UseBasePath

    我希望上面的教程/示例能够解释这些不同的选项及其风险和优点。显然,UseBasePath不适用于java或python Web应用程序(尽管可能有对应的应用程序)

    我没有意识到,由于重写规则首先执行以删除路径的根段,因此UseBasePath没有什么可删除的,而且似乎没有任何影响

    解决方案是在添加对UseBasePath的调用后删除重写规则。

    “我认为问题在于ingress不允许浏览器获取CSS”
    -不要猜测,只需检查它即可。右击网站上的任意位置,单击
    检查
    (在chrome中),单击网络选项卡,然后重新加载页面。您是否看到任何失败的请求?