Flask kubernetes只调用索引路由而不调用其他路由的入口

Flask kubernetes只调用索引路由而不调用其他路由的入口,flask,kubernetes,kubernetes-ingress,Flask,Kubernetes,Kubernetes Ingress,我有一个flask应用程序,它有多个路由,包括默认路由“/”。我在kubernetes上部署了这个应用程序。我使用minikube作为一个独立的集群。我将部署公开为NodePort服务,然后使用入口将外部请求映射到集群中运行的应用程序。我的入口资源看起来像这样 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: kubernetes-test-svc annotations: nginx.ingress.kub

我有一个flask应用程序,它有多个路由,包括默认路由“/”。我在kubernetes上部署了这个应用程序。我使用minikube作为一个独立的集群。我将部署公开为NodePort服务,然后使用入口将外部请求映射到集群中运行的应用程序。我的入口资源看起来像这样

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-test-svc
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  backend:
    serviceName: defualt-http-backend
    servicePort: 80
  rules:
  - host: kubernetes-test.info
    http:
      paths:
      - path: /*
        backend:
          serviceName: kubernetes-test-svc
          servicePort: 80
192.168.99.100  kubernetes-test.info
@app.route('/')
def index():
    return "Root route"


@app.route('/route1')
def route1():
    return "Route 1"


@app.route('/route2')
def route2():
    params = request.args
    return make_response(jsonify({'Param1': params['one'], 'Param2': params['two']}))
我还配置了我的/etc/hosts文件,将请求路由到此主机。看起来像这样

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-test-svc
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  backend:
    serviceName: defualt-http-backend
    servicePort: 80
  rules:
  - host: kubernetes-test.info
    http:
      paths:
      - path: /*
        backend:
          serviceName: kubernetes-test-svc
          servicePort: 80
192.168.99.100  kubernetes-test.info
@app.route('/')
def index():
    return "Root route"


@app.route('/route1')
def route1():
    return "Route 1"


@app.route('/route2')
def route2():
    params = request.args
    return make_response(jsonify({'Param1': params['one'], 'Param2': params['two']}))
问题是无论我调用哪个端点,入口总是将其重定向到默认路由“/”。我的烧瓶应用程序看起来像这样

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-test-svc
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  backend:
    serviceName: defualt-http-backend
    servicePort: 80
  rules:
  - host: kubernetes-test.info
    http:
      paths:
      - path: /*
        backend:
          serviceName: kubernetes-test-svc
          servicePort: 80
192.168.99.100  kubernetes-test.info
@app.route('/')
def index():
    return "Root route"


@app.route('/route1')
def route1():
    return "Route 1"


@app.route('/route2')
def route2():
    params = request.args
    return make_response(jsonify({'Param1': params['one'], 'Param2': params['two']}))
因此,如果我向kubernetes-test.info/route1发出请求,它将显示文本“根路由”而不是“路由1”

但是如果我输入192.168.99.100/route1,它会显示“route1”。我不知道为什么会这样?为什么它使用minikube ip但不使用我指定的主机

服务部署如下所示:-

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-test-svc
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
  selector:
    app: kubernetes-test
更新你的入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-test-svc
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  backend:
    serviceName: defualt-http-backend
    servicePort: 80
  rules:
  - host: kubernetes-test.info
    http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-test-svc
          servicePort: 80

你能解释一下你的答案吗@HarshManvari已经删除了路径重写,它将在/之后直接访问域和路径。当您想在URL中进行重写时,可以使用您的配置。比如www.example.com/api,你想删除api和api-1等等。哦,好了,现在我看到了区别。知道了。