This ansible role intended for setting on the host Traefik.
| Inventory | Description |
|---|---|
traefik_distr_ver |
The version of Traefik used. (Default: v2.7.0) |
traefik_distr_os |
Operating system. (Default: linux) |
traefik_distr_arch |
OS architecture. (Default: amd64) |
traefik_url_release |
Traefik Archive URL. (Default: https://github.com/containous/traefik/releases/download/v2.5.4/traefik_v2.5.4_linux_amd64.tar.gz) |
traefik_path_bin |
Traefik bin location path. (Default: /usr/bin) |
traefik_binary |
Full path of Traefik on the system. (Default: /usr/bin/traefik_v2.5.4) |
traefik_le_caserver |
Determines which service issues the certificate. For test runs use - https://acme-staging-v02.api.letsencrypt.org/directory.. For production - https://acme-v02.api.letsencrypt.org/directory. (Default: https://acme-v02.api.letsencrypt.org/directory) |
traefik_le_challenge_type |
Different ACME Challenges. It is possible to use httpChallenge and dnsChallenge. (Default: httpChallenge) |
traefik_le_email |
Required parameter to get the certificate Let’s Encrypt. (Default: NULL) |
traefik_log_level |
Default: WARN . Alternative logging levels are DEBUG, PANIC, FATAL, ERROR, WARN and INFO. |
traefik_enable_prometheus |
Default: true . Enables prometheus metrics endpoint. |
traefik_providers |
Default: {} . Setup other providers support. Key is provider name, value - provider settings. |
traefik_dashboard_port |
Default: 8080 . Insecure dashboard port. |
traefik_metrics_port |
Default: 8082 . Insecure metrics port for prometheus. |
traefik_entrypoints_extra_parameters |
Configure parameters Traefik entrypoints . Uses for http and https entrypoints. (Default: []). |
traefik_http3 |
Enable Support http3. Default: true |
custom_global_http_middlewares |
General list of customization middleware for http. Specified in yaml format. |
The traefik_http_dynamic_config variable describes the configuration of services operating over the http protocol.
Required variables: name, services_url, domain.
name- The name of your configuration.services_url- Service address.domainorraw_domain- The domain on which the service will run.middlewares- Listing the names of the required middlewares.
TLS Certificates:
- You can connect your TLS Certificate to each service
tls_resolverortls. tls- Your generated self-signed certificate.tls_resolver- Certificate provided by Let’s Encrypt. Required parameters:mainandsans.
# Example:
traefik_http_dynamic_config:
# http, no certificate but with middlewares
- name: 'name_config__HTTP__'
services_url: 'http://172.16.1.10:9000'
domain: 'test-http.example.com'
middlewares:
- "Middlewares_http00"
- "Middlewares_http01"
# https with Let`s Encrypt cert + traefik rule custom host
- name: 'name_config__HTTPS__1'
services_url: 'http://172.16.1.10:9000'
domain: 'testdomain.example.com'
tls_resolver:
main: 'testdomain.example.com'
sans: '*.testdomain.example.com'
# https with Let`s Encrypt cert + traefik ruled Host
- name: 'name_config__HTTPS__1'
services_url: 'http://172.16.1.10:9000'
raw_domain: >-
'HostRegexp(`testdomain2.example.com`,
`{subdomain:[a-zA-Z0-9-]+}.testdomain2.example.com`)'
tls_resolver:
main: 'testdomain.example.com'
sans: '*.testdomain.example.com'
# https with default cert and middlewares for https
- name: 'name_config__HTTPS__2'
services_url: 'http://172.16.1.10:9000'
domain: 'testdomain2.example.com'
tls: {}
middlewares:
- "Middlewares_https00"
- "Middlewares_https01"
# https with Let`s Encrypt auto domain cert + traefik ruled Host
- name: 'name_config__HTTPS__3'
services_url: 'http://172.16.1.10:9000'
raw_domain: >-
'Host(`testdomain3.example.com`, `testdomain4.example.com`)'
tls_simple_acme: trueThe traefik_http_and_https_config variable describes the configuration of services operating over the http and https protocol.
The parameter is used in cases when you need to have access to one service using different protocols: http and https.
The traefik_http_and_https_config works with similar parameters traefik_http_dynamic_config.
# Example:
traefik_http_and_https_config:
- name: 'test_1'
services_url: 'http://127.0.0.1:8080/'
domain: 'test1.local'The traefik_tcp_dynamic_config variable describes the configuration of services operating over the tcp protocol.
Required variables: name, services_address, port.
name- The name of your configuration.services_address- Service address.port- Listening port for traffic setup.entrypoints_extra_parameters- Configure parameters Traefik entrypoints.
# Example:
traefik_tcp_dynamic_config:
- name: 'test_config__TCP__'
services_address: 'git.example.com'
port: 8086
entrypoints_extra_parameters:
forwardedHeaders:
trustedIPs:
- "127.0.0.1/32"
- "172.16.0.0/16"
- "172.20.100.0/24"There are variables to use letsencrypt service:
traefik_le_caserver,traefik_le_challenge_typeandtraefik_le_email- see above.traefik_le_dns_challenge_provider- required variable, iftraefik_le_challenge_type: "dnsChallenge"
# Example:
traefik_le_caserver: "https://acme-staging-v02.api.letsencrypt.org/directory"
traefik_le_challenge_type: "dnsChallenge"
traefik_le_email: "[email protected]"
traefik_le_dns_challenge_provider: "route53"traefik_tls_provider_environments- sets an additional environment variable for the provider.
# Example:
traefik_tls_provider_environments:
- name: "AWS_PROFILE"
value: "default"| Provider | Environments |
|---|---|
route53 |
AWS_PROFILE, AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. |
To use your certificates, set - traefik_tls_cert and traefik_tls_key.
# Example:
traefik_tls_cert: |
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
traefik_tls_key: |
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----Default Certificate. Resource link
all:
hosts:
host
vars:
ansible_user: root
ansible_ssh_private_key_file: '/path/to/.ssh/key'
traefik_log_level: 'DEBUG'
traefik_api_debug: false
traefik_http_dynamic_config:
- name: 'name_config__HTTP__'
services_url: 'http://172.16.1.10:9000'
domain: 'testdomain.example.com'
tls_resolver:
main: 'testdomain.example.com'
sans: '*.testdomain.example.com'
traefik_tcp_dynamic_config:
- name: 'name_config__TCP__'
port: 8090
services_address: 'git.example.com:22'
traefik_tls_provider_environments:
- name: "AWS_PROFILE"
value: "default"
- name: "AWS_ACCESS_KEY_ID"
value: "token"
- name: "AWS_SECRET_ACCESS_KEY"
value: "token"
traefik_le_caserver: "https://acme-staging-v02.api.letsencrypt.org/directory"
traefik_le_challenge_type: "dnsChallenge"
traefik_le_email: "[email protected]"
traefik_le_dns_challenge_provider: "route53"
traefik_tls_cert: |
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
traefik_tls_key: |
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----This is role worked with two type configuration files: dynamic and custom.
Dynamic config files - These files rewrite in process deployment project every time.
Files located: /etc/traefik/config/dynamic/
Custom config files - Configuration files that are managed individually.
Files located: /etc/traefik/config/custom/
Any OS that has a systemd service.
Tested on distributions:
- Ubuntu 18.04
- Centos 7
Enjoy it!
BSD