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

Kubernetes如何通过Ingress配置同一外部地址运行多个服务

Kubernetes HAProxy Ingress 多服务路径路由配置方案

核心需求说明

你需要将多个后端服务通过同一外部域名/IP的不同路径对外暴露,对应映射规则如下:

  • 外部访问 http://<exturi>/service1/api -> 转发到内部服务 http://service1/api
  • 外部访问 http://<exturi>/service2/api -> 转发到内部服务 http://service2/api

配置方案

前置说明

你当前使用的networking.k8s.io/v1beta1版本Ingress在Kubernetes 1.19+版本中已废弃,推荐替换为稳定的networking.k8s.io/v1版本。以下配置基于HAProxy Ingress实现,分两种场景提供:


场景1:后端服务已自带路径前缀

如果你的内部service1、service2本身已经支持/service1/api、/service2/api路径,无需路径重写,直接配置多路径路由即可:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: haproxy
  name: ingress-api
spec:
  rules:
  # 如不需要域名限制,可删除host字段,直接通过Ingress IP访问
  - host: api.sample.com
    http:
      paths:
      # service1路由规则
      - backend:
          service:
            name: service1 # 替换为你实际的service1名称
            port:
              number: 13001 # 替换为service1实际端口
        path: /service1/api
        pathType: Prefix
      # service2路由规则
      - backend:
          service:
            name: service2 # 替换为你实际的service2名称
            port:
              number: 13002 # 替换为service2实际端口
        path: /service2/api
        pathType: Prefix
  tls:
  - hosts:
    - api.sample.com
    secretName: tls-api-secret

场景2:后端服务仅根路径下有/api接口

这是绝大多数使用场景,内部service1的接口路径为/api,需要把外部路径中的/service1前缀删除后再转发到后端,需要添加HAProxy Ingress的路径重写注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: haproxy
    # 路径重写规则:将匹配到的第二段路径作为转发到后端的实际路径
    haproxy.ingress.kubernetes.io/rewrite-target: /$2
  name: ingress-api
spec:
  rules:
  - host: api.sample.com
    http:
      paths:
      - backend:
          service:
            name: service1
            port:
              number: 13001
        # 正则匹配:/service1开头的所有路径,分组$2为/service1/之后的内容
        path: /service1(/|$)(.*)
        pathType: Prefix
      - backend:
          service:
            name: service2
            port:
              number: 13002
        path: /service2(/|$)(.*)
        pathType: Prefix
  tls:
  - hosts:
    - api.sample.com
    secretName: tls-api-secret

配置效果验证

配置生效后,访问http://api.sample.com/service1/api会自动转发到service1的/api接口,http://api.sample.com/service2/api会自动转发到service2的/api接口,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:57:03