使用 MinIO S3 和 Tailscale VPN 部署应用程序基础设施

在现代 IT 运营中,面向 IT 运营的人工智能 (AI-Ops) 正在通过使用高级算法自动执行任务来改变数据管理。MinIO 和 Tailscale 共同为应用层开发提供了安全、可扩展和有效的基础设施。Tailscale 凭借其基于 WireGuard 的覆盖 VPN 网络,提供端到端加密和与身份提供商的无缝集成,简化访问控制以安全管理连接。

MinIO 和 Tailscale 都是 Docker 和 Kubernetes 原生的。MinIO 是一款完美的 S3 兼容对象存储解决方案,可提供高性能、可扩展的系统,可无缝集成到云原生环境中。Tailscale 是一种理想的叠加网络解决方案,它使用其与基础设施无关的 VPN 服务来建立安全的零信任网络架构,使应用层开发变得简单且受到保护。

对于使用 MinIO 的 S3 兼容存储的组织,Tailscale 的网络隧道可确保从任何位置安全访问 MinIO 存储桶,从而在互联网上提供受保护的路径。Tailscale 的 VPN 服务具有更低的延迟和高可靠性,使其在安全连接不同环境方面特别有用。

在以下各节中,您将学习如何部署带有 Tailscale 的 MinIO 服务器,并将其作为 Docker 的 sidecar 运行。这种配置提供了灵活性,可以在您的专用网络中安全地为您的 MinIO 服务器提供服务,或通过 Tailscale Funnel 公开它。您将深入了解如何设置 Tailscale sidecar 以管理安全网络、配置 MinIO 以实现最佳对象存储,以及如何利用 Tailscale 的高级功能(如 Funnel)安全有效地路由流量,让您完全控制私有和公共访问。

Tailscale 的无缝集成

使用 Tailscale VPN 进行身份验证后,您可以生成不同的访问密钥,例如密钥 API 密钥或 OAuth 客户端 ID 和 Secret。在本演示中,我们将生成一个 OAuth 密钥。使用 OAuth 提供了更持久的授权,非常适合在我们的设置中联网 MinIO。这种方法可确保更稳定、更安全的连接,利用 OAuth 强大的身份验证框架来有效地管理访问。

Tailscale cert 命令有助于获取 TLS 证书,以通过 HTTPS 保护您的内部服务。以下是您需要了解的内容:

1 . 尾翼证书用法:尾翼证书命令用于获取尾网中特定域的 TLS 证书。但是,该命令要求服务作为 Tailscale 网络中的节点运行。要为 Docker 启用此功能,请确保您的 Tailscale 容器具有正确的权限,并使用 OAuth 客户端密钥或 API 密钥进行完全身份验证。然后,将通过 Let’s Encrypt CA 预配证书。

2 . OAuth 和标记:如果使用 OAuth 客户端密钥而不是 API 密钥,则必须正确标记容器以进行标识。这是使用环境变量设置的 TS_EXTRA_ARGS 。OAuth 方法支持尾部扩展的自动身份验证,允许容器获取其证书并在网络上运行。抑制你的兴奋:深入了解如何将 Tailscale 与 Docker 结合使用。

3 . 网络配置:由于我们使用的 network_mode: service 是 ,因此 Tailscale 容器应充当 sidecar,管理 MinIO 容器的流量。确保 MinIO 配置为使用 Tailscale 的 IP 范围,并且 TS_SERVE_CONFIG 指向正确的内部 IP 或 DNS 条目。将 Tailscale 与 Docker 配合使用 ·尾鳞文档。

通过确保您的 Tailscale 容器经过完全身份验证并正确配置,您应该能够通过 HTTPS 成功为 MinIO 提供服务。查看 Tailscale 的博客,了解有关正确设置 TLS 证书的更多详细信息 为内部 Tailscale 服务预配 TLS 证书。

我们在以下块中传达的目录结构代表了一种结构,我们可以在其中与服务进行交互,并查看各自目录中每个服务的相应数据

.
├── docker-compose.yaml
├── minio
│   └── data (MinIO’s Persistent Directory)
└── tailscale├── config│   └── minio.json (Tailscale Serve’s Configuration File)└── state (Tailscale’s Persistent Directory)

环境变量

使用导出设置环境变量涉及通过命令行分配 export VAR_NAME=“value” 值,以便可以在当前 shell 会话中访问它们。但是,这些变量通过 ps 或 docker 检查等检查命令以纯文本形式可见。为了保护敏感数据,请考虑使用安全的替代方案,例如加密保管库或机密管理服务,尤其是对于生产系统。

export TS_AUTHKEY=”<auth_or_oauth_key>”export MINIO_ROOT_USER=”<minio_root_user>”export MINIO_ROOT_PASSWORD=”<minio_root_password>”export TS_CERT_DOMAIN=”<tailnet-name>.ts.net”

为了保护敏感数据,请考虑使用安全的替代方案,例如加密保管库或机密管理服务,尤其是对于生产系统。

Docker Compose 设置

对于部署 MinIO 和 Tailscale,实用的 Docker Compose 设置对于了解服务配置的实现方式至关重要。

我们想要在 Docker Compose 中传达的基本概念是在 docker 网络的幌子下考虑我们的服务(通常是隔离的容器)。通过在 Docker Compose 文件中添加 network_mode: service:{name} 一个参数,我们可以指定 Tailscale 服务的主机名并将它们封装在一起。

下面是一个强调 Tailscale 集成和安全性的配置示例:

docker-compose.yaml

version: '3.8'
services:minio-ts:hostname: minio-tscontainer_name: minio-tsimage: tailscale/tailscale:latestenvironment:- TS_AUTHKEY=${TS_AUTHKEY}?ephemeral=false- TS_STATE_DIR=/var/lib/minio-ts- TS_SERVE_CONFIG=/config/minio-serve-config.json- TS_EXTRA_ARGS=--advertise-tags=tag:infra volumes:- /dev/net/tun:/dev/net/tun- ${PWD}/tailscale/state:/var/lib/tailscale- ${PWD}/tailscale/config:configcap_add:- net_admin- sys_modulerestart: unless-stoppedminio:image: minio/minio:latestcontainer_name: minioenvironment:- MINIO_ROOT_USER=${MINIO_ROOT_USER}- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}command: server /data --address ":9000" --console-address ":9001"volumes:- ${PWD}/minio/data:/datarestart: unless-stoppeddepends_on: minio-tsnetwork_mode: service:minio-tsvolumes:minio-ts:localminio:local

Docker Compose “network_mode” 参数

通过设置 network_mode: service:minio-ts ,我们可以有效地将容器放置在另一个容器的网络命名空间中,特别是 minio-ts 中命名的容器。这意味着容器将继承目标服务的网络堆栈,包括 IP 地址和端口设置。

在我们的示例中,minio 将共享 minio-ts 服务的网络堆栈,允许它通过 Tailscale 网络进行通信,而无需额外的网络配置。

使用 Tailscale 提供和漏斗 MinIO

Tailscale 的 Serve 和 Funnel 功能简化了与跨网络公开服务相关的传统复杂性。

  • Serve 允许在 Tailscale 网络中访问内部服务,从而简化您连接到开发服务器等资源的方式,而无需复杂的配置。

  • Funnel 将这种可访问性扩展到互联网,提供了一种安全的方式,可以在不直接暴露的情况下向外部公开服务,从而在 Tailscale 强大的安全措施下保护它们。

这种集成大大简化了操作,减少了对传统反向代理和手动 SSL 管理的需求,使网络管理更加安全和易于管理。

让我们用 Tailscale 加密

要为您的 MinIO 服务启用 Tailscale HTTPS 代理功能,tailscale cert 命令是必不可少的。它有助于通过 Let’s Encrypt 获取 TLS 证书,确保您的 MinIO 实例可以通过 HTTPS 安全访问。以下是您需要遵循的步骤:

管理控制台设置

在 Tailscale 管理控制台中,启用 HTTPS 证书并确保 MagicDNS 处于活动状态。这会将尾网的名称链接到证书 启用 HTTPS ·尾鳞文档。

要为 MinIO 生成 TLS 证书,tailscale cert 命令需要访问运行 Tailscale 的环境。但是,由于您的 MinIO 容器使用 network_mode: service:minio-ts ,它有效地共享 minio-ts 了容器的网络堆栈。

Docker Exec 进入 Tailscale 的服务

执行到 Tailscale 容器中

使用 Docker exec 命令访问 Tailscale 环境。这将允许您直接与容器中的 Tailscale CLI 进行交互。

执行以下命令,访问 Tailscale 容器:

docker exec -it minio-ts /bin/sh
生成证书

进入 Tailscale 容器后,使用 tailscale cert 命令为 MinIO 服务生成证书。请注意,主机名保持一致且不会更改,因为这可能会影响证书匹配 Tailscale + Fly + SSL - Tailscale。

要使用 tailscale 证书生成 TLS 证书,您需要在不使用通配符的情况下运行指定精确域名的命令。下面是一个示例命令:

tailscale cert <subdomain>.<service-hostname>.<your-tailnet.ts.net>

示例命令:

tailscale cert minio-ts.tailnet.ts.net

确保域名与尾网中的 DNS 名称匹配。

重要提示
  • TLS 证书:确保生成的证书随后由 MinIO 服务使用。

  • 权限:确保 Tailscale 服务具有通过 API 密钥或 OAuth 设置的适当权限来创建证书。

配置 MinIO 容器

在 TS_SERVE_CONFIG ( minio.json ) 中,确保代理设置与 MinIO 容器的内部端口(通常为 9000 或 9001)保持一致。确保 Tailscale 服务和 MinIO 通过网络正确链接。

Tailscale 使用示例 TS_SERVE_CONFIG JSON 文件中的 TS_CERT_DOMAIN 变量(称为“tailnet”)简化了网络配置,该变量可自动为由 Tailscale 的 HTTPS 代理功能管理的域颁发 TLS 证书。这消除了对 Nginx 等传统代理进行 SSL/TLS 终止的需求,从而简化了安全通信设置。

TS_SERVE_CONFIG

{"TCP": {"443": {"HTTPS": true}},"Web": {"minio.{TS_CERT_DOMAIN}:443": {"Handlers": {"/": {"Proxy": "http://127.0.0.1:9001"}}}},"AllowFunnel": {"minio.{TS_CERT_DOMAIN}:443": false}
}

上面提供 TS_SERVE_CONFIG 的文件有效地演示了如何配置 Tailscale 以通过 Tailscale 的安全网络基础设施通过 HTTPS 提供本地 Web 服务,例如 MinIO 实例。以下是 Tailscale Serve 配置的细分:

TCP 块

-本部分指示 TCP 端口 443(HTTPS 流量的标准)设置为处理 HTTPS 流量。此设置对于加密客户端和服务器之间传输的数据至关重要。

网页块
  • 该 “minio.{TS_CERT_DOMAIN}:443” 条目指定在端口 443 处对此域的请求将由其中定义的规则处理。

  • 该 “Handlers” 部分包含路径和相应的操作。在这里,根路径 (“/”) 配置为将请求代理到 http://127.0.0.1:9001 ,该请求应该是运行 MinIO 控制台服务的本地地址。此重定向允许 Tailscale 安全地公开本地服务,就好像它直接在指定域上运行一样。

AllowFunnel 块:
  • 此设置控制是否可以通过 Tailscale 的漏斗功能访问服务,该功能使本地服务在 Internet 上可用。该设置 “minio.{TS_CERT_DOMAIN}:443”: false 明确拒绝服务的 Internet 范围公开,将其限制为仅 Tailscale 网络访问。

  • 如果要公开向 Web 公开服务器,则设置为 “AllowFunnel” true 。

Tailscale Funnel 将本地服务的可访问性扩展到公共互联网,允许通过 Cloudflare 创建 DNS 记录,直接从您的硬件为 webhook 或 Web 应用程序等服务创建安全和加密的路径。Tailscale 配置中的 AllowFunnel 设置启用此功能,确保服务根据您的网络策略既可访问又安全。

漏斗的局限性

Tailscale Funnel 具有影响其使用的特定限制。

首先,DNS 名称仅限于尾网的域,这意味着每个节点只能通过 DNS 名称访问,例如 node-name.tailnet-name.ts.net .

其次,Funnel 只能侦听端口 443(标准 HTTPS)、8443 和 10000。第三,它专门通过 TLS 加密连接工作,确保通过 Funnel 路由的所有流量保持安全加密。

此外,通过 Funnel 路由的流量受带宽限制的约束,这些限制目前是不可配置的。最后,在 macOS 上,由于应用程序沙盒限制,文件和目录服务仅限于 Tailscale 的开源变体。有关 Tailscale Funnel 的限制和用法的更多详细信息,请参阅 Tailscale 的官方文档。

查看安全设置

必须始终仔细检查 Tailscale 的设置和 MinIO 的安全参数是否配置为符合您组织的安全标准。

有关在 Tailscale 中启用 HTTPS 证书的更多详细信息,请参阅官方文档为您的内部 Tailscale 服务预配 TLS 证书。

将 Tailscale 与 MinIO 集成可进一步增强您的数据安全性,确保对存储桶的每次访问都经过身份验证和加密,符合网络安全的最佳实践。

使用 Tailscale 实施 MinIO 可简化安全网络,但需要精确配置。Tailscale 的功能解决了跨团队实现一致访问、维护证书有效性以及平衡公共/私有公开等挑战:

  • Funnel 允许受控地公开服务,无需复杂的防火墙配置即可从 Internet 进行安全访问。

  • OAuth 集成提供统一的身份验证机制,确保跨团队和环境的一致访问控制。

  • API 密钥支持对 Tailscale 设置进行编程管理,自动执行证书续订等任务以保持有效性。

正确配置这些功能有助于确保 MinIO-Tailscale 设置的无缝集成和可靠运行。

最佳实践

认证

  • 使用 OAuth 密钥进行持久授权,以实现稳定的长期访问。

  • 通过安全保管库或机密管理系统管理敏感凭据,如 API 密钥和 OAuth 机密。

  • 定期轮换和更新凭据,以维护安全并防止未经授权的访问。

网络配置

  • 查看 Tailscale 的 IP 范围,并确保它与 MinIO 的网络设置保持一致,以实现正确的连接。

  • 维护TS_SERVE_CONFIG文件以高效、安全地处理流量路由。

  • 对 Tailscale 设备和子网使用有意义的标准化命名约定,以保持网络在扩展时井井有条且易于管理。

负载均衡

  • 实施 Tailscale 的访问控制规则,在节点之间有效地分配网络负载,确保可靠的性能。

  • 使用 Prometheus 或 Grafana 等工具监控网络流量和资源使用情况,以识别瓶颈并优化负载均衡设置。

  • 定期审查和调整负载均衡配置,以适应不断变化的使用模式并保持响应迅速的用户体验。

使用 Tailscale 的叠加网络

通过将 MinIO 的高性能、兼容 S3 的对象存储与 Tailscale 的安全零信任网络相结合,组织可以为其计划创建强大而灵活的基础。此设置使企业能够安全地管理和分析从本地数据中心到公有云平台等不同环境的运营数据。

MinIO 和 Tailscale 的无缝集成,以及它们的云原生架构和强大的功能集,使团队能够充分利用应用层运营的潜力。凭借简化的数据访问、对网络策略的精细控制以及内置的强大加密功能,该基础架构堆栈提供了支持最苛刻工作负载所需的性能、安全性和可扩展性。

随着对象存储的不断发展和成熟,MinIO-Tailscale 组合为创新提供了面向未来的基础。通过采用有关身份验证、网络配置和负载均衡的最佳实践,组织可以确保其基础架构在应对未来的挑战和机遇时保持可靠、高效和安全。

无论您是刚刚开始 AI 开发之旅,还是希望优化现有设置,使用 Tailscale 部署 MinIO 都是一个明智的选择。凭借正确的配置和对卓越运营的承诺,这个强大的二人组可以帮助您释放数据的全部价值,并在智能、自动化的 IT 运营时代推动成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小白专用 已验证24.6.18】C# SqlSugar操作MySQL数据库实现增删改查

【小白专用24.6.18】C# SqlSugar&#xff1a;连接数据库实现简单的&#xff0c;增、删、改、查-CSDN博客 SqlSugar .Net ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网 SqlSugar项目创建 通过NuGet包管理器搜索SqlSugar&#xff08;MySql还要安装MySql.Data、Newton…

Redis之商品缓存

文章目录 什么是缓存添加Redis缓存缓存更新策略缓存穿透缓存空对象布隆过滤器 缓存雪崩给不同的key的TTL添加随机值利用Redis集群提高服务的可用性给缓存业务添加降级限流策略给业务添加多级缓存 缓存击穿互斥锁逻辑过期 缓存工具封装方法1 写入redis方法2 设置逻辑过期方法3 解…

驱动开发(六):应用层通过文件系统与内核层交互

驱动开发相关文章: 驱动开发&#xff08;一&#xff09;&#xff1a;驱动代码的基本框架 驱动开发&#xff08;二&#xff09;&#xff1a;创建字符设备驱动 驱动开发&#xff08;三&#xff09;&#xff1a;内核层控制硬件层 驱动开发&#xff08;四&#xff09;&#xff…

借助TheGraph 查询ENS信息

关于ENS (以太坊域名服务) ENS 全称是 Ethereum Name Service,它是一个建立在以太坊区块链上的去中心化域名系统。 ENS 在 Web3 领域发挥着重要作用,主要有以下几个方面: 可读性更好的地址: ENS 允许用户将复杂的以太坊地址(如 0x12345…) 映射为更简单易记的域名。这极大地提…

中国车牌检测数据集VOC+YOLO格式2001张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2001 标注数量(xml文件个数)&#xff1a;2001 标注数量(txt文件个数)&#xff1a;2001 标注…

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统&#xff1f; 从严格意义上说&#xff0c;可将操作系统定义为一种软件&#xff0c;它控制计算机硬件资源&#xff0c;提供程序运行环境。我们通常将这种软件称为内核&#xff08;kerel)&#xff0c;因为它相对较小&#xff0c;而且位于环境的核心。 从广义上…

STM32介绍和资料地址

STM32标准外设软件库 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 支持标准外设库的产品系列&#xff1a;

XMLTomcatHttp协议

XML&Tomcat&Http协议 目录 XML&Tomcat&Http协议 1. xml解析(了解) 1.1 配置文件 1.1.1 配置文件的作用 1.1.2 常见的配置文件类型 1.2 properties文件 1.2.1 文件示例 1.2.2 语法规范 1.3 XML文件 1.3.1 文件示例 1.3.2 概念介绍 1.3.3 XML的基本语…

【Android】记录在自己的AMD处理器无法使用Android studio 虚拟机处理过程

文章目录 问题&#xff1a;无法在AMD平台打开Android studio 虚拟机&#xff0c;已解决平台&#xff1a;AMD 5700g系统&#xff1a;win10专业版1、在 amd平台上使用安卓虚拟机需要安装硬件加速器2、关闭win10上的系统服务 问题&#xff1a;无法在AMD平台打开Android studio 虚拟…

LabVIEW电机故障监测系统

电机作为工业生产中的关键设备&#xff0c;其故障会导致生产停滞和经济损失。因此&#xff0c;开发一个能实时监控电机状态并预测潜在故障的系统具有重要意义。通过高效的数据采集和分析技术&#xff0c;提升故障诊断的准确性和及时性。 系统组成 该系统由以下部分组成&#…

vue3 运用高德地图 自定义弹框 为信息窗体 添加 new AMaps.value.InfoWindow 添加事件

效果图 划过散点的时候出现每个三点位置的数据提示 点击具体散点获取展示信息弹框&#xff0c;并为其添加点击事件 注意点&#xff1a; 1 即使是用的vue&#xff0c;也不能使用click为窗体添加点击事件&#xff0c;需要使用onclick&#xff0c; &#xff08;原因&#xff1a…

TMC2209驱动模式详解

TMC2209驱动模式详解 1.TMC2209封装2.TMC2209引脚定义 1.TMC2209封装 2.TMC2209引脚定义

JavaWeb系列十五: JavaWeb三大组件之过滤器Filter

老韩-JavaWeb三大组件之过滤器Filter 过滤器说明过滤器基本原理过滤器分析和实例url-patternFilter生命周期FilterConfigFilterConfig应用实例过滤器链基本原理分析过滤链实例演示过滤链注意事项 过滤器作业布置 过滤器说明 过滤器说明 Filter 过滤器是JavaWeb三大组件之一(Se…

Android AOSP 编译并烧录到Google Pixel4XL

简介 AOSP&#xff08;Android Open Source Project&#xff09;是Android系统的开源版本&#xff0c;任何人都可以下载、编译和修改。手头上有一台Pixel 4XL&#xff0c;尝试编译AOSP并将其烧录到的设备上。 准备工作 在开始之前&#xff0c;您需要确保您的电脑满足以下条件…

实验08 软件设计模式及应用

目录 实验目的实验内容一、能播放各种声音的软件产品Sound.javaDog.javaViolin.javaSimulator.javaApplication.java运行结果 二、简单工厂模式--女娲造人。Human.javaWhiteHuman.javaYellowHuman.javaBlackHuman.javaHumanFactory.javaNvWa.java运行结果 三、工厂方法模式--女…

Python爬虫项目集:豆瓣电影排行榜top250

关于整理日常练习的一些爬虫小练习&#xff0c;可用作学习使用。 爬取项目以学习为主&#xff0c;尽可能使用更多的模块进行练习&#xff0c;而不是最优解。 爬虫概要 示例python 库爬取模块request解析模块BeautifulSoup存储类型list&#xff08;方便存入数据库&#xff09…

2024年最新 Windows 操作系统安装部署 MongoDB 数据库详细教程(更新中)

MongoDB 概述 MongoDB 是一个基于分布式文件存储的开源数据库系统&#xff0c;由C语言编写&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系…

使用mysql的binlog进行数据恢复

1.mysql安装环境 在你本地电脑windows上建一个和生产环境一样的mysql版本 我的是 mysql5.7.43 安装教程可以自行上网搜&#xff08;这里不做介绍&#xff09; 可参考&#xff1a; 1.1安装路径 我的mysql安装路径&#xff1a; D:\mysql\mysql-5.7.43-winx64\bin * 1.2my.in…

Docker部署私有仓库(registryHarbor)

简介Docker Hub 官方仓库 在 Docker 中&#xff0c;当我们执行 docker pull xxx 的时候 &#xff0c;它实际上是从 registry.hub.docker.com 这个地址去查找&#xff0c;这就是Docker公司为我们提供的公共仓库。在工作中&#xff0c;我们不可能把企业项目push到公有仓库进行管理…

讲座学习截图——《CAD/CAE/CAM几何引擎-软件概述》(一)

目录 引出CAD/CAE/CAM几何引擎-软件概述 郝建兵CADCAECAM 几何模型内核ACIS 两个老大之一Open CascadeParasolid 两个老大之一Autodesk的内核 总结其他自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式…