Simplifies the deployment and management of Traefik on a Kubernetes cluster.
- Update the list of loadbalancer annotations to ignore so to check which cloud this is being deployed for.
- Add support for newer Traefik releases
# Import the Traefik dashboard if one was deployed
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.dashboard_ingress_route[0]' \
"apiVersion=traefik.containo.us/v1alpha1,kind=IngressRoute,namespace=kube-traefik,name=traefik-dashboard"
# Import the Traefik IngressClass
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.ingress_class' \
"apiVersion=networking.k8s.io/v1,kind=IngressClass,name=traefik"
# Import the Traefik Ingress Route CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.ingress_route' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=ingressroutes.traefik.containo.us"
# Import the Traefik Ingress TCP Route CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.ingress_route_tcp' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=ingressroutetcps.traefik.containo.us"
# Import the Traefik Ingress UDP Route CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.ingress_route_udp' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=ingressrouteudps.traefik.containo.us"
# Import the Traefik Ingress Middleware CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.middlewares' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=middlewares.traefik.containo.us"
# Import the Traefik Server Transports CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.server_transports' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=serverstransports.traefik.containo.us"
# Import the Traefik TLS Options CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.tls_options' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=tlsoptions.traefik.containo.us"
# Import the Traefik TLS Stores CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.tls_stores' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=tlsstores.traefik.containo.us"
# Import the Traefik Services CRD
terraform import -var-file=secrets.tfvars \
'module.traefik.kubernetes_manifest.traefik_services' \
"apiVersion=apiextensions.k8s.io/v1,kind=CustomResourceDefinition,name=traefikservices.traefik.containo.us"
# Delete the state reference to the old k8s_manifest objects
terraform state rm 'module.traefik.k8s_manifest.dashboard_ingress_route[0]'
terraform state rm 'module.traefik.k8s_manifest.ingress_class'
terraform state rm 'module.traefik.k8s_manifest.ingress_route'
terraform state rm 'module.traefik.k8s_manifest.ingress_route_tcp'
terraform state rm 'module.traefik.k8s_manifest.ingress_route_udp'
terraform state rm 'module.traefik.k8s_manifest.middlewares'
terraform state rm 'module.traefik.k8s_manifest.server_transports'
terraform state rm 'module.traefik.k8s_manifest.tls_options'
terraform state rm 'module.traefik.k8s_manifest.tls_stores'
terraform state rm 'module.traefik.k8s_manifest.traefik_services'
# Lastly, run a Terraform apply to make sure the states are synced up.
terraform apply -var-file secrets.tfvars
Name | Version |
---|---|
terraform | >= 0.14.8, < 2.0.0 |
kubernetes | >= 2.8.0 |
Name | Version |
---|---|
kubernetes | 2.11.0 |
random | 3.3.1 |
No modules.
Name | Type |
---|---|
kubernetes_cluster_role.cluster_role | resource |
kubernetes_cluster_role_binding.cluster_role_binding | resource |
kubernetes_deployment.deployment | resource |
kubernetes_manifest.dashboard_ingress_route | resource |
kubernetes_manifest.ingress_class | resource |
kubernetes_manifest.ingress_route | resource |
kubernetes_manifest.ingress_route_tcp | resource |
kubernetes_manifest.ingress_route_udp | resource |
kubernetes_manifest.middlewares | resource |
kubernetes_manifest.middlewares_tcp | resource |
kubernetes_manifest.server_transports | resource |
kubernetes_manifest.tls_options | resource |
kubernetes_manifest.tls_stores | resource |
kubernetes_manifest.traefik_services | resource |
kubernetes_namespace.namespace | resource |
kubernetes_service.service | resource |
kubernetes_service_account.service_account | resource |
random_pet.instance_name | resource |
Name | Description | Type | Default | Required |
---|---|---|---|---|
access_logs | Determines whether access logs will be kept. | bool |
"true" |
no |
annotations | Additional Traefik namespace annotations (e.g. for linkerd.io/inject: enabled for mesh things) |
map(string) |
{} |
no |
dashboard_ingress_host | The Traefik dashboard ingress host | string |
null |
no |
enable_dashboard | Set to true to enable the Traefik dashboard |
string |
true |
no |
image_name | The image to use when deploying Traefik | string |
"library/traefik" |
no |
image_pull_policy | Determines when the image should be pulled prior to starting the container. Always : Always pull the image. | IfNotPresent : Only pull the image if it does not already exist on the node. | Never : Never pull the image |
string |
"Always" |
no |
image_repository | The image repository to use when pulling images | string |
"registry.hub.docker.com" |
no |
image_tag | The version of Traefik to deploy | string |
"2.7.1" |
no |
ingress_class_default | Set to true to make the ingress class of this Traefik instance the default. | bool |
true |
no |
ingress_class_name | The name of the Traefik ingress class | string |
"traefik" |
no |
labels | (optional) A map that consists of any additional labels that should be included with resources created by this module. | map(string) |
{} |
no |
log_level | (optional) The level at Traefik should be logging at. Options are INFO , DEBUG , and TRACE . |
string |
"INFO" |
no |
namespace | (optional) The name given to the namespace in which Traefik will reside. | string |
"kube-traefik" |
no |
pod_termination_grace_period_seconds | n/a | number |
60 |
no |
preferred_node_selector | A list of objects that define preferredDuringSchedulingIgnoredDuringExecution for this deployment |
list(object({ |
[] |
no |
replicas | n/a | number |
2 |
no |
resource_limits | Resource limits for the Traefik deployment pods | object({ |
{ |
no |
resource_requests | Resource requests for the Traefik deployment pods | object({ |
{ |
no |
rolling_update_max_surge | n/a | number |
1 |
no |
rolling_update_max_unavailable | n/a | number |
1 |
no |
service_annotations | Additional Traefik service annotations (e.g. service.beta.kubernetes.io/aws-load-balancer-type: external ) |
map(string) |
{} |
no |
service_type | The type used for this deployments service. | string |
"LoadBalancer" |
no |
Name | Description |
---|---|
ingress_class | n/a |