1

我使用kubeadm. 服务被声明为ClusterIP. 目前我正在尝试将我的应用程序部署为loadbalancerMetallb 类型的入口,但我遇到了一些问题。如果我将我的应用程序部署为入口,则找不到一些 jv 和 css 组件。将应用程序作为服务运行没有问题,但在我使用 Ingress 时出现了问题。它是一个 ASP.NET Core 应用程序

我的入口来源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: taco-ingress
spec:
  rules:
   - host: tasty.taco.com
     http:
       paths:
       - path: /web1
         pathType: Prefix
         backend:
           service:
             name: web1
             port:
               number: 80
       - path: /web2
         pathType: Prefix
         backend:
           service:
             name: web2
             port:
               number: 80

我的部署源:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web1
  labels:
    app: taco
    taco: web1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: taco
      task: web1
  template:
    metadata:
      labels:
        app: taco
        task: web1
        version: v0.0.1
    spec:
      containers:
      - name: taco
        image: yatesu0x00/webapplication1:ingress-v1
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web2
  labels:
    app: taco
    taco: web2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: taco
      task: web2
  template:
    metadata:
      labels:
        app: taco
        task: web2
        version: v0.0.1
    spec:
      containers:
      - name: taco
        image: yatesu0x00/webapplication2:ingress-v1
        ports:
        - containerPort: 80

我的服务来源:

---
apiVersion: v1
kind: Service
metadata:
  name: web1
spec:
  ports:
  - targetPort: 80
    port: 80
  selector:
    app: taco
    task: web1
---
apiVersion: v1
kind: Service
metadata:
  name: web2
spec:
  ports:
  - targetPort: 80
    port: 80
  selector:
    app: taco
    task: web2

应用程序的 html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Epic Website - (⌐■_■)</title>
    <link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="/css/site.css" />
</head>
<body>
    <header>     
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" href="/">Home</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="navbar-brand" href="/Home2">Home2</a>
                        </li>
                        <li class="nav-item">
                            <a class="navbar-brand" href="/Home/ItWorks">Click me!</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
                <h2>Want this taco?</h2>
    <pre>
    {\__/}
    ( ●.●)
    ( >
    </pre>
     
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2020 - <a href="/Home/Privacy">Privacy</a>
        </div>   
    </footer>
    <script src="/lib/jquery/dist/jquery.min.js"></script>
    <script src="/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/darkmode-js@1.5.7/lib/darkmode-js.min.js"></script>
    <script src="/js/site.js?v=8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U"></script>
    
</body>
</html>

如果我在浏览器中打开控制台,我可以看到404 not found所有 type 元素都有<script>

4

1 回答 1

1

如果您仔细查看日志,您会发现问题的原因是您的应用程序css/site.css在路径中请求静态内容(例如文件),并且由于 Ingress Controller在其返回的定义tasty.taco.com/css/site.css中没有前缀定义/css404 错误代码。

静态内容在以下路径中可用tasty.taco.com/web1/css/site.css- 看看我使用了web1前缀,因此 Ingress 知道将这个请求重定向到哪个服务。

nginx.ingress.kubernetes.io/rewrite-target通常,在请求静态内容的应用程序中使用注释通常会导致这样的问题。

解决此问题的方法是使用此注释并添加到您的应用程序中设置基本 URL 的可能性,在您的示例中使用 UsePathBaseMiddlewareclass

表示从请求路径中提取指定路径基并将其附加到请求路径基的中间件。

有关详细步骤,我建议遵循此答案中提供的步骤。

于 2021-09-01T15:30:29.517 回答