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

多命名空间下同名服务的Ingress配置方法咨询

跨命名空间Ingress配置方案

针对你的需求,可通过在每个命名空间下创建独立Ingress资源实现,核心是利用Ingress Controller的路径匹配与重写能力,在统一域名下区分不同命名空间的服务。

前提条件

确保你使用的Ingress Controller(如Nginx Ingress Controller)支持正则路径匹配与路径重写,这是实现路径前缀剥离的关键。

单个命名空间的Ingress配置示例

以project-1命名空间为例,创建如下Ingress资源,其他命名空间仅需替换命名空间名称与路径前缀即可:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: project-1-ingress
  namespace: project-1
  annotations:
    # 开启正则匹配支持
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 路径重写:剥离/project-1/xxx前缀,仅转发后续路径给后端服务
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: app.dummy.com
    http:
      paths:
      # 匹配project-1下的nginx服务路径
      - path: /project-1/nginx(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: nginx
            port:
              number: 80
      # 匹配project-1下的phpmyadmin服务路径
      - path: /project-1/phpmyadmin(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: phpmyadmin
            port:
              number: 80

配置细节说明

  1. 命名空间绑定:每个Ingress资源必须部署在对应命名空间下,确保能直接关联当前命名空间内的nginx和phpmyadmin服务。
  2. 路径规则:正则表达式/project-x/xxx(/|$)(.*)用于精确匹配前缀路径,避免不同命名空间的路径规则冲突。
  3. 路径重写:rewrite-target: /$2会将请求路径中的/project-x/xxx前缀剥离,例如app.dummy.com/project-1/nginx/test会被转发到后端nginx服务的/test路径,适配后端服务的路径要求。
  4. 服务映射:直接关联当前命名空间内的同名服务,无需额外配置跨命名空间访问(Ingress Controller默认有权限访问所有命名空间的服务)。

其他命名空间的适配

对于project-2至project-5,只需修改上述配置中的3处内容:

  • 将namespace: project-1改为对应命名空间(如project-2)
  • 将所有路径中的/project-1改为对应前缀(如/project-2)
  • 将Ingress名称改为对应标识(如project-2-ingress)

验证方法

创建Ingress后,可通过以下命令查看资源状态:

kubectl get ingress -n project-1

也可通过curl测试访问有效性:

curl http://app.dummy.com/project-1/nginx
curl http://app.dummy.com/project-1/phpmyadmin

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:55:46