如何在K8s的Traefik中配置特定路由分流至不同服务?
在K3s中通过Traefik实现路由分流配置
你可以通过在现有IngressRoute中添加优先级更高的路由规则来实现特定路由的转发,Traefik会按路由定义的顺序匹配请求,先匹配到的规则生效。以下是修改后的完整配置:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: staging-api namespace: api labels: app: staging-api annotations: kubernetes.io/ingress.class: traefik-external spec: entryPoints: - websecure routes: # 匹配/api/update路由,转发至Golang服务 - match: Host(`staging-api.local.com`) && PathPrefix(`/api/update`) kind: Rule services: - name: golang-update-service # 替换为你的Golang服务实际名称 namespace: momo # 若Golang服务在其他命名空间,修改此处 port: websecure # 替换为Golang服务的端口名称或端口号 # 兜底匹配该Host下所有其他请求,转发至FastAPI服务 - match: Host(`staging-api.local.com`) kind: Rule services: - name: staging-api namespace: momo port: websecure
关键注意事项:
- 路由顺序:必须把
/api/update的匹配规则放在前面,否则会被兜底的Host匹配规则优先拦截 - 匹配逻辑:用
&&同时组合Host和PathPrefix条件,确保只有目标路由的请求会被转发到Golang服务 - 服务配置:请根据实际部署情况调整Golang服务的名称、命名空间和端口信息
确保Golang服务已在K3s集群中正常部署,且Traefik具备访问该服务的权限(同命名空间无需额外配置,跨命名空间需确认权限规则)。
内容的提问来源于stack exchange,提问作者Dirk
相关产品推荐
相关产品推荐

