在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 提供了一个唯一的 DNS 名称,可以立即用于从互联网的任何地方访问该容器。
加密隧道
Traefik Hub 通过一个私有的、加密的隧道连接到你的集群。利用该隧道,你可以发布你的容器供外部访问,而不必担心复杂和不安全的公共 IP 或 NAT 配置。
自动化证书管理
Traefik Hub 将请求、更新和传播 ACME 证书到你所有的集群,以便所有服务保持一致的安全配置。
灵活地访问控制
无论你使用哪种容器编排工具,都能保护和保障对你的服务的访问。Traefik Hub 支持 JSON 网络令牌(JWT)、Basic Auth.
集中化多集群管理仪表板
在一个单一的窗口内,轻松地可视化所有关于你的所有集群、它们的配置以及服务性能和健康的入站流量的信息。
首先在你自己的 Kubernetes 或 Docker 集群中,部署2 个 Traefik Hub 相关组件:
当你对外发布服务的时候,Traefik Hub 会给你的服务分配一个唯一的域名 (DNS),你需要访问该域名的 HTTPS 协议,然后 Traefik Hub 接收到请求,将请求通过 Traefik Hub 与你自己的 Traefik Hub Agent 之间建立的安全隧道,将请求转发给 Traefik Hub Agent,Traefik Hub Agent 再将请求转发给 Traefik,最后流转到具体的服务。
目前 Traefik Hub SaaS 服务是实验阶段,并不建议上生产使用,实测发现认证服务配置后会并不会自动弹出认证页面。目前免费用户创建服务上限为10个,后续随时可能收费。
点击traefik dashboard右侧的Go to Hub Dashboard跳转到traefik hub登录页
注册账号后登录traefik hub
注册后traefik会自动为你的账号分配域名,安装traefik hub 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 80/TCP 108s
hub-agent-controller ClusterIP 10.104.3.221 443/TCP 109s
hub-catch-all ExternalName hub.traefik.io 443/TCP 109s
traefik-hub ClusterIP 10.111.28.192 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 443/TCP 14d
myapp1 ClusterIP 10.104.58.5 80/TCP 11h
myapp2 ClusterIP 10.99.197.6 80/TCP 11h
traefik NodePort 10.104.36.193 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认证
等待应用发布成功,访问公网域名
实际访问测试并没有出现认证策略,期待官方修复。
除了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 5000/TCP 53m
myapp1 ClusterIP 10.105.147.187 80/TCP 13h
qinglong ClusterIP 10.102.161.1 5700/TCP 6s
接下来查看traefik hub控制台,已自动发现qinglong服务。
配置qinglong服务发布
提示qinglong服务发布成功
通过公网域名访问服务
页面更新:2024-05-14
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号