本文最后更新于:2024年7月24日 晚上
前言
Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易。
Traefik 可以与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS…)集成,并自动和动态地配置自己。
系列文章:
今天我们基于 Traefik on K8S 来详细说明如何通过 BasicAuth MiddleWare 实现认证功能
使用 Basic Auth 的原因很简单, 比如我们想要将一个无认证的页面放到公网, 但是出于安全考虑又希望只有账号密码的用户才能访问. 比如: 放开 Prometheus UI/AlertManager UI 到公网就可以加上 Basic Auth.
创建 BasicAuth MiddleWare
创建 yaml 文件: (如注释中所述, users base64 串可以直接通过 htpasswd 生成)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: basic-auth namespace: kube-system spec: basicAuth: secret: authsecret
---
apiVersion: v1 kind: Secret metadata: name: authsecret namespace: kube-system data: users: |2 dGVzdDokYXByMSRINnVza2trVyRJZ1hMUDZld1RyU3VCa1RycUU4d2ovCnRlc3QyOiRhcHIxJGQ5 aHI5SEJCJDRIeHdnVWlyM0hQNEVzZ2dQL1FObzAK
|
创建基于 BasicAuth MiddleWare 的 IngressRoute
如下所示, 在 middlewares
中引用了 basic-auth
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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: {}
|
验证
访问对应页面后会弹出登录对话框, 如下:
正确输入账号密码才能访问🎉🎉🎉
📚️参考文档
BasicAuth - Traefik
EOF