如何适应 Python Flask 路由中的 kubernetes 路径变化

How to adapt to a kubernetes path change in Python Flask routes

我在 IBM Kubernetes Service 上部署了一个 Python Flask 应用程序。我的部署 YAML 指定 path: /,它在我的代码中使用 @app.route('/') 处理。那很好用。然后,我尝试通过在我的部署 YAML 中将 path: / 更改为 path: /foo 来移动应用程序。我原以为进入我的应用程序的请求仍然以 / 的形式出现,但它以 /foo 的形式出现。最终我想要做的是在不更改源代码的情况下灵活地部署应用程序。我没有在 Kubernetes 或 Flask 中看到创建这种间接级别的方法。我错过了什么吗?

原始 YAML:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  tls:
  - hosts:
      - my....us-east.containers.appdomain.cloud
    secretName: my...
  rules:
  - host: my....us-east.containers.appdomain.cloud
    http:
      paths:
       - path: /
         backend:
           serviceName: my-service
           servicePort: 5000

需要检查您的 ingress yaml 定义的内容。

这是一个示例 yaml 重写的定义

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*) 

例如,上面的入口定义将导致以下重写:

rewrite.bar.com/something rewrites to rewrite.bar.com/
rewrite.bar.com/something/ rewrites to rewrite.bar.com/
rewrite.bar.com/something/new rewrites to rewrite.bar.com/new

可以查看Nginx Ingress controller Rewrite注解here. You can also customize Ingress routing with annotations on IBM Cloud following the documentation here