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 后端服务的子路径入口控制器出现问题_Kubernetes_Kubernetes Ingress - Fatal编程技术网

Kubernetes 后端服务的子路径入口控制器出现问题

Kubernetes 后端服务的子路径入口控制器出现问题,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我在为后端服务设置路径入口控制器时遇到问题。例如,我想要设置: 具有角度的前端应用程序(路径:/) 带有NodeJs的后端服务(路径:/webservice) NodeJS:Index.js const express = require('express') const app = express() const port = 4000 app.get('/', (req, res) => res.send('Welcome to myApp!')) app.use('/data/o

我在为后端服务设置路径入口控制器时遇到问题。例如,我想要设置:

  • 具有角度的前端应用程序(路径:/)
  • 带有NodeJs的后端服务(路径:/webservice)
  • NodeJS:Index.js

    const express = require('express')
    const app = express()
    const port = 4000
    
    app.get('/', (req, res) => res.send('Welcome to myApp!'))
    
    app.use('/data/office', require('./roffice'));
    app.listen(port, () => console.log(`Example app listening on port ${port}!`))
    
    var express = require('express')
    var router = express.Router()
    
    router.get('/getOffice', async function (req, res) {
       res.send('Get Data Office')
    }); 
    
    module.exports = router
    
    另一条路线:roffice.js

    const express = require('express')
    const app = express()
    const port = 4000
    
    app.get('/', (req, res) => res.send('Welcome to myApp!'))
    
    app.use('/data/office', require('./roffice'));
    app.listen(port, () => console.log(`Example app listening on port ${port}!`))
    
    var express = require('express')
    var router = express.Router()
    
    router.get('/getOffice', async function (req, res) {
       res.send('Get Data Office')
    }); 
    
    module.exports = router
    
    部署。yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ws-stack
    spec:
      selector:
       matchLabels:
         run: ws-stack
      replicas: 2
      template:
        metadata:
          labels:
          run: ws-stack
      spec:
         containers:
         - name: ws-stack
           image: wsstack/node/img
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 4000
    
    apiVersion: v1
    kind: Service
    metadata:
      name: service-wsstack
       labels:
        run: service-wsstack
      spec:
       type: NodePort
       ports:
       - port: 80
         protocol: TCP
         nodePort: 30009
         targetPort: 4000
       selector:
         run: ws-stack
    
     apiVersion: networking.k8s.io/v1beta1
     kind: Ingress
     metadata:
       name: stack-ingress
       annotations:
         nginx.ingress.kubernetes.io/rewrite-target: /
         nginx.ingress.kubernetes.io/use-regex: "true"
      spec:
       rules:
        - host: hello-world.info
        - http:
            paths:
            - path: /
              backend:
                serviceName: service-ngstack --> frondend
                servicePort: 80
            - path: /webservice
              backend:
                serviceName: service-wsstack --> backend
                servicePort: 80
    
    服务。yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ws-stack
    spec:
      selector:
       matchLabels:
         run: ws-stack
      replicas: 2
      template:
        metadata:
          labels:
          run: ws-stack
      spec:
         containers:
         - name: ws-stack
           image: wsstack/node/img
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 4000
    
    apiVersion: v1
    kind: Service
    metadata:
      name: service-wsstack
       labels:
        run: service-wsstack
      spec:
       type: NodePort
       ports:
       - port: 80
         protocol: TCP
         nodePort: 30009
         targetPort: 4000
       selector:
         run: ws-stack
    
     apiVersion: networking.k8s.io/v1beta1
     kind: Ingress
     metadata:
       name: stack-ingress
       annotations:
         nginx.ingress.kubernetes.io/rewrite-target: /
         nginx.ingress.kubernetes.io/use-regex: "true"
      spec:
       rules:
        - host: hello-world.info
        - http:
            paths:
            - path: /
              backend:
                serviceName: service-ngstack --> frondend
                servicePort: 80
            - path: /webservice
              backend:
                serviceName: service-wsstack --> backend
                servicePort: 80
    
    ingress.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ws-stack
    spec:
      selector:
       matchLabels:
         run: ws-stack
      replicas: 2
      template:
        metadata:
          labels:
          run: ws-stack
      spec:
         containers:
         - name: ws-stack
           image: wsstack/node/img
           imagePullPolicy: IfNotPresent
           ports:
             - containerPort: 4000
    
    apiVersion: v1
    kind: Service
    metadata:
      name: service-wsstack
       labels:
        run: service-wsstack
      spec:
       type: NodePort
       ports:
       - port: 80
         protocol: TCP
         nodePort: 30009
         targetPort: 4000
       selector:
         run: ws-stack
    
     apiVersion: networking.k8s.io/v1beta1
     kind: Ingress
     metadata:
       name: stack-ingress
       annotations:
         nginx.ingress.kubernetes.io/rewrite-target: /
         nginx.ingress.kubernetes.io/use-regex: "true"
      spec:
       rules:
        - host: hello-world.info
        - http:
            paths:
            - path: /
              backend:
                serviceName: service-ngstack --> frondend
                servicePort: 80
            - path: /webservice
              backend:
                serviceName: service-wsstack --> backend
                servicePort: 80
    
    我已成功设置部署、服务和入口。但当我打电话给curl时

    curl http://<minikubeip>/webservice  --> Welcome to myApp! => Correct
    curl http://<minikubeip>/webservice/data/office/getOffice --> Welcome to myApp! => Not correct
    
    curlhttp:///webservice  -->欢迎使用myApp!=>对的
    卷曲http:///webservice/data/office/getOffice -->欢迎使用myApp!=>不对
    
    如果我调用另一个路由,结果是相同的“欢迎使用myApp”。但是如果我用Nodeport

    curl http://<minikubeip>:30009/data/office/getOffice => 'Get Data Office', working properly.
    
    curl http://:30009/data/office/getOffice=>“获取数据办公室”,工作正常。
    
    有什么问题?有解决办法吗?谢谢

    TL;博士
    • nginx.ingres.kubernetes.io/rewrite-target://$2
    • path:/webservice($|/)(.*)
    解释 问题出在入口的那一行:

    nginx.ingres.kubernetes.io/rewrite-target://

    您正在告诉nginx将您的url重写为与之匹配的任何内容

    • /webservice
      =>
      /
    • /webservice/data/office/getOffice
      =>
      /
    要使用regex执行您试图执行的操作,这里有一个简单的示例:

     apiVersion: networking.k8s.io/v1beta1
     kind: Ingress
     metadata:
       name: stack-ingress
       annotations:
         nginx.ingress.kubernetes.io/rewrite-target: /$2
         nginx.ingress.kubernetes.io/use-regex: "true"
      spec:
       rules:
        - host: hello-world.info
        - http:
            paths:
            - path: /
              backend:
                serviceName: service-ngstack --> frondend
                servicePort: 80
            - path: /webservice($|/)(.*)
              backend:
                serviceName: service-wsstack --> backend
                servicePort: 80
    
    这样,您就要求nginx使用第二个匹配组重写您的url。 最后它给你:

    • /webservice
      =>
      /
    • /webservice/data/office/getOffice
      =>
      /data/office/getOffice

    很抱歉@Noe..前端服务ngstack无法再访问,后端工作正常。。路径前端是否有解决方案?前端应在“/”处工作。以前有用吗?问题是,前端的url将始终为“/”(在此配置中)。因此,我建议您编写自己的正则表达式来匹配url,并创建第二个逻辑组。或者,如果你想要一个快速修复,你可以为pathow做与web服务相同的事情。对不起,这很有效。。我的错..谢谢@Noe。再次提出问题,如果用户写入地址不正确,如何重定向到路径,例如:/foo,/bar。感谢您需要为您的web应用程序客户端创建一个与除/webservice/*之外的所有内容都匹配的正则表达式,并确保您只有一个组,以便URL将被重写/。你可以在网上找到很棒的正则表达式编辑器