Kubernetes Ingress路径路由到不同名称空间中的不同服务



当前我正在尝试以下设置:

我有:

  • 一个集群
  • 一个入口控制器
  • 一个网址(myapp.onazure.com(
  • 用于两个应用程序的两个名称空间默认和默认测试
  • 两个部署、入口对象、命名空间服务

使用基于路径的路由"/"作为前缀规则,我可以从默认命名空间轻松访问我的应用程序现在我已经尝试配置第二个命名空间和以下规则:/testing以访问另一个服务

不幸的是,当我尝试点击以下URL myapp.onazure.com/testing-openapi.json 时,我收到了HTTP404

我错过了什么?

工作入口1

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: liveapi-ingress-object
namespace: default
annotations:
kubernetes.io/ingress.class: public-nginx
spec:
tls:
- hosts:
- myapp-region1.onazure.com
- myapp-region2.onazure.com
secretName: ingress-tls-csi
rules:
- host: - myapp-region1.onazure.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: liveapi-svc
port:
number: 8080
- host: myapp-region2.onazure.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: liveapi-svc
port:
number: 8080

入口2不工作

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: liveapi-ingress-object-testing
namespace: default-testing
annotations:
kubernetes.io/ingress.class: public-nginx
#nginx.ingress.kubernetes.io/rewrite-target: /testing
spec:
tls:
- hosts:
- myapp-region1.onazure.com
- myapp-region2.onazure.com
secretName: ingress-tls-csi-testing
rules:
- host: myapp-region1.onazure.com
http:
paths:
- path: /testing
#pathType: Prefix
backend:
service:
name: liveapi-svc-testing
port:
number: 8080
- host: myapp-region2.onazure.com
http:
paths:
- path: /testing
#pathType: Prefix
backend:
service:
name: liveapi-svc-testing
port:
number: 8080

也许我在测试命名空间入口中缺少了一个重写目标,只是"/"?

最后我找到了缺失的部分。我不得不将以下语句添加到不工作的入口对象中:

annotations:
kubernetes.io/ingress.class: public-nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1

请查看完整的入口对象:

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: liveapi-ingress-object
namespace: default-testing
annotations:
kubernetes.io/ingress.class: public-nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- myapp.onazure.com
secretName: ingress-tls-csi-testing
rules:
- host: myapp.onazure.com
http:
paths:
- path: /testing/(.*)
pathType: Prefix
backend:
service:
name: liveapi-svc-testing
port:
number: 8000 

使用服务的完整DNS名称

$SERVICE.$NAMESPACE.svc.cluster.local

但您需要确保ignress控制器能够访问所需的命名空间。

最新更新