生产环境下,k8s集群对外暴露服务主要有LoadBalancer和Ingress两种方式:
- LoadBalancer:需要云厂商支持,使用k8s service的负载均衡能力,也就是依靠iptables/ipvs的能力,可用于各种协议
- Ingress:相对更加灵活,通过反向代理服务器实现负载均衡,仅用于http/https协议,这种场景下需要额外的反向代理服务以及ingress controller,nginx是大家熟知的反向代理,在k8s时代,出现了nginx-ingress,就是nginx+ingress controller的组合,ingress controller负责根据ingress资源生成nginx配置,当配置有变化是重启nginx。同时也出现了云原生的反向代理traefik,它相当于把ingress controller包含到其中合为一体,并且能够动态感知路由规则变化,不需重启。
traefik是一个相对较新的反向代理,网上相关资料不是特别丰富,研究了好几天,才成功访问到k8s dashboard,将其中的关键点记录于此。
<!--more-->
安装traefik
使用helm安装,最新chart使用的traefik 1.7.19:
helm install stable/traefik -f traefik-values.yaml
traefik-values.yaml:
rbac:
enabled: true
dashboard:
enabled: true # 启用traefik dashboard
ingress:
annotations:
traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
deployment:
hostPort:
httpEnabled: true # traefik pod所在node上开启80端口
httpsEnabled: true # traefik pod所在node上开启443端口
dashboardEnabled: true # traefik pod所在node上开启8080端口,共traefik dashboard使用
ssl:
insecureSkipVerify: true # frontend不验证https的benkend
enabled: true # 启用https入口
extraVolumes:
- name: traefik-ssl
hostPath:
path: /share/k8s/traefik/ssl # 其中存放https入口的证书和key,名字必须为tls.crt,tls.key
type: DirectoryOrCreate
extraVolumeMounts:
- name: traefik-ssl
mountPath: /ssl # traefik pod从/ssl目录读取上述tls.crt,tls.key
</