How to migrate from nginx to traefik ingress
2 minute read
Installation
Kubeops supports deploying Traefik as a dynamic ingress controller and reverse proxy. This guide describes a concise, safe migration from an existing nginx-ingress controller to Traefik and explains how to install Traefik and replace a deprecated nginx-ingress deployment. The migration from nginx to Traefik is straightforward; the steps below show the process in order.
Prerequisites
A running Kubernetes cluster with an existing nginx-ingress controller.
1.Create Values file
values.yaml files are required for the Traefik installation:
# values.yaml
packages:
- name: traefik
enabled: true
values:
standard:
namespace: traefik
externalIPs: []
advanced: {}
Note: Update external IPs and other values as per user requirement.
2.Install Traefik
Once the values.yaml files have been created, install Traefik:
# get your desired version/s
kosi search --hub kubeops --ps traefik
# install traefik
kosi install --hub kubeops kubeops/traefik:<desired_version> -f values.yaml --dname traefik
Example
kosi install --hub kubeops kubeops kubeops/traefik:2.1.0_Beta0 -f values.yaml --dname traefik
3.Verify Deployment
Check pods and services in the traefik namespace:
kubectl get pods -n traefik
kubectl get svc -n traefik
Note: Default NodePorts (e.g. 31080 / 31443) might not be reachable. If the default ports are not accessible, determine the ports used by ingress-nginx (e.g. 30080 / 30443) and update Traefik to use the same ports.
4.Remove old nginx-ingress deployment and service
# get version of installed nginx-ingress and its deployment name (--dname)
kosi list
# delete old nginx-ingress
kosi delete --hub kubeops kubeops/ingress-nginx:<installed_version> -f enterprise-values.yaml --dname <kosi_deployment_name>
Edit Traefik service
If nginx used specific NodePorts and you require those same ports, edit the Traefik Service:
kubectl edit svc traefik -n traefik
Update the ports:
Update the ports to match the previous nginx NodePorts if required.
ports:
- name: web
nodePort: 30080
port: 80
targetPort: web
- name: websecure
nodePort: 30443
port: 443
targetPort: websecure
Verify Port Change
kubectl get svc -n traefik
Note: Ensure the nginx Service is removed or its NodePorts are freed before reusing those NodePorts on the Traefik Service.