原因:
像Traefik-Dashboard等页面,是没有用户登录限制的,希望给他们加上用户登录限制,我们需要在traeifk里给对应的ingress添加登录用的Middleware
一、用户名密码加密
1.设置你的账号密码,通过htpasswd进行加密
root@master25:/opt/zmj/traefik-middleware/middleware# htpasswd -nb admin admin@123
admin:$apr1$itptjwcw$4De5.rgiMF8LwwLMs/vmm.
# 用户名/密码: admin/admin@123
2.将加密的信息放入一个文件里
root@master25:# cat test
admin:$apr1$itptjwcw$4De5.rgiMF8LwwLMs/vmm.
3.进行base64加密,获得加密后的字符
root@master25: # cat test | openssl base64
YWRtaW46JGFwcjEkaXRwdGp3Y3ckNERlNS5yZ2lNRjhMd3dMTXMvdm1tLgo=
二、创建middleware.yaml
# Declaring the user list
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: auth
spec:
basicAuth:
secret: authsecret
---
# Note: in a kubernetes secret the string (e.g. generated by htpasswd) must be base64-encoded first.
# To create an encoded user:password pair, the following command can be used:
# htpasswd -nb user password | openssl base64
apiVersion: v1
kind: Secret
metadata:
name: authsecret
data:
users: |2
YWRtaW46JGFwcjEkaXRwdGp3Y3ckNERlNS5yZ2lNRjhMd3dMTXMvdm1tLgo=
创建后就可以在traefik的界面看到
三、创建ingress.yaml
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: traefik-dashboard
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router-entrypoint: http
traefik.ingress.kubernetes.io/router.middlewares: traefik-traefik-auth@kubernetescrd #再此处调用
traefik.ingress.kubernetes.io/rule-type: PathPrefix
spec:
rules:
- host: XXXXXXX
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 80
访问域名后
四、更新密码
如果我们要更新密码,可以重新使用htpasswd生成密码,然后放在policy文件中,使用命令行更新
kubectl create secret generic authsecret --from-file=users=./policy --dry-run=client -o yaml | kubectl apply -f -