使用 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…

讯飞听见录音笔H1/H1 PRO 如何在录音笔中删除录音

讯飞听见录音笔H1/H1 PRO 如何在录音笔中删除录音 讯飞听见录音笔H1/H1 PRO 如何在录音笔中删除录音 讯飞听见录音笔H1/H1 PRO 如何在录音笔中删除录音 同时按下音量➕和音量➖就可以

大数据处理的坚实基石:Scala不可变数据结构的作用

在大数据处理领域&#xff0c;数据的一致性、可靠性和性能至关重要。Scala语言提供的不可变数据结构在保证数据处理的稳定性和高效性方面发挥着重要作用。本文将详细探讨Scala中不可变数据结构的概念、优势以及它们在大数据处理中的应用。 不可变数据结构的概念 在Scala中&am…

Java零基础-集合:Queue

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

C# —— 继承

C# 面向对象的编程语言: 三个基本特征 1.封装: 例如平时定义一个类 添加属性和方法&#xff0c;属性和方法必须通过指定的对象进行使用&#xff0c;(专业来讲。隐藏对象内部的状态和功能&#xff0c;仅允许通过一组公共函数进行使用) 2.继承: 子类和父类的区分&#xff0c;子…

Redis之商品缓存

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

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

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

Redis数据结构-跳跃表 skiplist

跳跃表&#xff08;Skiplist&#xff09;是一种用于高效查找的概率型数据结构&#xff0c;它在插入、删除、搜索操作上具有较高的性能&#xff0c;接近于平衡树。Redis使用跳跃表来实现有序集合&#xff08;sorted sets&#xff09;中的范围查询。 ### 跳跃表的基本结构 跳跃…

借助TheGraph 查询ENS信息

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

数据分析-------面试相关

数据分析面试到底在面什么 在寻找合适的数据分析师时&#xff0c;一般招聘方的目标是确保候选人的专业技能和工作经验与岗位要求紧密对应。 关键在于两个方面:岗位的具体需求和数据分析师的职业素质。 首先&#xff0c;招聘方要确保应聘者的专业背景和技能与职位需求相匹配。…

解决微信小程序中input框被禁用后,电脑端小程序点击事件无效,手机端开发者工作和手机端正常

问题&#xff1a;input框被禁用后&#xff0c;电脑端小程序点击事件无效&#xff0c;手机端开发者工作和手机端正常。 解决方法&#xff1a;使用view包裹input标签&#xff0c;在view添加点击事件&#xff0c;input添加css:pointer-events:none; // 禁止鼠标事件 <view bin…

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

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

Java 中的 Optional 类及其在避免空指针异常中的作用?如何使用它们来过滤重复元素?

在Java编程的世界里&#xff0c;NullPointerException&#xff08;空指针异常&#xff09;恐怕是每个开发者都不陌生的“老朋友”。它通常发生在尝试访问或操作一个为null的对象的成员时&#xff0c;这不仅会导致程序崩溃&#xff0c;还可能隐藏了代码中的逻辑错误。为了优雅地…

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

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

【TensorFlow深度学习】完整项目案例:从零搭建自然语言问答系统

完整项目案例:从零搭建自然语言问答系统 完整项目案例:从零搭建自然语言问答系统1. 项目概览2. 技术栈与环境准备3. 数据准备4. 模型选择与加载5. 数据预处理6. 模型预测7. 性能优化与评估8. 部署与应用结语完整项目案例:从零搭建自然语言问答系统 随着人工智能技术的飞速发…

用python打印——九九乘法表2

for i in range(1, 10):for j in range(1, i 1):print(f"{j} * {i} {j * i}\t", end)j 1print()外层的 for 循环从 1 到 9 遍历 i。对于每个 i&#xff0c;内层的 for 循环从 1 到 i 遍历 j。在每次循环中&#xff0c;打印出 j 乘以 i 的结果&#xff0c;并以制表…

数据安全和数据加密

数据安全 数据安全是信息技术领域的一个核心议题&#xff0c;涉及到保护数字资料免受未经授权的访问和攻击。它主要包含三个关键方面&#xff1a;可用性、完整性和机密性&#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 虚拟…