traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持;同 nginx 等相比,traefik 能够自动感知后端容器变化,从而实现自动服务发现。
traefix的架构如下:
Traefix的部署使用
部署环境:
k8s-node1(master):192.168.232.130
k8s-node2(node): 192.168.232.131
k8s-node2(node): 192.168.232.129
部署步骤:
一:创建ClusterRole以及ClusterRoleBinding。(在kubernets1.6之后启用了RBAC鉴权机制,因此需配置ClusterRole以及ClusterRoleBinding来对api-server的进行相应权限的鉴权)
二:部署traefix,这里使用Deployment方式,定义2个副本,使每个node都运行traefix服务。
这里创建了一个traefix的Deployment,设置了2个副本,使用hostport的方式在运行traefix的node上监听了80(traefix服务端口)和8050(traefix-ui界面)端口,并且两个node上都存在一个traefix的pod。
三:traefix ui界面。
部署完traefix之后,就可以使用node上的8050端口来访问traefix的ui界面了,从两个node都可以访问,如下:
这里我们可以发布一个traefix-web-ui的ingress,使我们可以通过域名的方式来访问traefix ui界面:
我们发布了一个host,名为traefix-ui.k8s,后端traefix-web-ui的service,可以看到关联到了pod地址192.168.232.129:8580和192.168.232.131:8580。
修改host,使我们可以通过traefix-ui.k8s域名来访问traefix-ui:
四:发布其他web服务。
部署完traefix之后,就可以通过它来发布我们自己的web应用了。这里我有两个简单的tomcat服务镜像test1和test2。访问他们,分别返回字符串tomcat_test1和tomcat_test2。首先,我先创建tomcat-test1和tomcat-test2的pod和service,其中8080为tomcat的http端口,8443为tomcat的https端口,本例中仅使用http端口测试。
创建test1的ingress,来发布tomcat-test1服务:
从traefix-ui界面上,可以看到已经有了一个tomcat.test1.k8s的域名规则。
修改hosts,使用tomcat.test1.k8s来访问tomcat-test1应用:
五:ingress配置之,同域名分路径代理不同web应用。
很多使用我们不想配置太多的域名来区别应用,使用同域名分路径的方式来区别应用就简洁方便很多。ingress也提供了相关的配置。
从上文可以知道,我们有两个应用tomcat-test1和tomcat-test2。这里可配置域名tomcat.test.k8s,通过路径test1、test2来分别代理两个tomcat应用。其中,分路径配置需添加配置:traefik.frontend.rule.type: PathPrefixStrip
从describe信息和ui界面上可以看到,tomcat.test.k8s分别有了/test1/和/test2/的域名代理以及相对应的后端,可以修改hosts测试一下分路径是否生效:
后记
本章只是初步实现了traefix的http访问代理,如果开启traefix的https代理以及怎么对traefix进行更多的配置,将在后续的博文中来讨论。