Traefik is a modern reverse proxy and load balancer that makes deploying microservices easy. When combined with the Amazon Certificate Manager (ACM), it provides a streamlined way to manage SSL/TLS certificates for securing your applications. In this guide, we will walk through an easy setup for Traefik using an Amazon Certificate, making your applications secure and reliable.
What is Traefik? π
Traefik is an open-source HTTP reverse proxy and load balancer designed for ease of use with microservices. It automatically detects services and configures itself dynamically. Traefik's benefits include:
- Dynamic Routing: It integrates with various providers (Docker, Kubernetes, etc.) to enable dynamic routing.
- SSL/TLS Termination: It manages your SSL/TLS certificates, allowing for secure connections.
- Load Balancing: It distributes traffic evenly across your services.
- Monitoring: Traefik provides a web dashboard for real-time insights.
What is Amazon Certificate Manager (ACM)? βοΈ
Amazon Certificate Manager (ACM) is a service that allows you to easily provision, manage, and deploy SSL/TLS certificates for use with AWS services. With ACM, you can:
- Easily obtain SSL certificates: Free certificates can be obtained and managed directly from the AWS Management Console.
- Automate renewal: ACM automatically handles the renewal of certificates, reducing the administrative overhead.
- Integrate with other AWS services: Easily use your certificates with services like Elastic Load Balancing (ELB), Amazon CloudFront, and more.
Prerequisites π οΈ
Before diving into the setup, ensure you have the following:
- AWS Account: Sign up for an AWS account if you don't have one already.
- Domain Name: You should have a registered domain name that you control.
- Docker & Docker-Compose: Traefik can be run in a Docker container, so make sure you have Docker and Docker-Compose installed on your machine.
Step 1: Request an SSL Certificate from ACM π³
- Log in to AWS Management Console.
- Navigate to Certificate Manager.
- Click on Request a certificate.
- Choose Request a public certificate and click Next.
- Enter your domain name (e.g.,
example.com
) and click Next. - Choose a validation method (DNS or Email). DNS is recommended for automation.
- Follow the instructions to validate your domain ownership.
Once your certificate is issued, you can proceed to the next steps.
Step 2: Set Up Traefik Using Docker π³
Create a new directory for your Traefik setup and navigate into it:
mkdir traefik-setup
cd traefik-setup
Create docker-compose.yml
File
Inside your traefik-setup
directory, create a file named docker-compose.yml
:
version: '3.8'
services:
traefik:
image: traefik:v2.5
command:
- "--api.insecure=true" # Enable Traefik dashboard (for development purposes)
- "--providers.docker=true" # Enable Docker as a provider
- "--entrypoints.web.address=:80" # HTTP entry point
- "--entrypoints.websecure.address=:443" # HTTPS entry point
- "--certificatesresolvers.myresolver.acme.httpchallenge=true" # Enable HTTP challenge for ACME
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web" # HTTP entry point for challenge
- "--certificatesresolvers.myresolver.acme.caserver=https://acme-v02.api.letsencrypt.org/directory" # ACME server
- "--certificatesresolvers.myresolver.acme.email=your-email@example.com" # Replace with your email
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" # Storage for certificates
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
volumes:
- "/var/run/docker.sock:/var/run/docker.sock" # Docker socket
- "./letsencrypt:/letsencrypt" # Volume for ACME
networks:
default:
external:
name: traefik_network # Use an external network to communicate with other services
Important Note:
Make sure to replace
your-email@example.com
with your actual email address.
Create a Traefik Configuration File
You can also create a Traefik static configuration file for more complex setups. For our simple setup, it's not necessary, but feel free to explore Traefik's for advanced use cases.
Create a Network for Traefik
Since we are going to run multiple containers that need to communicate with Traefik, we need to create a Docker network:
docker network create traefik_network
Step 3: Deploy a Sample Application π
To test our Traefik setup, letβs deploy a simple web application using Docker.
Create a directory named app
inside your traefik-setup
folder:
mkdir app
Create a Simple Web Application
Create a file named Dockerfile
inside the app
directory:
# Use a lightweight web server
FROM nginx:alpine
# Copy a simple HTML page
COPY index.html /usr/share/nginx/html/index.html
Create an index.html
file in the app
directory:
Welcome to Traefik
Hello from Traefik! π
Update the docker-compose.yml
File
Add the following service to your docker-compose.yml
to include the sample web application:
myapp:
image: myapp:latest
build:
context: ./app
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`example.com`)" # Replace with your domain
- "traefik.http.routers.myapp.entrypoints=websecure" # Use HTTPS
- "traefik.http.routers.myapp.tls.certresolver=myresolver" # Use the cert resolver
networks:
- default
Step 4: Start Traefik and Your Application π¦
Navigate to your traefik-setup
directory in the terminal and run:
docker-compose up -d
This command will build your sample application and start Traefik in the background.
Step 5: Verify the Setup βοΈ
To verify that everything is working properly:
- Open your web browser and navigate to your domain (e.g.,
https://example.com
). - You should see the "Hello from Traefik!" message.
- To access the Traefik dashboard, go to
http://localhost:8080
. (Remember, this is only for development purposes and should not be left open in production.)
Conclusion
You have now successfully set up Traefik with an Amazon Certificate for your web application! π
Key Takeaways
- Dynamic Configuration: Traefik automatically configures routes as containers come and go.
- SSL/TLS Management: Using Amazon Certificate Manager simplifies the management of SSL/TLS certificates.
- Ease of Use: The combination of Traefik and Docker allows for easy deployment of microservices.
Further Steps π
Consider exploring more advanced Traefik features like middleware, authentication, and rate-limiting for enhanced control over your application. The official is an excellent resource for deep diving into these topics.