

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 httpd2、创建用户密码文件
htpasswd -bc basic-auth-secret <username> <password>3、创建k8s secret
kubectl create secret generic basic-auth --from-file=basic-auth-secret --namespace=kube-system4、部署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等。