如何在Kubernetes中为Traefik Ingress配置HostRegexp规则?
解决方案:Kubernetes Traefik Ingress配置HostRegexp规则
你之前的配置问题在于Kubernetes原生Ingress的host字段不支持Traefik的HostRegexp语法,得用Traefik提供的专属Annotation来定义完整路由规则,和你Docker环境里的写法对应上。
直接用traefik.ingress.kubernetes.io/router.rule这个Annotation来写完整的匹配规则,替代原生Ingress的host配置,具体修改后的配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-service annotations: traefik.ingress.kubernetes.io/router.entrypoints: web,websecure traefik.ingress.kubernetes.io/router.tls: "true" # 直接在这里定义完整的路由规则,和Docker里的写法一致 traefik.ingress.kubernetes.io/router.rule: "HostRegexp(`{host:.+}`) && PathPrefix(`/rmq`)" spec: rules: # 这里不需要写host字段,规则已经在annotation里定义了 - http: paths: - path: /rmq pathType: Prefix backend: service: name: rabbitmq port: name: http
关键说明:
traefik.ingress.kubernetes.io/router.rule:这个Annotation是Traefik专门用来扩展路由规则的,完全支持Traefik的规则语法,和你Docker环境里的traefik.http.routers.test.rule参数写法完全一致- 去掉
spec.rules[].host配置,因为完整规则已通过Annotation定义,避免冲突 - 保留
path和pathType: Prefix,和规则里的PathPrefix(/rmq)对应,确保路径匹配正常
这样配置后,就能实现和你Docker环境中一样的效果:匹配任意域名({host:.+})且路径以/rmq开头的请求,转发到rabbitmq服务的http端口。
内容的提问来源于stack exchange,提问作者road2victory
相关产品推荐
相关产品推荐

