This commit is contained in:
Jun-te Kim 2025-12-07 00:47:50 +00:00
parent 0b6cd0c427
commit 348d567421
3 changed files with 43 additions and 61 deletions

View file

@ -84,10 +84,8 @@ jobs:
# Install Traefik CRDs (idempotent) # Install Traefik CRDs (idempotent)
- name: Install Traefik CRDs - name: Install Traefik CRDs
run: | run: |
if ! kubectl get crd ingressroutes.traefik.io >/dev/null 2>&1; then kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.11/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.10/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.11/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.10/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
fi
# Deploy Traefik # Deploy Traefik
- name: Deploy Traefik - name: Deploy Traefik

View file

@ -1,19 +1,8 @@
apiVersion: v1
kind: ServiceAccount
metadata:
namespace: default
name: traefik-ingress-controller
---
kind: Deployment
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment
metadata: metadata:
name: traefik
namespace: default namespace: default
name: traefik-deployment
labels:
app: traefik
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@ -25,35 +14,51 @@ spec:
app: traefik app: traefik
spec: spec:
serviceAccountName: traefik-ingress-controller serviceAccountName: traefik-ingress-controller
volumes:
- name: acme
persistentVolumeClaim:
claimName: traefik-acme
containers: containers:
- name: traefik - name: traefik
image: traefik:v2.11 image: traefik:v2.11
ports:
- name: web
containerPort: 80
- name: websecure
containerPort: 443
- name: admin
containerPort: 8080
volumeMounts:
- name: acme
mountPath: /acme
args: args:
- --api.insecure - "--api.dashboard=true"
- --accesslog=True - "--api.insecure=false"
- --entrypoints.web.Address=:80 - "--entrypoints.web.address=:80"
- --entrypoints.websecure.Address=:443 - "--entrypoints.websecure.address=:443"
- --providers.kubernetescrd
- --api.dashboard # Redirect HTTP → HTTPS
- --serverstransport.insecureskipverify=true
# TLS (HTTPS)
- "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.httpChallenge=false"
- "--certificatesresolvers.myresolver.acme.tlsChallenge=false"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=route53"
- "--certificatesresolvers.myresolver.acme.email=junte.kim@mealcraft.com"
- "--certificatesresolvers.myresolver.acme.storage=/certs/acme.json"
- "--certificatesresolvers.myresolver.acme.httpChallenge.entryPoint=web"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--providers.kubernetescrd.allowexternalnameservices=true"
- "--providers.kubernetescrd.allowcrossnamespace=false" # Providers
- "--providers.kubernetescrd.legacyCRDDisabled=true" - "--providers.kubernetescrd=true"
# 🔥 USE STAGING CERTIFICATES
# TLS + ACME
- "--certificatesresolvers.myresolver.acme.email=junte.kim@mealcraft.com"
- "--certificatesresolvers.myresolver.acme.storage=/acme/acme.json"
- "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=route53"
# STAGING (uncomment for first-time)
- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory" - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
env: env:
- name: AWS_REGION
valueFrom:
secretKeyRef:
name: aws-secrets
key: AWS_REGION
- name: AWS_ACCESS_KEY_ID - name: AWS_ACCESS_KEY_ID
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@ -64,24 +69,3 @@ spec:
secretKeyRef: secretKeyRef:
name: aws-secrets name: aws-secrets
key: AWS_SECRET_ACCESS_KEY key: AWS_SECRET_ACCESS_KEY
- name: AWS_REGION
valueFrom:
secretKeyRef:
name: aws-secrets
key: AWS_REGION
ports:
- name: web
containerPort: 80
- name: admin
containerPort: 8080
- name: websecure
containerPort: 443
volumeMounts:
- name: cert-volume
mountPath: /certs
imagePullSecrets:
- name: registrypullsecret
volumes:
- name: cert-volume
persistentVolumeClaim:
claimName: certs-pvc

View file

@ -10,10 +10,10 @@ spec:
ports: ports:
- name: web - name: web
port: 80 port: 80
targetPort: web targetPort: 80
- name: websecure - name: websecure
port: 443 port: 443
targetPort: websecure targetPort: 443
- name: admin - name: admin
port: 8080 port: 8080
targetPort: admin targetPort: 8080