IngressRoute如何与Traefik的Ingress Controller建立关联
首先是Traefik的集群资源监听权限
部署Traefik时默认会配置集群级别的RBAC权限,关联的ClusterRole会授予Traefik监听全集群所有traefik.containo.us分组下CRD资源的权限,其中就包含IngressRoute资源。只要没有通过启动参数--providers.kubernetescrd.namespaces限制Traefik的监听命名空间范围,Traefik就可以拉取到任意命名空间下创建的IngressRoute资源。其次是入口点的默认匹配规则
你给出的IngressRoute配置中指定了entryPoints: web,官方默认部署的Traefik实例都会预定义web(对应80端口)、websecure(对应443端口)两个入口点,只要IngressRoute中指定的entryPoint名称和Traefik实例配置的入口点名称一致,规则就会被对应Traefik实例加载。
如果集群内存在多个Traefik实例,才需要通过IngressClass做实例隔离:给Traefik添加启动参数--providers.kubernetescrd.ingressClass=自定义类别名,同时在IngressRoute的spec中指定ingressClassName: 自定义类别名,即可实现指定IngressRoute只被对应Traefik实例加载。你没有配置该字段时,Traefik会默认加载所有未指定IngressClass的IngressRoute资源。后端服务的自动发现
你当前场景中IngressRoute和后端服务my-service处于同一命名空间,Traefik可以直接通过服务名和端口找到对应后端;如果是跨命名空间的服务引用,只需要在IngressRoute的service配置中添加namespace字段指定服务所在命名空间即可,跨命名空间访问的能力同样来自Traefik部署时授予的集群级RBAC权限。
内容的提问来源于stack exchange,提问作者derek

