A sample deployment of nginx static site with traefik proxy on local kubernetes (eg: Minikube).
You can setup this locally on your minikube by running:
make all ENVIRONMENT=devNB: To be able able to access the static site with the domain dev.example.com, you are required to add the domain to your /etc/hosts files and then turn on minikube tunnel.
minikube starteval $(minikube docker-env)docker build -t kenec/nginx .echo "dev prod traefik" | xargs -n1 kubectl create namespacekubectl create secret generic dev-secret --from-literal=message="dev-secret" -n devhelm upgrade --install traefik traefik/traefik -f traefik/values.yaml --namespace traefikhelm upgrade --install nginx-dev ./charts/nginx-site -n dev -f ./charts/nginx-site/dev-values.yaml127.0.0.1 dev.example.com
127.0.0.1 prod.example.comminikube tunnelcurl -k https://dev.example.comTo deploy prod in the prod namespace, repeat steps 5 and 7 while referencing the prod values file and chart name.
eg:
helm upgrade --install nginx-prod ./charts/nginx-site -n prod -f ./charts/nginx-site/prod-values.yamlTo deploy the setup with an ACME provider like Let's Encrypt for automatic certificate generation
Traefik value file has already been configured with a certificate resolver to point to the staging let's encrypt server.
certificatesResolvers:
myresolver:
acme:
email: nnamani.kenechukwu@gmail.com
storage: /data/acme.json
httpChallenge:
entryPoint: web
caServer: https://acme-staging-v02.api.letsencrypt.org/directoryTo allow ingressRoute make use of this certificateResolver, use the following tls setting instead
tls:
certResolver: myresolverresource "helm_release" "traefik" {
name = "traefik"
repository = "https://traefik.github.io/charts"
chart = "traefik"
version = "34.3.0"
namespace = "traefik"
values = [
"traefik/values.yaml"
]
}resource "helm_release" "nginx" {
name = "nginx-site"
chart = "./charts/nginx-site"
namespace = "dev"
values = [
"dev-values.yaml"
]
}We can use the official GKE terraform module to boostrap the kubernetes cluster
https://registry.terraform.io/modules/terraform-google-modules/kubernetes-engine/google/latest