Traefik is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.
This chart bootstraps Traefik version 2 as a Kubernetes ingress controller,
using Custom Resources IngressRoute
: https://docs.traefik.io/providers/kubernetes-crd/.
The Traefik HelmChart is focused on Traefik deployment configuration.
To keep this HelmChart as generic as possible we tend to avoid integrating any third party solutions nor any specific use cases.
Accordingly, the encouraged approach to fulfill your needs:
- override the default Traefik configuration values (yaml file or cli)
- append your own configurations (
kubectl apply -f myconf.yaml
) - extend this HelmChart (as a Subchart)
With the command helm version
, make sure that you have:
- Helm v3 installed
Add Traefik's chart repository to Helm:
helm repo add traefik https://helm.traefik.io/traefik
Due to changes in CRD version support, the following versions of the chart are usable and supported on the following Kubernetes versions:
Kubernetes v1.15 and below | Kubernetes v1.16-v1.21 | Kubernetes v1.22 and above | |
---|---|---|---|
Chart v9.20.2 and below | [x] | [x] | |
Chart 10.0.0 and above | [x] | [x] |
helm install traefik traefik/traefik
You can customize the install with a values
file. Documentation on all parameters is in the default file.
helm install -f myvalues.yaml traefik traefik/traefik
Helm v2 support was removed in the chart version 10.0.0.
This HelmChart does not expose the Traefik dashboard by default, for security concerns. Thus, there are multiple ways to expose the dashboard. For instance, the dashboard access could be achieved through a port-forward :
kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000
Accessible with the url: http://127.0.0.1:9000/dashboard/
Another way would be to apply your own configuration, for instance,
by defining and applying an IngressRoute CRD (kubectl apply -f dashboard.yaml
):
# dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: dashboard
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.localhost`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))
kind: Rule
services:
- name: api@internal
kind: TraefikService
Accessible with the url: http://traefik.localhost/dashboard/
One can check what has changed in the Changelog.
# Update repository
helm repo update
# See current Chart & Traefik version
helm search repo traefik/traefik
# Upgrade Traefik
helm upgrade traefik traefik/traefik
New major version indicates that there is an incompatible breaking change.
With Helm v3, CRDs created by this chart can not be updated, cf the Helm Documentation on CRDs. Please read carefully release notes of this chart before upgrading CRDs.
kubectl apply --server-side --force-conflicts -k https://github.com/traefik/traefik-helm-chart/traefik/crds/
Note: You can replace master
with a specific version of this chart, according to your need.
Since v18.x, this chart by default merges TCP and UDP ports into a single (LoadBalancer) Service
.
Load balancers with mixed protocols are available since v1.20 and in
beta as of Kubernetes v1.24.
Availability may depend on your Kubernetes provider.
To retain the old default behavior, set service.single
to false
in your values.
When using TCP and UDP with a single service, you may encounter this issue from Kubernetes.
On HTTP/3, if you want to avoid this issue, you can set
ports.websecure.http3.advertisedPort
to an other value than 443
If you were previously using HTTP/3, you should update your values as follows:
- Replace the old value (
true
) ofports.websecure.http3
with a keyenabled: true
- Remove
experimental.http3.enabled=true
entry
If you want to contribute to this chart, please read the Contributing Guide.