库伯内斯入口路径 [英] Kubernetes Ingress Path
本文介绍了库伯内斯入口路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用下面的YAML文件为前端和后端都设置了nginx-Inress。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: polls-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/service-upstream: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- example.com
secretName: polls-tls
rules:
- host: example.com
http:
paths:
- path: /(.*)
backend:
serviceName: frontend
servicePort: 3000
- path: /graphql/(.*)
backend:
serviceName: polls
servicePort: 8000
目前,我的重写目标重新路由如下
example.com => / of frontend app
example.com/ => / of frontend app
example.com/graphql => / of frontend app
example.com/graphql/post => / of frontend app
example.com/graphql/ => / of backend app
example.com/graphql/post/ => /post of backend app
但我希望后端应用程序同时用于GraphQL/POST和GraphQL/POST/,如下所示。
example.com => / of frontend app
example.com/ => / of frontend app
example.com/hello => /hello of frontend app
example.com/test => /test of frontend app
example.com/graphql => / of backend app
example.com/graphql/ => / of backend app
example.com/grpahql/post => /post of backend app
example.com/graphql/post/ => /post of backend app
有人能告诉我如何实现它吗?
推荐答案
您需要更改GraphQL路径的正则表达式,如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: polls-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/service-upstream: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- example.com
secretName: polls-tls
rules:
- host: example.com
http:
paths:
- path: /(.*)
backend:
serviceName: frontend
servicePort: 3000
- path: /graphql/?(.*) # <- HERE add "?"
backend:
serviceName: polls
servicePort: 8000
来自正则表达式上的文档:
问号表示前面的元素出现零次或一次。例如,COLU?R与&QOOT;COLOR";和";COLOR";都匹配。
这篇关于库伯内斯入口路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文