简介
什么是traefik hub
在traefik2.7后,推出了Traefik Hub云原生网络平台,可帮助你即时在边缘发布、保护和扩展容器。它提供了从用户到容器的端到端连接以及进入每个服务的网关。它是用于在分布式系统中连接多个集群的统一解决方案,它通过一个简单易用的仪表板整合了网络堆栈的多个层。Traefik Hub 是一种开箱即用的解决方案,易于学习,甚至更易于实施,开发团队只需单击一下即可将应用程序发布到 Internet,并自动配置重要的安全实践。
Traefik Hub 将完全托管于你的基础架构之上,并与你安装在每个集群中的代理进行连接。代理附加到入口实例。它们充当你的每项服务的网关,该平台向每个代理发送指令并从其接收关键指标。Traefik Hub 适用于 Kubernetes 或 Docker 集群。
官方文档:https://doc.traefik.io/traefik/traefik-hub/
traefik hub操作参考文档:https://traefik.io/blog/publish-and-secure-applications-with-traefik-hub/
traefik hub特性
一键服务发布
Traefik Hub 使发布和暴露任何应用程序到互联网变得容易。对于每个发布的服务,Traefik Hub 提供了一个唯一的 DNS 名称,可以立即用于从互联网的任何地方访问该容器。
加密隧道
Traefik Hub 通过一个私有的、加密的隧道连接到你的集群。利用该隧道,你可以发布你的容器供外部访问,而不必担心复杂和不安全的公共 IP 或 NAT 配置。
自动化证书管理
灵活地访问控制
无论你使用哪种容器编排工具,都能保护和保障对你的服务的访问。Traefik Hub 支持 JSON 网络令牌(JWT)、Basic Auth.
集中化多集群管理仪表板
在一个单一的窗口内,轻松地可视化所有关于你的所有集群、它们的配置以及服务性能和健康的入站流量的信息。
traefik hub工作原理
首先在你自己的 Kubernetes 或 Docker 集群中,部署2 个 Traefik Hub 相关组件:
- Traefik
- Traefik Hub Agent(Hub Agent Auth Server+Hub Agent Controller+Hub Agent Tunnel)
当你对外发布服务的时候,Traefik Hub 会给你的服务分配一个唯一的域名 (DNS),你需要访问该域名的 HTTPS 协议,然后 Traefik Hub 接收到请求,将请求通过 Traefik Hub 与你自己的 Traefik Hub Agent 之间建立的安全隧道,将请求转发给 Traefik Hub Agent,Traefik Hub Agent 再将请求转发给 Traefik,最后流转到具体的服务。
温馨提示
目前 Traefik Hub SaaS 服务是实验阶段,并不建议上生产使用,实测发现认证服务配置后会并不会自动弹出认证页面。目前免费用户创建服务上限为10个,后续随时可能收费。
安装traefik hub
创建账户
点击traefik dashboard右侧的Go to Hub Dashboard
跳转到traefik hub登录页
注册账号后登录traefik hub
注册后traefik会自动为你的账号分配域名,安装traefik hub agent后,会自动创建通配符域名证书资源。
安装agent
接下来点击agent页面,选择安装traefik hub agent
接下来按照提示,安装traefik proxy和traefik hub agent
执行完成后查看资源信息
[root@k8s-master ~]# helm list -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
hub-agent hub-agent 1 2022-10-08 22:51:39.810530479 +0800 CST deployed hub-agent-0.24.0 v0.5.0
traefik hub-agent 1 2022-10-08 22:47:51.683322496 +0800 CST deployed traefik-12.0.2 2.9.1
[root@k8s-master ~]# kubectl get pod -n hub-agent
NAME READY STATUS RESTARTS AGE
hub-agent-auth-server-7cc987c674-df4z4 1/1 Running 0 48s
hub-agent-auth-server-7cc987c674-lf9cj 1/1 Running 0 48s
hub-agent-auth-server-7cc987c674-m85tt 1/1 Running 0 48s
hub-agent-controller-8586f98687-nwhr5 1/1 Running 0 48s
hub-agent-tunnel-75c6f88b55-g6jbd 1/1 Running 0 48s
traefik-hub-64dff85f87-7r52j 1/1 Running 0 4m47s
[root@k8s-master ~]# kubectl get svc -n hub-agent
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hub-agent-auth-server ClusterIP 10.101.16.85 <none> 80/TCP 108s
hub-agent-controller ClusterIP 10.104.3.221 <none> 443/TCP 109s
hub-catch-all ExternalName <none> hub.traefik.io 443/TCP 109s
traefik-hub ClusterIP 10.111.28.192 <none> 9100/TCP,9901/TCP 5m37s
接下来查看traefik hub的agent详细信息
发布服务
在本地的kubernetes集群有一个myapp1服务,并且创建了service资源(不需要创建ingressrouter资源),此时访问myapp1只能通过本地svc访问,因为没有公网IP和域名,其他互联网用户无法访问。
[root@k8s-master ingress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14d
myapp1 ClusterIP 10.104.58.5 <none> 80/TCP 11h
myapp2 ClusterIP 10.99.197.6 <none> 80/TCP 11h
traefik NodePort 10.104.36.193 <none> 80:32248/TCP,443:30732/TCP,9000:30517/TCP,9100:31763/TCP,9200:32614/TCP,9300:32084/UDP 45m
[root@k8s-master ingress]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp1-795d947b45-lvfmb 1/1 Running 2 11h
myapp2-6ffd54f76-b2thm 1/1 Running 2 11h
myapp2-6ffd54f76-stvf8 1/1 Running 0 115s
test 1/1 Running 5 8d
traefik-ingress-controller-5d474997df-qnm4l 1/1 Running 0 23m
接下来使用traefik hub发布myapp1服务。
应用发布成功时,traefik会为我们自动配置域名并设置ssl证书,接下来访问公网域名即可。访问测试https://valid-hookworm-xmat3h.qitgjjol.traefikhub.io/
发布带访问控制策略的服务
先在访问控制策略页面,点击创建访问控制策略
选择基本身份验证服务,并设置账号密码
定义ACP后,我们可以在访问控制策略中看到详细信息
接下来发布一个flask应用,在ACP选项中选择basic auth认证
等待应用发布成功,访问公网域名
实际访问测试并没有出现认证策略,期待官方修复。
发布非k8s服务
除了docker k8s服务的直接暴露外,如果有内网服务与k8s互通的话,也可以通过Kubernetes Service + Endpoint 的方式将非 Kubernetes 服务配置为 Kubernetes 服务,通过traefik hub发布服务。
Kubernetes Service + Endpoint的详细用法参考文章:https://www.cuiliangblog.cn/detail/section/94200051
例如我在k8s集群外的机器部署了青龙面板,由于没有公网IP,只能内网访问。但是运行青龙面板的机器和k8s机器可以互通,此时就可以通过traefik hub发布服务
创建青龙服务的service和endpoints
[root@tiaoban ingress]# cat qinglong-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: qinglong
spec:
ports:
- port: 5700
name: qinglong
targetPort: 5700
---
apiVersion: v1
kind: Endpoints
metadata:
name: qinglong
subsets:
- addresses:
- ip: 192.168.10.100 # 外部机器IP
ports:
- port: 5700 # 服务端口
name: qinglong
[root@tiaoban ingress]# kubectl apply -f qinglong-svc.yaml
service/qinglong created
endpoints/qinglong created
[root@tiaoban ingress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
flask ClusterIP 10.104.29.157 <none> 5000/TCP 53m
myapp1 ClusterIP 10.105.147.187 <none> 80/TCP 13h
qinglong ClusterIP 10.102.161.1 <none> 5700/TCP 6s
接下来查看traefik hub控制台,已自动发现qinglong服务。
配置qinglong服务发布
提示qinglong服务发布成功
通过公网域名访问服务
查看更多
微信公众号
微信公众号同步更新,欢迎关注微信公众号第一时间获取最近文章。
博客网站
崔亮的博客-专注devops自动化运维,传播优秀it运维技术文章。更多原创运维开发相关文章,欢迎访问https://www.cuiliangblog.cn