- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
终于到了令人启动的环节了:Nomad+Traefik+Tailscale 集成实现零信任安全.
在这里:
Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易.
Traefik 可以与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS、Nomad…)集成,并自动和动态地配置自己.
2023 年 5 月初,Hashicorp 发布了 Nomad 1.3 版本 。在此版本之前,当与 Nomad 一起使用服务发现时,Traefik Proxy 用户必须同时使用 Hashicorp Consul 和 Nomad,以便从 Traefik Proxy 著名的自动配置中获益。现在,Nomad 有了一种简单直接的方法来使用内置的服务发现。这大大提高了直接可用性!不仅在简单的测试环境中,而且在边缘环境中.
从 Traefik Proxy 3.0 Beta 1 发布开始,Traefik Proxy 支持 Tailscale。当 Traefik 收到对 *.ts.net 站点的 HTTPS 请求时,它会从机器的本地 Tailscale 守护进程(实际是 Tailscale 的 socket) 获取 HTTPS 证书。并且证书不需要配置.
在这次集成中,我们使用 Traefik 作为 Nomad 集群中工作负载的 HTTP 反向代理和负载均衡,并通过 Nomad Native Service 和 Nomad 集成,通过 Traefik Resolver 与 Tailscale 集成.
Tailscale 是一种 V(irtual)P(rivate)N(etwork) 服务,可以让您在世界任何地方安全、轻松地访问您拥有的设备和应用程序。它使用开源 WireGuard 协议实现加密的点对点连接,这意味着只有您的专用网络上的设备才能相互通信.
Tailscale 快速可靠。与传统的 V(irtual)P(rivate)N(etwork) 不同,传统的通过中央网关服务器隧道传输所有网络流量,Tailscale 则是创建了一个对等 full-mesh 网状网络(称为 tailnet). 。
Tailscale 提供了一系列的额外实用功能,如:
http://raspberry
或 http://raspberry.west-beta.ts.net
raspberry.west-beta.ts.net
提供授信证书。可以通过 https://raspberry.west-beta.ts.net
访问且浏览器显示安全的绿锁🔒标志。 默认情况下,Tailscale 节点之间的 (4 层)连接通过端到端加密来保护。然而,浏览器,Web API 和 Visual Studio Code 等产品并不知道这一点,并且可以根据以下事实警告用户或禁用功能:到您的尾网服务的 HTTP URL 看起来未加密,因为它们没有使用 TLS 证书.
而 Tailscale 在启用了:
后,便可以为每台 Tailscale 机器自动或手动生成证书。证书对应的域名如下:
在这次集成中,我们使用 Tailscale 实现跨地域联通,4 层加密以及提供 HTTPS 证书。跨地域联通需要在 Nomad 上进行相关设置;4 层加密为默认提供的;HTTPS 证书则需要分别在 Nomad 以及 Traefik 上进行相关设置.
tailscale0
system
类型 job 的方式在 Nomad 上通过 Docker 运行。并与 Tailscale 和 Nomad 集成。 在每台机器上,运行以下命令安装:
curl -fsSL https://tailscale.com/install.sh | sh
更多安装方式,请参见: Traefik Nomad Service Discovery Routing - Traefik 。
这里不做详细介绍.
sudo tailscale up
并登录 Tailscale. 。
Nomad Client 需要进行如下配置调整,以方便后续和 Tailscale 及 Traefik 集成:
tailscale0
, 使用 Tailscale 网络进行东西向通信。 修改 /etc/nomad.d/nomoad.hcl 的 client 块配置,具体配置如下:
data_dir = "/opt/nomad/data"
bind_addr = "0.0.0.0"
client {
enabled = true
servers = ["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 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 = true
source = "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
admin
Traefik 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.sock
path driver = "docker"
: Traefik 实际在 Docker 中运行 volume_mount {
: volume mount 配置:
destination = "/var/run/tailscale/tailscaled.sock"
: 将 Tailscale Socket 挂载到容器内 /var/run/tailscale/tailscaled.sock
path. 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 的集成。🎉🎉🎉 。
首先,打开 Traefik Dashboard - http://100.99.99.99 , 效果如下:
从上图可以看到:
3.0.0-beta3
Nomad
集成,Providers 显示为 Nomad. 我们基于 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(...)
创建 hashicups
router. 并指定域名,这里我指定了我的一台 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 是 tailscaleresolver 。
△ 可以看到,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 集成实现零信任安全.
在这里:
具体来说,在这次集成中:
并且,这套方案也特别适合边缘 Edge 环境:
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写. 。
最后此篇关于Nomad系列-Nomad+Traefik+Tailscale集成实现零信任安全的文章就讲到这里了,如果你想了解更多关于Nomad系列-Nomad+Traefik+Tailscale集成实现零信任安全的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Windows 集成 (NTLM) 身份验证和 Windows 集成 (Kerberos) 之间有什么区别? 如何在IIS6中实现这些 w.r.t. MSDN 最佳答案 Kerberos 和 NTLM
Keycloak是一个用 Java 编写的开源身份验证和身份管理解决方案。它提供了一个nodejs适配器,使用它我能够成功地与express集成。这是有效的路由文件: 'use strict'
这是我关于 Bamboo 的第二个问题 ( My First One )。阅读建议信息后我的理解是,我需要一个构建工具,例如 nAnt 或 MSbuild 来编写一个获取源代码并构建它的脚本(我正在开
可用于将第三方应用程序与 jira 4.3 集成的身份验证方案有哪些?显然,从客户那里获取用户名和密码听起来很荒谬。另外,我知道 oauth 身份验证仅适用于版本 5。请告诉我。谢谢。 附注。我不是在
我有一个使用 DDS 的旧版 C++ 应用程序用于异步通信/消息传递。我需要将此应用程序集成到使用 JMS 进行消息传递的 JavaEE 环境中。除了构建独立的 JMS/DDS 桥接模块之外,我还有其
我正在尝试使用 Whatsapp 发送测试消息,但收到此错误消息: "error":{"code":27,"description":"Recipient not available on chann
我想将 photologue 与我的 Django 应用程序集成,并使用它在车辆库存中显示照片......有点像 Boost Motor Group Inc. 提供的内容。我已经集成了该应用程序,所以
我目前正在尝试弄清楚如何与 fujitsu scansnap 扫描仪集成,但没有从 fujitsu 找到有关 fujitsu scansnap 管理器如何调用您的应用程序并将文件发送到您的应用程序的详
在我的项目中,我使用了 9 个(九个)int-ip:udp-inbound-channel-adapter 和一个 jms:inbound-channel-adapter。 Jms 适配器从服务器接收
在我们当前的原型(prototype)中,大多数标准 HTML 控件都被小程序取代,最重要的是表单提交由小程序触发。 有没有一种方法可以像 一样在服务器端调用关联的操作 ? 本文Applet and
是否可以使用 twilio 号码从 whatsapp 发送/接收短信?有人用whatsapp试过twilio吗?我问过客服,如果可能的话,他说,不确定,但很多人都问过这个问题。 最佳答案 万一其他人来
我们办公室中几乎不存在版本控制,这显然导致了很多麻烦。我们想使用SVN和Notepad++进行设置...任何人都对如何实现此目标有任何想法?我已经开始研究并浏览了这个网站: http://www.sw
曾经有提供这种集成的 spring-modules 项目;但是,该项目现已弃用。现在有没有人继续支持这种集成?谢谢。 最佳答案 工作正在进行中。 http://blog.athico.com/sear
我的理解是,根据 http://wiki.dbpedia.org/Datasets,DBpedia 从 YAGO 获取类层次结构,而不是实体。 .但是,类似 http://dbpedia.org/cl
任何人都可以帮助我如何将 OpenCMS 与 Java Spring Web 应用程序集成。已经用谷歌搜索并浏览了很多网站但没有用。所以,请帮助我。 最佳答案 我认为将 SpringMVC 与 Ope
我正在尝试使用新的 migs getaway (MPGS) 我遵循了下一个 url 中的代码 https://ap-gateway.mastercard.com/api/documentation/i
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我有一个 cmake 项目。我想轻松完成以下操作 搜索光标下任何变量、函数等的声明、定义和引用,这些可能在外部头文件中声明,其路径是在CMakeLists.txt中使用INCLUDE_DIRECTOR
有人能给我指点一下 Objective-C(或 c/c++)库的方向,或者教通过 FTP 上传或下载的教程(Objective-C)吗?最好能展示如何将文件下载到临时目录,然后稍后上传?我不介意针对
集成()给出了非常错误的答案: integrate(function (x) dnorm(x, -5, 0.07), -Inf, Inf, subdivisions = 10000L) # 2.127
我是一名优秀的程序员,十分优秀!