前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过 Traefik Hub 暴露家里的网络服务

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

作者头像
东风微鸣
发布2022-12-01 16:14:49
1.1K0
发布2022-12-01 16:14:49
举报

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.Agents2.Services3.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

👍️👍️👍️

📝Notes: 不过目前 Traefik Hub SaaS 服务是实验阶段,所以可以免费使用。 后续随时可能收费。..

References

[1] Traefik Hub, the Cloud Native Networking Platform: https://traefik.io/traefik-hub/ [2] Traefik Hub: Publish & Secure Applications | Traefik Labs: https://traefik.io/blog/publish-and-secure-applications-with-traefik-hub/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Traefik Hub 简介
    • Traefik Hub 主要功能
      • 发布
    • 安全加固
      • 可伸缩
        • Traefik Hub 工作原理
          • Traefik Hub 的关联功能
            • 🖱️一键服务发布
            • 🔒️加密隧道
            • 🎖️自动化证书管理
            • 🔑灵活地访问控制
            • 📺️集中化多集群管理仪表板
          • 技术细节
            • 支持的容器编排平台
            • 支持的 Ingress Controller
            • 内部技术
        • Traefik Hub 快速安装
          • 申请 Traefik Hub 账号
            • 连接一个新的 Agent
              • 在 K3s 上安装 Hub Agent 及相关组件
          • Traefik Hub 页面速览
          • 通过 Traefik Hub 暴露边缘服务
            • 暴露 Kubernetes 集群中的服务
              • 暴露边缘非 Kubernetes 服务
              • Traefik Hub 安装过程中遇到的问题
                • Helm 安装 Traefik Proxy 失败
                  • 发布的所有服务访问都报错 404
                  • 总结
                    • References
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档