Menambahkan Cloudflare Origin CA certificate Ke Traefik Kubernetes Ingress
Posted on
Ceritanya, aku pengen nyobain End-to-end HTTPS pakai Cloudflare dengan mode Full (strict). Alasannya, karena aku pakai Traefik v1.7.24 sebagai ingress controller, dan aku ingin pakai SSL certificate dari cloudflare. Nah si traefik ini sudah dikonfigurasi untuk pakai SSL certificate dari Let's Encrypt pakai OnHostRule. Masalahnya adalah ketika aku aktifkan HTTP cloudflare maka traefik akan gagal ketika validasi ke server let's encrypt.
Salah satu cara agar traefik tidak request sertifikat ke let's encrypt adalah dengan cara mendefinisikan tls.secreteName di spec Ingress-nya:
tls:
- secretName: sertifikatku-tls-cert
Kenapa sih kok ribet bener? Yah namanya juga lagi belajar, explorasi.
Pertama, generate Origin Certificates dari cloudflare:
Menu SSL/TLS > Origin Server > Origin Certificates > Create Certficate
Copas dan simpan certificate:
-----BEGIN CERTIFICATE-----
sampai
-----END CERTIFICATE-----
Simpan aja dengan nama domainku.crt
Selanjutnya copas dan simpan private key:
-----BEGIN PRIVATE KEY-----
sampai
-----END PRIVATE KEY-----
Simpan aja dengan nama domainku.key
Kedua, bikin secret tls pakai kubectl:
kubectl -n development create secret tls domainku-tls-cert --key=domainku.key --cert=domainku.crt
Note:
Secret API objects reside in a namespace. They can only be referenced by pods in that same namespace. Basically,
https://kubernetes.io/docs/concepts/configuration/secret/#details
Terakhir bikin ingress manifest domainku.com.ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: development
name: domainku.com
annotations:
kubernetes.io/ingress.class: traefik
ingress.kubernetes.io/browser-xss-filter: 'true'
ingress.kubernetes.io/content-type-nosniff: 'true'
traefik.ingress.kubernetes.io/redirect-permanent: "true"
traefik.ingress.kubernetes.io/redirect-regex: ^https?://(www\.)?(.*)
traefik.ingress.kubernetes.io/redirect-replacement: https://${2}
ingress.kubernetes.io/force-hsts: "true"
ingress.kubernetes.io/hsts-max-age: "2592000"
ingress.kubernetes.io/hsts-include-subdomains: "true"
ingress.kubernetes.io/hsts-preload: "false"
ingress.kubernetes.io/frame-deny: "true"
ingress.kubernetes.io/custom-frame-options-value: "SAMEORIGIN"
ingress.kubernetes.io/content-security-policy: upgrade-insecure-requests
traefik.ingress.kubernetes.io/buffering: |-
maxrequestbodybytes: 10485760
memrequestbodybytes: 2097153
maxresponsebodybytes: 10485761
memresponsebodybytes: 2097152
retryexpression: IsNetworkError() && Attempts() <= 2
traefik.ingress.kubernetes.io/rate-limit: |
extractorfunc: client.ip
rateset:
myratelimit:
period: 1s
average: 50
burst: 100
spec:
rules:
- host: domainku.com
http:
paths:
- path: /
backend:
serviceName: myservice007
servicePort: 80
tls:
- secretName: domainku-tls-cert
kubectl apply -f domainku.com.ingress.yaml
Selesai, dengan begini si traefik tidak akan request sertifikat ke let's encrypt dan aku bisa aktifkan awan kuning cloudflare dengan mode Full (strict)
~