kubernetes - Kubernetes Ingress - 将外部路径引用到服务中的另一个路径
问题描述
我有多个使用不同服务的命名空间其中
一些服务公开相同的路径,即/ready
我想为每个命名空间/服务创建一个入口规则,因此外部路径namespaceA/ready
实际上会转到路径下的namespaceA
服务/ready
我读到了rewrite,但如果我理解正确,它将重定向namespaceA/ready
到/ready
全局,这意味着它就像路径一样/ready
,无论名称空间如何。
解决方案
除了Lentil1016 answer之外,这里是nginx-ingress-controller的相同重写解决方案的示例。
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/ssl-redirect: 'false'
nginx.ingress.kubernetes.io/force-ssl-redirect: 'false'
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: myapp
namespace: namespaceA
spec:
rules:
- host: mydomain.io
http:
paths:
- backend:
serviceName: myapp
servicePort: 80
path: /namespaceA(/|$)(.*)
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: myapp
namespace: namespaceB
spec:
rules:
- host: mydomain.io
http:
paths:
- backend:
serviceName: myapp
servicePort: 80
path: /namespaceB(/|$)(.*)
例如,上面的入口定义将导致以下重写:
对于命名空间 namespaceA 中的目标服务 myapp:
mydomain.io/namespaceA rewrites to mydomain.io/
mydomain.io/namespaceA/ rewrites to mydomain.io/
mydomain.io/namespaceA/ready/ rewrites to mydomain.io/ready/
对于命名空间 namespaceB 中的目标服务 myapp:
mydomain.io/namespaceB rewrites to mydomain.io/
mydomain.io/namespaceB/ rewrites to mydomain.io/
mydomain.io/namespaceB/ready/ rewrites to mydomain.io/ready/
注意:您可能需要使用 nginx-config ConfigMap来完全关闭nginx-ingress-controller 的ssl-redirect。
注意:有两种 nginx-ingress-controllers,kubernetes和nginxinc。ConfigMap 选项和注释对于它们中的每一个都可能不同。
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-config
namespace: nginx-ingress # <--- or ingress-nginx, depends on your installation
data:
redirect-to-https: "false"
ssl-redirect: "false"
推荐阅读
- database - 《部落冲突》和其他游戏如何有效地对玩家进行排名和匹配?
- qt - 如何在 gnome centos 7 上配置新会话以仅运行我的 qml 界面?
- c++ - 检查 std::shared_ptr<> 的当前底层类型是否为 T
- c - 试图理解我的代码中的错误
- c++ - 多个文件的内存分配错误“在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用” [C ++]
- ruby-on-rails - 尝试将更新的 Rails 应用程序部署到 Heroku 时出错 - /bin/bundle:无法执行二进制文件:执行格式错误
- python - 按位置重命名所有列名
- r - 使用聚合时如何在 R 中保留原始变量名称?
- r - 阻止我执行库(tidyverse)和库(此处)的 R 错误
- r - 无法使用 effect_plot() 在 R 中绘制线性回归:在 R 中未找到“数据”的值,而