基於 Traefik 的 Basic Auth 配置

東風微鳴發表於2022-12-22

前言

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

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

系列文章:

今天我們基於 Traefik on K8S 來詳細說明如何透過 BasicAuth MiddleWare 實現認證功能

Basic Auth 功能簡圖

使用 Basic Auth 的原因很簡單, 比如我們想要將一個無認證的頁面放到公網, 但是出於安全考慮又希望只有賬號密碼的使用者才能訪問. 比如: 放開 Prometheus UI/AlertManager UI 到公網就可以加上 Basic Auth.

建立 BasicAuth MiddleWare

建立 yaml 檔案: (如註釋中所述, users base64 串可以直接透過 htpasswd 生成)

# 宣告 `users` 所在的secret
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: basic-auth
  namespace: kube-system
spec:
  basicAuth:
    secret: authsecret

---
# Note: 在kubernetes的secret中,字串(例如由htpasswd生成的)必須首先進行base64編碼。
# 要建立一個encoded 的 user:password 對,可以使用以下命令:
# htpasswd -nb user password | openssl base64

apiVersion: v1
kind: Secret
metadata:
  name: authsecret
  namespace: kube-system
data:
  users: |2
    dGVzdDokYXByMSRINnVza2trVyRJZ1hMUDZld1RyU3VCa1RycUU4d2ovCnRlc3QyOiRhcHIxJGQ5
    aHI5SEJCJDRIeHdnVWlyM0hQNEVzZ2dQL1FObzAK

建立基於 BasicAuth MiddleWare 的 IngressRoute

如下所示, 在 middlewares 中引用了 basic-auth:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: alertmanager
  namespace: cert-manager
spec:
  entryPoints:
    - web
    - websecure
  routes:
    - kind: Rule
      match: Host(`alertmanager.ewhisper.cn`)
      middlewares:
        - name: hsts-header
          namespace: kube-system
        - name: redirectshttps
          namespace: kube-system
        - name: basic-auth
          namespace: kube-system
      services:
        - name: kube-prometheus-alertmanager
          namespace: monitoring
          port: 9093
  tls: {}

驗證

訪問對應頁面後會彈出登入對話方塊, 如下:

Basic Auth 頁面

正確輸入賬號密碼才能訪問???

?️參考文件

BasicAuth - Traefik

EOF

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章