Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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
Kubernetes 如果使用K8s入口部署web应用程序,则JS 404错误_Kubernetes_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

Kubernetes 如果使用K8s入口部署web应用程序,则JS 404错误

Kubernetes 如果使用K8s入口部署web应用程序,则JS 404错误,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我正在尝试官方的例子 一切都很好,但是当我为它部署一个ingres时,我可以在chrome网络调试中看到下一个(这里,31083是节点端口): ingress.yaml: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gb-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http

我正在尝试官方的例子

一切都很好,但是当我为它部署一个
ingres
时,我可以在chrome网络调试中看到下一个(这里,31083是节点端口):

ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gb-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /gb
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80

<html ng-app="guestbook">
  <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <title>Guestbook</title>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.min.js"></script>
    <script src="controllers.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.0/ui-bootstrap-tpls.js"></script>
  </head>
  <body ng-controller="guestbookCtrl">
    <div style="width: 50%; margin-left: 20px">
      <h2>Guestbook</h2>
    <form>
    <fieldset>
    <input ng-model="msg" placeholder="Messages" class="form-control" type="text" name="input"><br>
    <button type="button" class="btn btn-primary" ng-click="controller.onguestbook()">Submit</button>
    </fieldset>
    </form>
    <div>
      <div ng-repeat="msg in messages track by $index">
        {{msg}}
      </div>
    </div>
    </div>
  </body>
</html>
入口nginx:(使用一个)

我从chrome获得的K8s留言簿索引页的源代码:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gb-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /gb
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80

<html ng-app="guestbook">
  <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <title>Guestbook</title>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.min.js"></script>
    <script src="controllers.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.0/ui-bootstrap-tpls.js"></script>
  </head>
  <body ng-controller="guestbookCtrl">
    <div style="width: 50%; margin-left: 20px">
      <h2>Guestbook</h2>
    <form>
    <fieldset>
    <input ng-model="msg" placeholder="Messages" class="form-control" type="text" name="input"><br>
    <button type="button" class="btn btn-primary" ng-click="controller.onguestbook()">Submit</button>
    </fieldset>
    </form>
    <div>
      <div ng-repeat="msg in messages track by $index">
        {{msg}}
      </div>
    </div>
    </div>
  </body>
</html>

留言簿
留言簿

提交 {{msg}}
我知道我的
入口
只需指定
/gb
前缀,所以
http://10.192.244.109:31083/controllers.js
无法路由到正确的服务,但如何才能使其正常工作


我想也许可以为
js
rewrite添加另一个入口规则,但是如果我有多个应用程序呢?有什么建议吗?

您应该能够使用正确的路径执行此操作模式:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gb-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      - path: /gb(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80
这将以以下方式重写请求:

  • /gb->/
  • /gb/controller.js->/controller.js
  • /gb/foo->/foo

我试过了,看起来不管用。浏览器仍然发送
http://10.192.244.109:31083/controllers.js
对于后端,您的
/gb/controller.js
看起来没有机会生效?您的更改只会使
http://10.192.244.109:31083/gb/controllers.js
如果我手动将此url粘贴到浏览器,则确定访问。但是留言簿索引页确实发送
http://10.192.244.109:31083/controllers.js
到后端,url中没有
gb
,因此看起来您的修复程序没有工作的机会。只是为了正确理解您:controller.js是从服务“frontend”提供的还是从其他服务提供的?如果文件是从与索引页相同的服务(前端服务)提供的,那么您希望在
/gb/
下提供索引以及
/
下提供所有其他内容的原因是什么?请参阅和。是的,文件来自同一个POD,同一个服务,事实上在docker容器中,我可以在同一个文件夹中看到它们:
root@frontend-868556665f-g94bm:/var/www/html#ls controllers.js guestbook.php index.html
。这不是我想要它在“/”前缀中,所有代码都是k8s官方示例,我只是不能让它与ingress nginx一起工作…如果我可以让浏览器访问
http://10.192.244.109:31083/gb/controllers.js
http://10.192.244.109:31083/controllers.js
,则一切正常。但我不知道怎么。。。它在
index.html
中定义为下一个
,我也看到了,答案提到我们需要在
中删除
/
,但这里它已经不是
/controllers.js
。我想这是一个简单的常见问题,但我很惊讶我没有找到任何好的答案通过谷歌,仍然在谷歌