如何适应 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
我在 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