bronhy
July 17, 2024, 1:53pm
1
After migrating to traefik v3 the dashboard is not showing the IngressRoute objects. It will only show the objects defined by k8s Ingress object. Also the routing does not work with this object
here is an example of httbin definition
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: httpbin
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: PathPrefix(`/get`) && Method(`GET`)
services:
- name: httpbin
port: 80
What am I missing here?
Additional problem is the dashboard. Treafik is installed with this chart GitHub - traefik/traefik-helm-chart: Traefik Proxy Helm Chart v 29.0.1
if i add the following values to values.yaml the IngressRoute will not be installed.
ingressRoute:
dashboard:
enabled: true
I had to manually add this ingressroute so I was able to access the dashboard via port-forward
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
annotations:
meta.helm.sh/release-name: traefik
meta.helm.sh/release-namespace: ingress
generation: 1
labels:
app.kubernetes.io/instance: traefik-ingress
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: traefik
helm.sh/chart: traefik-29.0.1
name: traefik-dashboard
namespace: ingress
spec:
entryPoints:
- traefik
routes:
- kind: Rule
match: PathPrefix(`/dashboard`) || PathPrefix(`/api`)
services:
- kind: TraefikService
name: api@internal
This object is however visible in the dashboard.
What is going on here? Could anyone give me any pointers the documentations is not mentioning these changes. Is my configuration wrong?
Having the same issue, although I was able to use:
ingressRoute:
dashboard:
enabled: true
to create the IngressRoute. It just doesn't work. It looks the same as yours.
bronhy
September 3, 2024, 12:53pm
3
I gave up on this. I used the highest version 2.
bronhy
November 19, 2025, 2:21pm
4
Coming back to this after a year. We need to update but no solution in sight.
I am using helm chart traefik 37.3.0 · traefik/traefik
v37.3.0
my values.yaml is
deployment:
replicas: null
autoscaling:
enabled: true
minReplicas: ${min_replicas}
maxReplicas: ${max_replicas}
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
updateStrategy:
# -- Customize updateStrategy: RollingUpdate or OnDelete
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
resources:
requests:
cpu: "${cpu_requests}"
memory: "256Mi"
limits:
memory: "256Mi"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app.kubernetes.io/name: '{{ template "traefik.name" . }}'
app.kubernetes.io/instance: '{{ .Release.Name }}-{{ .Release.Namespace }}'
topologyKey: kubernetes.io/hostname
additionalArguments:
- "--accesslog=true"
- "--accesslog.format=json"
- "--accesslog.fields.defaultmode=drop"
- "--accesslog.fields.names.StartUTC=keep"
- "--accesslog.fields.names.ClientHost=keep"
- "--accesslog.fields.names.DownstreamContentSize=keep"
- "--accesslog.fields.names.DownstreamStatus=keep"
- "--accesslog.fields.names.Duration=keep"
- "--accesslog.fields.names.OriginStatus=keep"
- "--accesslog.fields.names.RequestAddr=keep"
- "--accesslog.fields.names.RequestMethod=keep"
- "--accesslog.fields.names.RequestPath=keep"
- "--accesslog.fields.names.RequestProtocol=keep"
- "--accesslog.fields.names.RequestScheme=keep"
- "--accesslog.fields.names.RouterName=keep"
- "--accesslog.fields.names.ServiceName=keep"
- "--accesslog.fields.names.TLSVersion=keep"
- "--accesslog.fields.names.level=keep"
- "--accesslog.fields.names.time=keep"
- "--accesslog.fields.headers.names.X-Auth-User=keep"
- "--accesslog.fields.headers.names.X-Auth-Sub=keep"
- "--accesslog.fields.headers.names.X-Auth-Origin-Uuid=keep"
- "--providers.kubernetesCRD.ingressclass=${ingress_class}"
- "--providers.kubernetesingress.ingressClass=${ingress_class}"
- "--providers.kubernetescrd.allowCrossNamespace=true"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entryPoints.web.http.redirections.entryPoint.scheme=https"
- "--log.level=DEBUG"
ingressRoute:
dashboard:
annotations:
kubernetes.io/ingress.class: ${ingress_class}
providers:
kubernetesCRD:
allowExternalNameServices: true
kubernetesIngress:
allowExternalNameServices: true
core:
defaultRuleSyntax: v2
dashboard still does not work. I use port-forward (since I do not want to expose the dashboard ) and get “404 page not found”
output from the traefik pod
ports:
- containerPort: 9100
name: metrics
protocol: TCP
- containerPort: 8080
name: traefik
protocol: TCP
- containerPort: 8000
name: web
protocol: TCP
- containerPort: 8443
name: websecure
protocol: TCP
in default chart values the dashboard is enabled
api:
# -- Enable the dashboard
dashboard: true
# -- Configure API basePath
basePath: "" # @schema type:[string, null]; default: "/"
http://localhost:8080/dashboard/
bronhy
November 21, 2025, 10:38am
5
I now used a fresh chart install without my old values and it only worked after I used this.
ingressRoute:
dashboard:
enabled: true
Also I noticed that even though in default values.yaml you have
api:
dashboard: true
when the pod starts there are additional args listed bellow.
containers:
- args:
- --entryPoints.metrics.address=:9100/tcp
- --entryPoints.traefik.address=:8080/tcp
- --entryPoints.web.address=:8000/tcp
- --entryPoints.websecure.address=:8443/tcp
- --api.dashboard=true
- --ping=true
- --metrics.prometheus=true
- --metrics.prometheus.entrypoint=metrics
- --providers.kubernetescrd
- --providers.kubernetescrd.allowEmptyServices=true
- --providers.kubernetesingress
- --providers.kubernetesingress.allowEmptyServices=true
- --providers.kubernetesingress.ingressendpoint.publishedservice=default/traefik
- --entryPoints.websecure.http.tls=true
- --log.level=INFO
Notice here that after your upgrade -–api.dashboard=true has to be present.
Documentation can be misleading. Under IngressRoute helm values you can jump to the conclusion that you are exposing your dashboard to the internet. But if you carefully read the whole block you can see that the IngressRoute is created only for the entry point traefik. This does not expose it to internet. Your public traefik service with type of LoadBalancer is listening on 80 and 443. So you get no request to the cluster with port 8080.
# -- Specify the allowed entrypoints to use for the dashboard ingress route, (e.g. traefik, web, websecure).
# By default, it's using traefik entrypoint, which is not exposed.
# /!\ Do not expose your dashboard without any protection over the internet /!\
entryPoints: ["traefik"]