Traefik 2.3.1版本UDP Ingress配置异常:服务不存在错误原因排查咨询
从你给出的错误信息和配置细节来看,问题大概率出在Service的可达性或者IngressRouteUDP的配置细节上,下面是几个针对性的排查方向:
1. 检查Service是否关联到可用的Pod
Traefik提示"service不存在",很多时候并不是Service真的不存在,而是Service没有绑定任何运行中的Pod,导致它没有可用的Endpoints。你可以通过以下命令验证:
# 查看是否有匹配Service selector标签的Pod kubectl get pods -l app=udp-server # 查看Service的Endpoints状态 kubectl describe service udp
如果Endpoints字段显示<none>,说明你的udp-server Pod没有设置app: udp-server标签,或者Pod还未启动/处于异常状态。调整Pod的标签使其与Service的selector匹配即可。
2. 确认IngressRouteUDP和Service在同一Namespace
如果你的IngressRouteUDP和Service不在同一个Kubernetes Namespace,Traefik会默认在IngressRouteUDP所在的Namespace查找Service,自然找不到目标Service。这种情况需要在IngressRouteUDP的services字段里显式指定Service的Namespace:
kind: IngressRouteUDP metadata: name: udp spec: entryPoints: - udp routes: - services: - name: udp port: 4001 namespace: default # 替换为你的Service实际所在的Namespace
3. 检查Traefik的RBAC权限配置
Traefik的ServiceAccount需要具备访问目标Namespace下Services的权限。确保你的Traefik ClusterRole包含以下权限规则:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: traefik-ingress-controller rules: - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"] # 保留其他已有的必要权限...
如果ClusterRole缺少对Services的访问权限,Traefik无法获取Service的元数据信息,就会抛出"service不存在"的错误。
4. 排查Traefik版本的潜在Bug
虽然可能性较低,但Traefik 2.3.1作为较旧的版本,确实存在一些已知的UDP路由相关问题。如果以上排查都没有解决问题,可以尝试升级到2.3.x分支的最新补丁版本,或者确认官方Issue中是否有类似的已修复问题。
内容的提问来源于stack exchange,提问作者ktl

