sumarsono.com
Take it with a grain of salt


Traefik V2 SSL A+ in Ssllabs

Posted on

Untuk mendapatkan score a+ di SSL Labs ketika menggunakan traefik v2 sebagai ingress controller sangatlah mudah. Cukup membuat sebuah middleware dan sebuah TLSOption.

Pertama, buat sebuah middlewara object untuk traefik v2:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: security-header
spec:
  headers:
    frameDeny: true
    sslRedirect: true
    browserXssFilter: true
    contentTypeNosniff: true
    #HSTS
    stsIncludeSubdomains: true
    stsPreload: true
    stsSeconds: 31536000

Kemudian buat sebuah TLSOption

apiVersion: traefik.containo.us/v1alpha1
kind: TLSOption
metadata:
  name: mytlsoption
  namespace: default
spec:
  minVersion: VersionTLS12
  cipherSuites:
    - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384   # TLS 1.2
    - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305    # TLS 1.2
    - TLS_AES_256_GCM_SHA384                  # TLS 1.3
    - TLS_CHACHA20_POLY1305_SHA256            # TLS 1.3
  curvePreferences:
    - CurveP521
    - CurveP384
  sniStrict: true

Apply kedua object diatas dengan kubectl.

Selanjutnya edit ingressRoutes traefik:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: my.domain.co.id
  namespace: belajar
  annotations:
    kubernetes.io/ingress.class: "traefik-dua"
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`my.domain.co.id`)
    kind: Rule
    services:
    - name: myapp-svc
      port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: my.domain.co.id-tls
  namespace: belajar
  annotations:
    kubernetes.io/ingress.class: "traefik-dua"
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`my.domain.co.id`)
    kind: Rule
    services:
    - name: myapp-svc
      port: 80
    middlewares:
      - name: security-header
        namespace: default
  tls:
    certResolver: leprod
    options:
      name: mytlsoption
      namespace: default

Perhatikan bagian spec.routes.middlewares.name dan spec.routes.middlewares.namespace pada object ingressRoutes my.domain.co.id-tls dan spec.tls.options.name dan spec.tls.options.namespace. Itu adalah nama dari middleware dan tlsoption yang dibuat tadi. Namespace disesuaikan dengan lokasi dari middleware dan tlsoption.

Cek skor di SSL Labs, pasti A+.

Cool~