Use SSL with Ingress
Process
- Add the Jetstack Helm repository
- Install Cert-Manager CRDs
- Install Cert-Manager
- Create secret with Cloudflare API token
- Create ClusterIssuer
- Create Certificate Resource (optional)
- Create Ingress with TLS Configuration
Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io
helm repo updateInstall Cert-Manager CRDs
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.crds.yamlInstall Cert-Manager
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.13.3Verify Installation
kubectl get pods -n cert-managerCreate secret with Cloudflare API token
kubectl create secret generic cloudflare-token \
-n cert-manager \
--from-literal=token=YOUR_CLOUDFLARE_API_TOKENCreate ClusterIssuer
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-dns-cloudflare
namespace: cert-manager
spec:
acme:
email: devops@vatan.kr
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-account-key
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-token
key: tokenCreate Certificate Resource (optional)
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-tls-cert
namespace: cert-manager
spec:
secretName: example-tls-secret
issuerRef:
name: letsencrypt-dns-cloudflare
kind: ClusterIssuer
dnsNames:
- example.com
- '*.example.com' # Wildcard certificateCreate Ingress with TLS Configuration
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: your-app-ingress
annotations:
# Specify the DNS challenge issuer
cert-manager.io/cluster-issuer: letsencrypt-dns-cloudflare
# Optional: Traefik specific annotations
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
tls:
- hosts:
- example.com
- '*.example.com' # Wildcard certificate
secretName: example-tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80