通过 Traefik Hub 暴露家里的网络服务

通过,traefik,hub,暴露,家里,网络服务 · 浏览次数 : 161

小编点评

**Traefik Hub 简介** Traefik Hub 是一个边缘网关 SaaS 服务,可以帮助用户将家里位于 nat 后面的 IP 地址和服务暴露出来。今天刚试下把 NAS UI 和 Jellyfin 暴露出来,效果不错。 **主要功能** * **边缘网关:**提供用户可访问的边缘服务,例如 NAS、DNS、VPN、TCOVER UDP、SSL 和域名。 * **安全加固:**提供用户可访问的安全加固,例如 SSL、DNS 和域名。 * **自动化:**提供用户可访问的自动化工具,例如 Kubernetes 集群和边缘网关发布和加密。 * **标准化:**提供用户可访问的标准化工具,例如 Kubernetes 集群和边缘网关发布和加密。 * **简化:**提供用户可访问的简化工具,例如 Kubernetes 集群和边缘网关发布和加密。 **配置** * 简单的设置,用户可访问边缘服务。 * 安全加固,例如 SSL 和 DNS。 * Kubernetes 集群和边缘网关发布和加密。 *标准化工具,例如 Kubernetes 集群和边缘网关发布和加密。 *简化工具,例如 Kubernetes 集群和边缘网关发布和加密。 **结论** Traefik Hub 是一个非常方便的工具,可以帮助用户将家里位于 nat 后面的 IP 地址和服务暴露出来。它提供了边缘网关、安全加固、自动化和标准化工具的简单配置。

正文

Traefik Hub

Traefik Hub 简介

📚️Reference:

你的云原生网络平台 --
发布加固你的容器从未如此简单。
Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一个网关。

Traefik Hub 定位:

  • 云原生网络平台

它有 2 大核心功能,我这次体验感觉也是如此:

  • (易于)发布(以网站域名的形式发布容器服务)
  • (易于)加固 (HTTPS + 认证)

Traefik Hub 主要功能

发布

部署 Hub 容器,选择你的服务,并在几秒钟内获得对你的容器的安全公共访问。

安全加固

通过安全的隧道访问你的容器,部署行业标准的认证,并自动化 TLS 证书管理。

可伸缩

从单一的 Kubernetes 或 Docker 集群开始,在你的集中式 Hub 仪表板上(将 Traefik Hub Agent) 无缝扩展到多个集群。

Traefik Hub 工作原理

Traefik Hub Diagram

  • 在你自己的 Kubernetes 或 Docker 集群中,安装 2 个 Traefik Hub 相关组件:
    • Traefik
    • Traefik Hub Agent(实际上是 3 个组件)
      • 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 的关联功能

🖱️一键服务发布

边缘的任何地方进行访问从未如此简单。对于每个发布的服务,Traefik Hub 提供了一个唯一的 DNS 名称,可以立即用于从互联网的任何地方访问该容器。

一键服务发布

🔒️加密隧道

Traefik Hub 通过一个私有的、加密的隧道连接到你的集群。利用该隧道,你可以发布你的容器供外部访问,而不必担心复杂和不安全的公共 IP 或 NAT 配置。

🎖️自动化证书管理

Traefik Hub 将请求、更新和传播 ACME 证书到你所有的集群,以便所有服务保持一致的安全配置。

🔑灵活地访问控制

无论你使用哪种容器编排工具,都能保护和保障对你的服务的访问。Traefik Hub 支持 JSON 网络令牌(JWT)、Basic Auth.

📺️集中化多集群管理仪表板

在一个单一的窗口内,轻松地可视化所有关于你的所有集群、它们的配置以及服务性能和健康的入站流量的信息。

技术细节

支持的容器编排平台

  • Kubernetes
  • Docker
  • Docker Swarm

支持的 Ingress Controller

  • Traefik Proxy 2.8

内部技术

  • Let's Encrypt
  • 连接多路复用
  • 安全隧道

Traefik Hub 快速安装

申请 Traefik Hub 账号

通过https://sso.hub.traefik.io/login 注册账号即可。

连接一个新的 Agent

正常登录后,界面如下图所示:

点击按钮添加。

这里我的环境是:

  • 家里的威联通 NAS (或树莓派) 上的 K3s

所以接下来这一步选择:Kubernetes, 如下图。(除此之外,在这里还可以选择:docker docker compose docker swarm. 有能力的推荐 Kubernetes, 因为方便后续通过 SVC+Endpoint 把家里的其他服务发布出去。这里推荐轻量 Kubernetes 发行版:K3s -- 512MB 内存就能跑起来。)

选择了 Kubernetes 之后,就会出来详细的步骤,如下图:

在 K3s 上安装 Hub Agent 及相关组件

📝Notes:

我按照上图的步骤一步一步走,实际上还是碰到了很多次意外。下面会另起章节说明我这次碰到的问题和解决办法。

安装 Traefik Proxy

添加 Traefik proxy helm 仓库:

helm repo add traefik https://helm.traefik.io/traefik
helm repo update

安装 Traefik proxy:

helm upgrade --install traefik traefik/traefik \
--namespace hub-agent --create-namespace \
--set=additionalArguments='{--experimental.hub,--hub}' \
--set metrics.prometheus.addRoutersLabels=true \
--set providers.kubernetesIngress.allowExternalNameServices=true \
--set ports.web=null --set ports.websecure=null --set ports.metrics.expose=true \
--set ports.traefikhub-tunl.port=9901 --set ports.traefikhub-tunl.expose=true --set ports.traefikhub-tunl.exposedPort=9901 --set ports.traefikhub-tunl.protocol="TCP" \
--set service.type="ClusterIP" --set fullnameOverride=traefik-hub

安装 Traefik Hub Agent

添加 Traefik Hub Helm 仓库:

helm repo add traefik-hub https://helm.traefik.io/hub
helm repo update

安装 Traefik hub-agent

helm upgrade --install hub-agent traefik-hub/hub-agent \
--set token="<your-token>" --namespace hub-agent \
--create-namespace --set image.pullPolicy=Always --set image.tag=experimental

📝Notes

Token 直接在 Traefik Hub 的界面上会给出。

这样就安装成功了,共计安装了以下组件:

  • Traefik Proxy: 1 pod
  • Traefik Hub Agent
    • Hub Agent Auth Server: 3 pod
    • Hub Agent Controller: 1 pod
    • Hub Agent Tunnel: 1 pod

后台安装完成,在页面上点击 Configuration Done:

点击后跳转到如下界面,还是很形象的:

我把我的这个 Agent 重命名为:nas-k3s, 如下:

Traefik Hub 页面速览

Traefik Hub 页面还是很简洁的,这是首页 - Dashboard:

  1. Agents
  2. Services
  3. Access Control Policies

Agents 页面:

Services 页面:

Access Control 页面:

通过 Traefik Hub 暴露边缘服务

暴露 Kubernetes 集群中的服务

Traefik Hub Agent 会获取 Kubernetes 集群中的所有 services, 如果需要暴露,直接选择就好,非常简单,如下图:

等待 1min 左右,即可创建完毕:

点击 URL 即可正常访问,真的是把复杂的边缘服务暴露简单化、标准化。👍️👍️👍️

暴露边缘非 Kubernetes 服务

在边缘端(家里), 我还有很多服务(如:Jellyfin、GOGS Git 仓库、Calibre-web 书库、NAS UI 等)是不在 Kubernetes 集群里的。该如何暴露?

其实,Traefik Hub Agent 和 Traefik Hub 通过安全隧道联通了。而 Kubernetes 集群和边缘(家里)的内网也是联通的。那么其实 Traefik Hub 和 家里的内网就是通的。因此,可以使用 Kubernetes Service + Endpoint 的方式将家里的非 Kubernetes 服务配置为 Kubernetes 服务。实现通过 Traefik Hub 暴露出来。

举例:暴露 Jellyfin 服务

在 Kubernetes 集群中创建如下 Service 和 Endpoint:

apiVersion: v1
kind: Service
metadata:
  name: jellyfin
  namespace: nas
  labels:
    app: jellyfin
spec:
  ports:
    - name: ui
      protocol: TCP
      port: 8096
      targetPort: 8096
---
apiVersion: v1
kind: Endpoints
metadata:
  name: jellyfin
  namespace: nas
  labels:
    app: jellyfin
subsets:
  - addresses:
      - ip: 192.168.1.23
    ports:
      - name: ui
        port: 8096
        protocol: TCP

然后和上一节同样的办法,将 Service: jellyfin 发布即可。

发布后就可以通过 Traefik Hub 的 URL 来访问了:

🎉🎉🎉

Traefik Hub 安装过程中遇到的问题

Helm 安装 Traefik Proxy 失败

安装碰到的第一个问题是执行该命令后,提示渲染后的 yaml 文件有问题

helm upgrade --install traefik traefik/traefik \
--namespace hub-agent --create-namespace \
--set=additionalArguments='{--experimental.hub,--hub}' \
--set metrics.prometheus.addRoutersLabels=true \
--set providers.kubernetesIngress.allowExternalNameServices=true \
--set ports.web=null --set ports.websecure=null --set ports.metrics.expose=true \
--set ports.traefikhub-tunl.port=9901 --set ports.traefikhub-tunl.expose=true --set ports.traefikhub-tunl.exposedPort=9901 --set ports.traefikhub-tunl.protocol="TCP" \
--set service.type="ClusterIP" --set fullnameOverride=traefik-hub

解决办法是用:helm template --debug 生成了一下,然后报错提示 Deployment 那边第 35 行语法有问题,发现渲染后的结果如下:

...
spec:
  template:
    spec:
    - name: traefik:
...

结尾多了个: 出来,删除: 后,执行 kubectl apply -f 即可成功安装。

发布的所有服务访问都报错 404

碰到的第二个问题,是发布的所有服务访问都报错 404. 没有正常进行转发和跳转。

个人认为应该是请求转到到 Traefik Proxy 后,Traefik Proxy 没有正常处理导致的。

解决办法:

查看 Traefik Proxy 的日志,发现有大量如下报错:

E0918 13:01:08.566076       1 reflector.go:138] k8s.io/client-go@v0.22.1/tools/cache/reflector.go:167: Failed to watch *v1alpha1.ServersTransport: failed to list *v1alpha1.ServersTransport: serverstransports.traefik.containo.us is forbidden: User "system:serviceaccount:hub-agent:traefik-hub" cannot list resource "serverstransports" in API group "traefik.containo.us" at the cluster scope

查看对应的 traefik-hub ClusterRole 权限,发现确实少了相应权限,修改 ClusterRole 添加相应权限即可:

...
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ''
    resources:
      - services
      - endpoints
      - secrets
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - extensions
      - networking.k8s.io
    resources:
      - ingresses
      - ingressclasses
  - verbs:
      - update
    apiGroups:
      - extensions
      - networking.k8s.io
    resources:
      - ingresses/status
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - traefik.containo.us
    resources:
      - ingressroutes
      - ingressroutetcps
      - ingressrouteudps
      - middlewares
      - tlsoptions
      - tlsstores
      - traefikservices
      - serverstransports
...

配置完成后即可正常访问。

总结

Traefik 近期新出了一个叫做 Traefik Hub 的边缘网关 SaaS 服务,很有意思。可以很轻松地把家里位于 nat 后面的 IP 地址和服务暴露出来。今天刚试了下把 NAS UI 和 Jellyfin 暴露出来,效果不错。

屏蔽了复杂的 tunnel、vpn、tcpoverudp、ssl、dns、域名。.., 将边缘网关的发布和加密:简单化、标准化。

  • 简单在于就做 2 件事: 发布和安全加固。
  • 标准在于架构的统一:

Traefik Hub Diagram

👍️👍️👍️.

📚️参考文档

本文由 东风微鸣技术博客 编写

  • 资源共享, 天下为公
  • 三人行, 必有我师焉

与通过 Traefik Hub 暴露家里的网络服务相似的内容:

通过 Traefik Hub 暴露家里的网络服务

Traefik Hub 简介 📚️Reference: 你的云原生网络平台 -- 发布和加固你的容器从未如此简单。 Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一个网关。 Traefik Hub 定位: 云原生网络平台 它有 2 大核心功能,我这次体验感觉也

Rancher 系列文章-K3s Traefik MiddleWare 报错-Failed to create middleware keys

概述 书接上回:《Rancher 系列文章-K3S 集群升级》, 我们提到:通过一键脚本升级 K3S 集群有报错。 接下来开始进行 Traefik 报错的分析和修复, 问题是: 所有 Traefik 的 IngressRoute 访问报错 404 问题描述 报错如下: time="2022-05-0

[转帖]Traefik中诡异的502和504问题

https://zhuanlan.zhihu.com/p/156138704 我们都知道在 Kubernetes 集群中通常会使用 Ingress 方案来统一代理集群内部的流量,而常用的 Ingress 方案为 traefik 和 nginx,和传统的 Nginx 作为企业内部的反向代理以及负载设备

Java智能之Spring AI:5分钟打造智能聊天模型的利器

通过本文的介绍,我们深入了解了Spring AI项目的优势和特性,以及在实际应用中的快速实战示例。Spring AI作为一个高度抽象化的人工智能应用程序开发框架,为开发者提供了便捷的模型支持、灵活的功能模块交换和优化能力。它不仅能将AI模型输出映射为POJO,还能与主流矢量数据库提供商无缝集成,从而...

Simple WPF: WPF自定义一个可以定义步长的SpinBox

通过WPF的按钮、文本输入框实现了一个简单的SpinBox数字输入用户组件并可以通过数据绑定数值和步长。本文中介绍了通过Xaml代码实现自定义组件的布局,依赖属性的定义和使用等知识点。

金仓数据库全攻略:简化部署,优化管理的全流程指南

通过本篇文章的学习和实践,我们深入了解了如何利用Docker技术快速部署KingbaseES数据库。从下载镜像到编写Docker Compose模板,再到容器的启动和管理,每一步都体现了现代化部署方式的便捷和高效。此外,我们还掌握了KSQL命令行工具的使用,这将极大地提升开发人员与数据库交互的效率。

SVG 标签的用法和应用场景

通过使用 标签,可以在 SVG 图像内部定义可重复使用的任意图案。这些图案可以通过 fill 属性或 stroke 属性进行引用。 使用场景 例如我们要在 中绘制大量的圆点点,可以通过重复使用 标签来实现。

5分钟带你了解RabbitMQ的(普通/镜像)集群

通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。因此,在选择集群方案时,...

腾讯云 BI 数据分析与可视化的快速入门指南

通过本文的介绍,我们了解了腾讯云 BI 这款商业智能解决方案的基本功能和应用场景。从创建项目、连接数据源、数据表建模到页面搭建和推送功能的设置,我们通过一个互联网运营看板的案例,展示了如何快速入门并利用腾讯云 BI 进行数据分析和可视化。通过简单的数据编辑,我们可以轻松地设计报表,并实现数据的可视化...

赛博斗地主——使用大语言模型扮演Agent智能体玩牌类游戏。

通过大模型来实现多个智能体进行游戏对局这个想对已经比较成熟了无论是去年惊艳的斯坦福小镇还是比如metaGPT或者类似的框架都是使用智能体技术让大模型来操控,从而让大模型跳出自身“预测下一个token”的文字功能去探索更多的应用落地可能性。不过一直没有真正操作过,直到前段时间看到一个新闻《和GPT-4