<p>I created a k3d cluster like this:</p>
<pre class="lang-sh prettyprint-override"><code># Create 3 server nodes and only allow control plane stuff on there (and things with tolerations)
# Pretty print:
# k3d cluster create dev 
#   --api-port 6551 
#   --port &quot;8081:80@loadbalancer&quot; 
#   --servers 3 
#   --k3s-server-arg --node-taint=&quot;CriticalAddonsOnly=true:NoExecute&quot; 
#   --k3s-server-arg &quot;--no-deploy=traefik&quot;
#
k3d cluster create dev --api-port 6551 --port &quot;8081:80@loadbalancer&quot; --servers 3 --k3s-server-arg --node-taint=&quot;CriticalAddonsOnly=true:NoExecute&quot; --k3s-server-arg &quot;--no-deploy=traefik&quot;
</code></pre>
<p>Then I installed Traefik:</p>
<pre class="lang-sh prettyprint-override"><code># Has tolerations so it can run on those nodes
# Pretty print:
# helm install traefik traefik/traefik 
#   --set tolerations[0].key=CriticalAddonsOnly 
#   --set tolerations[0].operator=Exists 
#   --set tolerations[0].effect=NoExecute 
#   --set ingressRoute.dashboard.annotations.&quot;kubernetes\.io/ingress\.class&quot;=traefik-internal
#
helm install traefik traefik/traefik --set tolerations[0].key=CriticalAddonsOnly --set tolerations[0].operator=Exists --set tolerations[0].effect=NoExecute --set ingressRoute.dashboard.annotations.&quot;kubernetes\.io/ingress\.class&quot;=traefik-internal
</code></pre>
<p>Then I started port forwarding:</p>
<pre class="lang-sh prettyprint-override"><code>kubectl port-forward $(kubectl get pods --selector &quot;app.kubernetes.io/name=traefik&quot; --output=name) 9000:9000
</code></pre>
<p>When I visit <code>http://127.0.0.1/dashboard/</code> I get a 404.</p>
<p>I can see the pods:</p>
<pre class="lang-sh prettyprint-override"><code>kubectl get pods

# NAME                       READY   STATUS    RESTARTS   AGE
# svclb-traefik-5gbwz        2/2     Running   0          20m
# svclb-traefik-fmpgc        2/2     Running   0          20m
# svclb-traefik-lg9j6        2/2     Running   0          20m
# traefik-84846f6fcb-q5hwd   1/1     Running   0          20m
</code></pre>
<p>However, no ingresses show:</p>
<pre class="lang-sh prettyprint-override"><code>kubectl get ingresses --all-namespaces
# Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
# No resources found
</code></pre>
<p>The Kubernetes version is <code>1.19.4</code>
What setting is missing?</p>

<p>The problem is two things:</p>
<ol>
<li>The <code>Service</code> and other K8s objects installed via Traefik's Helm chart that aren't in the <code>Deployment</code> do not have sections to pull in the <code>tolerations</code> from the <code>values.yaml</code></li>
<li>I only had tainted nodes running, so the Traefik Deployment installed its pods, but nothing else was scheduled</li>
</ol>
<p><strong>The Fix</strong></p>
<pre class="lang-sh prettyprint-override"><code># Install worker nodes that aren't tainted
k3d node create worker --cluster dev --replicas 3
</code></pre>
<p><em>After</em> that, you can install Traefik.</p>
