基於 Traefik 的激進 TLS 安全設定實踐

2022-12-24 12:00:19

前言

Traefik是一個現代的HTTP反向代理和負載均衡器,使部署微服務變得容易。

Traefik可以與現有的多種基礎設施元件(Docker、Swarm模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS...)整合,並自動和動態地設定自己。

今天我們基於 Traefik on K8S 來詳細說明如何對 TLS 安全進行「激進」設定。

環境基本資訊

  1. K8S 叢集;
  2. 域名:ewhisper.cn(由 DNSPod 進行 DNS 管理,已指向 K8S 叢集的 Traefik Ingress 的 LoadBalancer 公網地址)
  3. 使用 cert-manager 自動管理的證書 *.ewhisper.cn 作為 Traefik 的預設證書;cert-manager 位於 cert-manager NameSpace 下
  4. Traefik 2.4.8 安裝於 K8S 叢集的 kube-system NameSpace 下,且使用 CRDs 進行設定。

「激進」的 TLS 設定

全站受信證書 + HTTPS。具體如下:

  1. 全站 HTTPS 443 埠設定;
  2. 證書來自 Let's Encrypt(由 cert-manager 自動申請)(⚡激進,生產慎用!)
  3. 監聽 HTTP 請求,並重定向到 HTTPS;(⚡激進,生產慎用!)
  4. 啟用 HSTS 功能(⚡激進,生產慎用!)
  5. TLS 版本限定在 TLS 1.3(⚡激進,生產慎用!)

設定實踐

TLS 版本限定在 TLS 1.3

使用 Traefik 的 CRD - TLSOption 設定如下:

apiVersion: traefik.containo.us/v1alpha1
kind: TLSOption
metadata:
  name: default
  namespace: kube-system

spec:
  minVersion: VersionTLS13