You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一主机名下配置跨命名空间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),确保重写后的路径符合后端应用的路由要求。

验证操作

  1. 应用修改后的Ingress配置:
kubectl apply -f your-ingress-file.yaml
  1. 查看Ingress状态,确认后端错误消失:
kubectl describe ingress app-ingress
  1. 测试访问:
curl http://web.example.com/app1
curl http://web.example.com/app2

内容的提问来源于stack exchange,提问作者user4948798

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:15:37