Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
系列文章
- Nomad 系列文章
- Traefik 系列文章
- Tailscale 系列文章
概述
终于到了令人启动的环节了:Nomad+Traefik+Tailscale 集成实现零信任安全。
在这里:
- Nomad 负责容器调度;(容器编排工具)
- Traefik 负责入口流量;(Ingress 工具)
- Tailscale 实现跨地域联通,4 层加密以及提供 HTTPS 证书。
Traefik 简介
Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易。
Traefik 可以与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS、Nomad…)集成,并自动和动态地配置自己。
Traefik 与 Nomad Native Service 集成
2023 年 5 月初,Hashicorp 发布了 Nomad 1.3 版本。在此版本之前,当与 Nomad 一起使用服务发现时,Traefik Proxy 用户必须同时使用 Hashicorp Consul 和 Nomad,以便从 Traefik Proxy 著名的自动配置中获益。现在,Nomad 有了一种简单直接的方法来使用内置的服务发现。这大大提高了直接可用性!不仅在简单的测试环境中,而且在边缘环境中。
Traefik 与 Tailscale 集成
从 Traefik Proxy 3.0 Beta 1 发布开始,Traefik Proxy 支持 Tailscale。当 Traefik 收到对 *.ts.net 站点的 HTTPS 请求时,它会从机器的本地 Tailscale 守护进程(实际是 Tailscale 的 socket) 获取 HTTPS 证书。并且证书不需要配置。
Traefik 小结
在这次集成中,我们使用 Traefik 作为 Nomad 集群中工作负载的 HTTP 反向代理和负载均衡,并通过 Nomad Native Service 和 Nomad 集成,通过 Traefik Resolver 与 Tailscale 集成。
Tailscale 简介
Tailscale 是一种 V(irtual)P(rivate)N(etwork) 服务,可以让您在世界任何地方安全、轻松地访问您拥有的设备和应用程序。它使用开源 WireGuard 协议实现加密的点对点连接,这意味着只有您的专用网络上的设备才能相互通信。
Tailscale 快速可靠。与传统的 V(irtual)P(rivate)N(etwork) 不同,传统的通过中央网关服务器隧道传输所有网络流量,Tailscale 则是创建了一个对等 full-mesh 网状网络(称为 tailnet).
Tailscale 提供了一系列的额外实用功能,如:
- MagicDNS: 使用短主机名作为域名直接访问设备。如:http://raspberry或http://raspberry.west-beta.ts.net
- HTTPS 证书: 允许用户为其设备提供 TLS 证书。如上面的:raspberry.west-beta.ts.net提供授信证书。可以通过https://raspberry.west-beta.ts.net访问且浏览器显示安全的绿锁🔒标志。
默认情况下,Tailscale 节点之间的 (4 层)连接通过端到端加密来保护。然而,浏览器,Web API 和 Visual Studio Code 等产品并不知道这一点,并且可以根据以下事实警告用户或禁用功能:到您的尾网服务的 HTTP URL 看起来未加密,因为它们没有使用 TLS 证书。
而 Tailscale 在启用了:
- tailnet name
- MagicDNS
- HTTPS 证书
后,便可以为每台 Tailscale 机器自动或手动生成证书。证书对应的域名如下:

在这次集成中,我们使用 Tailscale 实现跨地域联通,4 层加密以及提供 HTTPS 证书。跨地域联通需要在 Nomad 上进行相关设置;4 层加密为默认提供的;HTTPS 证书则需要分别在 Nomad 以及 Traefik 上进行相关设置。
Nomad+Traefik+Tailscale 集成具体方案
- Tailscale 在多个相同或不同区域 Linux Node 上通过软件源安装;通过 systemd 启动;
- Nomad 安装在这些 Linux Node 上,并指定网卡为 Tailscale 对应网卡 - tailscale0
- Traefik 以 system类型 job 的方式在 Nomad 上通过 Docker 运行。并与 Tailscale 和 Nomad 集成。
Nomad+Traefik+Tailscale 集成实施步骤
前提
- 多台(最好在不同区域)的 Linux Node(本例中是 Ubuntu Node)
- 这些 Linux Node 最好 Hostname 各不相同
- Nomad 前提: - Docker 已安装
- Nomad 已安装(版本≥1.3, 越新越好)
- Nomad 集群已创建并运行(至少包括 1 个 Server 和 1 个 Client)
 
- Tailscale 前提: - 已创建 Tailscale 账号
- Tailscale 版本大于等于 1.14(越新越好)
- MagicDNS 功能已启用
- HTTPS 证书功能已启用
 
- Traefik 前提: - Traefik Proxy 版本 ≥ 3.0 Beta 1
 
安装并运行 Tailscale
在每台机器上,运行以下命令安装:
curl -fsSL https://tailscale.com/install.sh | sh更多安装方式,请参见:Traefik Nomad Service Discovery Routing - Traefik
这里不做详细介绍。
sudo tailscale up并登录 Tailscale.
Nomad Client 配置调整
Nomad Client 需要进行如下配置调整,以方便后续和 Tailscale 及 Traefik 集成:
- 配置 Tailscale Socket 作为 Nomad Host Volume(供 Docker 中的 Traefik 和 Tailscale 通信)
- 配置网卡为 tailscale0, 使用 Tailscale 网络进行东西向通信。
修改 /etc/nomad.d/nomoad.hcl 的 client 块配置,具体配置如下:
data_dir  = "/opt/nomad/data"
bind_addr = "0.0.0.0"client {enabled = trueservers = ["100.99.99.99"]network_interface = "tailscale0"host_volume "tailscale-socket" {path      = "/run/tailscale/tailscaled.sock"read_only = true}
}具体说明如下:
- servers = ["100.99.99.99"]: 指定 servers ip 列表为对应的 Servers 的 Tailscale IP 地址。后续该地址都要根据您的实际情况替换为 Nomad Server 的一个地址或所有地址列表。
- network_interface = "tailscale0": 指定要强制进行网络指纹识别的接口的名称。在开发模式下运行时,默认为环回接口。不处于开发模式时,将使用连接到默认路由的接口。调度程序在为任务分配端口时从这些指纹 IP 地址中进行选择。这里指定 Nomad 使用 Tailscale 隧道网卡- tailscale0作为网络指纹识别的接口。
- host_volume "tailscale-socket" {: 如 前一篇文章 所述,配置 Nomad Host Volume- path = "/run/tailscale/tailscaled.sock": Tailscale Socket Host Path.
- read_only = true: 只读。
 
运行 Traefik Job
Traefik Job HCL - traefik.hcl 具体如下:
job "traefik" {datacenters = ["dc1"]type        = "system"group "traefik" {network {port  "http"{static = 80}port "https" {static = 443}port  "admin"{static = 8080}}service {name = "traefik-http"provider = "nomad"port = "http"}service {name = "traefik-https"provider = "nomad"port = "https"}volume "tailscale-socket" {type      = "host"read_only = truesource    = "tailscale-socket"}task "server" {driver = "docker"volume_mount {volume           = "tailscale-socket"destination      = "/var/run/tailscale/tailscaled.sock"read_only        = true}config {image = "traefik:v3.0"ports = ["admin", "http", "https"]args = ["--api.dashboard=true","--api.insecure=true", ### For Test only, please do not use that in production"--entrypoints.web.address=:${NOMAD_PORT_http}","--entryPoints.websecure.address=:${NOMAD_PORT_https}",  "--entrypoints.traefik.address=:${NOMAD_PORT_admin}","--providers.nomad=true","--providers.nomad.endpoint.address=http://100.99.99.99:4646", ### Tailscale IP to your nomad server "--certificatesresolvers.tailscaleresolver.tailscale=true"]}}}
}详细说明如下:
- type = "system": 数据中心和节点池中的每个客户端都获得分配。类似于 K8s 的 Daemonset.
- network {}Network 块,这里指定了 3 个静态端口(类似于 K8s 中的 HostSubnet), 即容器内和主机都监听:- http端口- 80
- https端口- 443
- adminTraefik admin 端口- 8080(因为底层是 Tailscale, 所以其实 HTTP 也是在 4 层透明加密过的)
 
- service {}2 个 Service 块,都是 Nomad Native Service. 分别是:- traefik-http服务:指向- http端口 -- 80
- traefik-https服务:指向- https端口 -- 443
 
- volume "tailscale-socket" {通过 Nomad Host Volume 声明 Tailscale Socket- type = "host": Volume 类型为 Nomad Host Volume
- read_only = true: Volume 级别 read_only 配置
- source: source 指向 Nomad Client 的- tailscale-socket, 即:- /run/tailscale/tailscaled.sockpath
 
- driver = "docker": Traefik 实际在 Docker 中运行
- volume_mount {: volume mount 配置:- destination = "/var/run/tailscale/tailscaled.sock": 将 Tailscale Socket 挂载到容器内- /var/run/tailscale/tailscaled.sockpath.
 
- config {docker 配置块。- image = "traefik:v3.0": 指定 traefik 镜像为:- traefik:v3.0
- ports = ["admin", "http", "https"]: 对外暴露的端口为:80, 443, 8080
- args [: traefik 启动参数- "--api.dashboard=true": 启动 Traefik Dashboard
- "--api.insecure=true": 仅供测试使用,请勿在生产环境中使用
- "--entrypoints.web.address=:${NOMAD_PORT_http}": 指定 Traefik 的 web 端口为:- NOMAD_PORT_http环境变量,即:- 80. 地址为:- :80(监听全部地址)
- "--entryPoints.websecure.address=:${NOMAD_PORT_https}": 指定 Traefik 的 websecure 地址为:- :443
- "--entrypoints.traefik.address=:${NOMAD_PORT_admin}": 指定 Traefik 的 traefik 地址为:- :8080
- "--providers.nomad=true": 启用 Traefik 与 Nomad 集成
- "--providers.nomad.endpoint.address=http://100.99.99.99:4646": 指定 Nomad Server 地址
- "--certificatesresolvers.tailscaleresolver.tailscale=true": 启用 Traefik 与 Tailscale 集成。创建一个 Traefik Resolver 名为:- tailscaleresolver, 且和 Tailscale 集成。
 
 
运行该 Job:
nomad run traefik.hcl则 Traefik 会部署到 Nomad 所有的 Client 上。
至此,我们完成了 Nomad+Traefik+Tailscale 的集成。🎉🎉🎉
验证 Nomad+Traefik+Tailscale 效果
通过 Traefik Dashboard 验证
首先,打开 Traefik Dashboard - http://100.99.99.99, 效果如下:

从上图可以看到:
- Traefik 的版本是 3.0 Beta 1 以上,实际为:3.0.0-beta3
- Traefik 监听的端口为:80, 443 和 8080
- Traefik 已经和 Nomad集成,Providers 显示为 Nomad.
创建 Nomad Service 验证
我们基于 HashiCorp Nomad 官方提供的另一个 Demo 程序:HashiCups 来进行配置调整:
git clone https://github.com/hashicorp/learn-nomad-sd.git
cd learn-nomad-sd
git checkout tags/v0.1 -b nomad-hashicups-sd修改 hashicups.hcl 的以下内容:(内容有省略)
...
job "hashicups" {type   = "service"...group "nginx" {network {port "nginx" {to = var.nginx_port}}task "nginx" {driver = "docker"service {name = "nginx"provider = "nomad"port = "nginx"tags = ["traefik.http.routers.hashicups.rule=Host(`firefly-sub03.west-beta.ts.net`)","traefik.http.routers.hashicups.tls.certResolver=tailscaleresolver"]}...}}
}具体说明如下:
- to = var.nginx_port: 🐾注意,这里要从- static改为- to, 避免 Host 端口冲突。Host 端口会随机分配一个端口。
- service {: service 块,这里- provider = "nomad", Traefik 会通过 Nomad Server API 获取 Nomad Native Service, 并通过- tags获取具体路由配置。
tags = ["traefik.http.routers.hashicups.rule=Host(`firefly-sub03.west-beta.ts.net`)","traefik.http.routers.hashicups.tls.certResolver=tailscaleresolver"
]这里是 Traefik 的配置风格,Traefik 和 Nomad 集成时,Nomad tags 的配置和 Traefik docker 集成的配置风格是一模一样的。
- traefik.http.routers.hashicups.rule=Host(...)创建- hashicupsrouter. 并指定域名,这里我指定了我的一台 Nomad Client Node 的 Tailscale 完整域名:- firefly-sub03.west-beta.ts.net. 其中- .west-beta.ts.net是我的专属域,如果您要配置,请根据从 Tailscale Admin Console 获取到的域自行调整。- firefly-sub03是我的一台 Linux Node 的 hostname, 显然,这台 Node 上安装了:nomad client, tailscale, traefik.
- "traefik.http.routers.hashicups.tls.certResolver=tailscaleresolver"指定该 router 的 HTTP 证书解析方名称为:- tailscaleresolver, 即 tailscale.
效果如下:
在 Traefik Dashboard 上展示如下:
 △ 可以看到,通过 http://firefly-sub03.west-beta.ts.net/ 或 https://firefly-sub03.west-beta.ts.net/ 都可以访问到 Nomad 的 nginx service. 并且 TLS 启用,且 Resolver 是
 △ 可以看到,通过 http://firefly-sub03.west-beta.ts.net/ 或 https://firefly-sub03.west-beta.ts.net/ 都可以访问到 Nomad 的 nginx service. 并且 TLS 启用,且 Resolver 是tailscaleresolver
 △ 可以看到,Nomad 为 nginx service 自动分配的地址是:
 △ 可以看到,Nomad 为 nginx service 自动分配的地址是:http://100.74.143.10:25061 端口是一个随机端口 (我这里 Nomad 网络使用 host 模式,而不是 bridge 模式)
直接通过 TS 内网访问 https://firefly-sub03.west-beta.ts.net/ 如下:

△可以看到,通过域名可以访问到 Hashicups, 并且该域名的 HTTPS 证书也是受信的。
🎉🎉🎉
总结
本文我们通过 Nomad+Traefik+Tailscale 集成实现零信任安全。
在这里:
- Nomad 负责容器调度;(容器编排工具)
- Traefik 负责入口流量;(Ingress 工具)
- Tailscale 实现跨地域联通,4 层加密以及提供 HTTPS 证书。
具体来说,在这次集成中:
- 使用 Traefik 作为 Nomad 集群中工作负载的 HTTP 反向代理和负载均衡,并通过 Nomad Native Service 和 Nomad 集成,通过 Traefik Resolver 与 Tailscale 集成。
- 使用 Tailscale 实现跨地域联通,4 层加密以及提供 HTTPS 证书。 - 跨地域联通需要在 Nomad 上进行相关设置;
- 4 层加密为默认提供的;
- HTTPS 证书则需要分别在 Nomad 以及 Traefik 上进行相关设置。
 
并且,这套方案也特别适合边缘 Edge 环境:
- Nomad 为边缘集群提供了简单轻量的(容器)编排服务
- Traefik 为边缘集群提供了 4 层 和 7 层的 负载均衡以及 7 层的 HTTP 代理服务
- Tailscale 为边缘集群的"云" "边" "端" 提供了隧道打通,实现网络连接和边缘网络加密。并自动为 HTTPS 提供受信证书。
📚️参考文档
- Traefik Proxy Integrates with Hashicorp Nomad | Traefik Labs
- Traefik Nomad Service Discovery Routing - Traefik
- Load Balancing with Traefik | Nomad | HashiCorp Developer
- Traefik Proxy Integrates with Hashicorp Nomad | Traefik Labs
- Traefik Tailscale Documentation - Traefik
- Download · Tailscale
- Integrations · Tailscale
- Traefik certificates on Tailscale · Tailscale
- Deploy an App with Nomad Service Discovery | Nomad | HashiCorp Developer
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
相关文章:
 
Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
系列文章 Nomad 系列文章Traefik 系列文章Tailscale 系列文章 概述 终于到了令人启动的环节了:NomadTraefikTailscale 集成实现零信任安全。 在这里: Nomad 负责容器调度;(容器编排工具)Traefik 负责入口流量&…...
 
(二十一)大数据实战——Flume数据采集之复制和多路复用案例实战
前言 本节内容我们完成Flume数据采集的一个多路复用案例,使用三台服务器,一台服务器负责采集本地日志数据,通过使用Replicating ChannelSelector选择器,将采集到的数据分发到另外俩台服务器,一台服务器将数据存储到hd…...
 
VM安装RedHat7虚机ens33网络不显示IP问题解决
1、今天在VMware中安装RedHat7.4虚拟机,网络连接使用的是 NAT 连接方式,刚开始安装成功之后输入ifconfig 还能看到ens33自动分配的IP地址,但是当虚机关机重启后,再查看IP发现原来的ens33网络已经没有了,只变成了这两个…...
Leetcode 第 362 场周赛题解
Leetcode 第 362 场周赛题解 Leetcode 第 362 场周赛题解题目1:2848. 与车相交的点思路代码复杂度分析 题目2:2849. 判断能否在给定时间到达单元格思路代码复杂度分析 题目3:2850. 将石头分散到网格图的最少移动次数思路代码复杂度分析 题目4…...
蓝桥杯官网练习题(0的个数)
问题描述 给定一个正整数 n ,请问 n 的十进制表示中末尾总共有几个 0 ? 输入格式 输入一行包含一个正整数 n。 输出格式 输出一个整数,表示答案。 样例输入 20220000样例输出 4评测用例规模与约定 对于所有评测用例,1 &l…...
计算线段上距离线段外某一点最近的点
一、问题 已知 p 0 = ( x 0 , y 0 ) p_0=(x_0, y_0) p...
 
港联证券股票分析:经济拐点显现 积极提升仓位
港联证券指出,商场底部上升的方向不变,当时稳增加和活跃资本商场的活跃方针仍在持续落地,一起也看到了一些经济数据边沿企稳的迹象,跟着方针作用的进一步闪现,商场情绪有望持续好转,上市公司基本面也有望得…...
不同的图像质量评价指标(IQA)
一、NR-IQA 这是一种方法不是指标 “Non-Reference Image Quality Assessment”(NR-IQA)是一种图像质量评价(Image Quality Assessment, IQA)方法,通常用于评估图像的质量,而无需使用参考图像(…...
linux命令-tar 命令
tar 命令 tar 命令一般用来打包文件 ,文件夹 , 方便传输使用. tar命令是在Linux和UNIX系统上用于创建、查看和提取tar归档文件的工具。它通常与gzip一起使用,以便在创建归档文件时进行压缩或解压缩。 -c: 创建归档文件 -x: 提取文件 -z: 告诉 tar 命令使用 gzip …...
 
selenium元素定位---ElementClickInterceptedException(元素点击交互异常)解决方法
1、异常原因 在编写ui自动化时,执行报错元素无法点击:ElementClickInterceptedException 具体报错:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span class"el-c…...
05_css选择器的使用
一、css选择器的类型 1、标签选择器 用法:直接写 写标签名:标签名{} 示例: <!-- <!DOCTYPE html --> <html><head><meta charset"utf-8"><title>标签选择器</title><style type"te…...
跨平台游戏引擎 Axmol-2.0.0 正式发布
下载 https://github.com/axmolengine/axmol/releases/tag/v2.0.0 更新日志 添加实验性的 WebAssembly 构建支持(WebGL 2.0),由 nowasm 贡献 已知问题 WebGL context lost 尚未处理 部署在 github pages 的 demo 可快速预览,注意:由于 Git…...
面试总结归纳
面试总结 注:循序渐进,由点到面,从技术点的理解到项目中的使用,  要让面试官知道,我所知道的要比面试官更多 一、Mybatis 为ORM半持久层框架,它封装了JDBC,开发时只需要关注sql语句就可以了…...
 
【刷题篇】贪心算法(一)
文章目录 分割平衡字符串买卖股票的最佳时机Ⅱ跳跃游戏钱币找零 分割平衡字符串 class Solution { public:int balancedStringSplit(string s) {int lens.size();int cnt0;int balance0;for(int i0;i<len;i){if(s[i]R){balance--;}else{balance;}if(balance0){cnt;}}return …...
从维基百科通过关键字爬取指定文本内容
通过输入搜索的关键字,和搜索页数范围,爬出指定文本内内容并存入到txt文档。代码逐行讲解。 使用re、res、BeautifulSoup包读取,代码已测,可以运行。txt文档内容不乱码。 import re import requests from bs4 import BeautifulS…...
 
pytorch代码实现之SAConv卷积
SAConv卷积 SAConv卷积模块是一种精度更高、速度更快的“即插即用”卷积,目前很多方法被提出用于降低模型冗余、加速模型推理速度,然而这些方法往往关注于消除不重要的滤波器或构建高效计算单元,反而忽略了特征内部的模式冗余。 原文地址&am…...
 
一文解析-通过实例讲解 Linux 内存泄漏检测方法
一、mtrace分析内存泄露 mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下,其基本设计原理为设计一个函数 void mtrace ()&#x…...
Spring Boot常用的参数验证技巧和使用方法
简介 Spring Boot是一个使用Java编写的开源框架,用于快速构建基于Spring的应用程序。在实际开发中,经常需要对输入参数进行验证,以确保数据的完整性和准确性。Spring Boot提供了多种方式来进行参数验证,并且可以很方便地集成到应…...
 
手机+卫星的科技狂想
最近硬件圈最火热的话题之一,应该就是突然上线、遥遥领先的华为Mate 60 Pro了。 其中,CPU和类5G网速是怎么实现的,是大家特别关注的问题。相比之下,卫星通话这个功能,讨论度就略低一些(没有说不火的意思&am…...
 
便捷查询中通快递,详细物流信息轻松获取
在如今快节奏的生活中,快递已成为人们生活中不可或缺的一部分。然而,快递查询却常常让人头疼,因为需要分别在不同的快递公司官网上进行查询,耗费时间和精力。为了解决这个问题,固乔科技推出了一款便捷的快递查询助手&a…...
 
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
 
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
 
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
 
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
 
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
 
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
 
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
