如何在同一主机名下配置跨命名空间Kubernetes服务的多路径访问
解决Ingress跨命名空间访问服务的问题
问题根源
你的Ingress部署在default命名空间,默认情况下Ingress只会在自身所在的命名空间内查找Service资源,而app1-service和app2-service分别在app1、app2命名空间,因此出现"service not found"错误。
修改后的Ingress配置
需要在每个Service后端配置中显式指定服务所在的命名空间,同时修正路径匹配规则以适配rewrite-target注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 name: app-ingress spec: ingressClassName: nginx rules: - host: web.example.com http: paths: - path: /app1(/|$)(.*) pathType: Prefix backend: service: name: app1-service namespace: app1 # 指定服务所在命名空间 port: number: 80 - path: /app2(/|$)(.*) pathType: Prefix backend: service: name: app2-service namespace: app2 # 指定服务所在命名空间 port: number: 80
关键修改说明
- 指定服务命名空间:在每个
backend.service块中添加namespace字段,明确指向服务所在的app1/app2命名空间,让Ingress能够跨命名空间定位到目标Service。 - 修正路径匹配规则:原路径
/app1配合rewrite-target: /$2会导致$2无法捕获有效内容,调整为/app1(/|$)(.*)后,可正确捕获/app1之后的路径后缀(比如访问/app1/hello时,$2对应hello),确保重写后的路径符合后端应用的路由要求。
验证操作
- 应用修改后的Ingress配置:
kubectl apply -f your-ingress-file.yaml
- 查看Ingress状态,确认后端错误消失:
kubectl describe ingress app-ingress
- 测试访问:
curl http://web.example.com/app1 curl http://web.example.com/app2
内容的提问来源于stack exchange,提问作者user4948798
相关产品推荐
相关产品推荐

