Traefik是一个现代HTTP反向代理和负载均衡器,可以轻松部署微服务。 Traefik与现有的基础架构组件(Docker,Swarm模式,Kubernetes,Marathon,Consul,Etcd,Rancher,Amazon ECS ......)集成,并自动动态配置。此文主要介绍kubernetes集群下的traefik部署。
在kubernetes中,默认traefik-ui的web页面是不需要验证就能登陆查看服务情况,这样不可避免会有安全问题。这里我们可以为服务配置basic auth,使访问时需要验证。
1、安装httpd
yum install -y httpd
2、创建用户密码文件
htpasswd -bc basic-auth-secret <username> <password>
3、创建k8s secret
kubectl create secret generic basic-auth --from-file=basic-auth-secret --namespace=kube-system
4、部署Ingress
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
type: NodePort
selector:
k8s-app: traefik-ingress-lb
ports:
- name: web
port: 80
targetPort: 8580
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
annotations:
kubernetes.io/ingress.class: traefik
ingress.kubernetes.io/auth-type: basic
ingress.kubernetes.io/auth-secret: basic-auth
spec:
rules:
- host: traefik.domain.com
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
通过在Ingress中添加鉴权annotation实现服务basic auth。这里需要注意:
可以看到,在登陆traefik-ui的时候已经需要用户验证。
当输入用户密码后,我们可以成功进入web页面,
当然还有其它服务可以使用此种方法加强访问安全性,如kubernetes dashboards等。