在现代 IT 运维中,IT 运维人工智能 (AI-Ops) 正在通过高级算法自动化任务来改变数据管理。MinIO 和 Tailscale 共同提供了一个安全、可扩展且有效的应用程序层开发基础设施。Tailscale 基于 WireGuard 的覆盖 VPN 网络提供端到端加密并与身份提供商无缝集成,简化了访问控制,从而安全地管理连接。
MinIO 和 Tailscale 都是 Docker 和 Kubernetes 原生的。MinIO 是一款完美的 S3 兼容对象存储解决方案,提供了一个高性能、可扩展的系统,可无缝集成到云原生环境中。Tailscale 是一款理想的覆盖网络解决方案,使用其与基础设施无关的 VPN 服务来建立安全、零信任的网络架构,使应用程序层开发变得简单且安全。
对于使用 MinIO 的 S3 兼容存储的组织,Tailscale 的网络隧道可确保从任何位置安全访问 MinIO 存储桶,从而提供一条跨互联网的保护路径。Tailscale VPN 服务降低的延迟和高可靠性使其特别适用于安全地连接不同的环境。
在以下部分,您将学习如何使用 Docker 部署一个 MinIO 服务器,并使用 Tailscale 作为 sidecar 运行。此配置提供了灵活性,可以安全地在您的私有网络中提供 MinIO 服务器服务,或者通过 Tailscale Funnel 公开它。您将深入了解如何设置 Tailscale sidecar 来管理安全网络、配置 MinIO 以获得最佳对象存储,以及如何利用 Tailscale 的高级功能(如 Funnel)安全有效地路由流量,从而完全控制私有和公共访问。
Tailscale 的无缝集成
使用 Tailscale VPN 进行身份验证使您可以生成不同的访问密钥,例如密钥 API 密钥或 OAuth 客户端 ID 和密钥。在本演示中,我们将生成一个 OAuth 密钥。OAuth 的使用提供了更持久的授权,这非常适合在我们设置中联网 MinIO。这种方法确保了更稳定和安全的连接,利用 OAuth 强大的身份验证框架来有效地管理访问。
Tailscale cert 命令有助于获取 TLS 证书,以通过 HTTPS 保护您的内部服务。以下是您需要了解的内容
- Tailscale Cert 用法:tailscale cert 命令用于获取您 tailnet 中特定域的 TLS 证书。但是,该命令要求服务在您的 Tailscale 网络中作为节点运行。要为 Docker 启用此功能,请确保您的 Tailscale 容器具有正确的权限并已使用 OAuth 客户端密钥或 API 密钥完全进行身份验证。然后,证书将通过 Let's Encrypt CA 进行配置。
- OAuth 和标签:如果使用 OAuth 客户端密钥而不是 API 密钥,则必须正确标记容器以进行识别。这使用
TS_EXTRA_ARGS
环境变量设置。OAuth 方法可以使用 tailscale up 自动进行身份验证,允许您的容器获取其证书并在网络上运行。控制您的兴奋:深入了解使用 Tailscale 和 Docker。 - 网络配置:由于我们使用的是
network_mode: service
,因此 Tailscale 容器应充当 sidecar,管理 MinIO 容器的流量。确保 MinIO 配置为使用 Tailscale 的 IP 范围,并且TS_SERVE_CONFIG
指向正确的内部 IP 或 DNS 条目。使用 Tailscale 和 Docker · Tailscale 文档。
通过确保您的 Tailscale 容器已完全认证并正确配置,您应该能够成功地通过 HTTPS 提供 MinIO 服务。有关正确设置 TLS 证书的更多详细信息,请查看 Tailscale 的博客为您的内部 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 设置环境变量涉及使用export VAR_NAME="value"
通过命令行分配值,以便它们在当前 shell 会话中可用。但是,这些变量可以通过 ps 或 docker inspect 等检查命令以明文形式显示。为了保护敏感数据,请考虑使用加密保管库或机密管理服务等安全替代方案,尤其是在生产系统中。
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-ts
container_name: minio-ts
image: tailscale/tailscale:latest
environment:
- 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:config
cap_add:
- net_admin
- sys_module
restart: unless-stopped
minio:
image: minio/minio:latest
container_name: minio
environment:
- MINIO_ROOT_USER=${MINIO_ROOT_USER}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
command: server /data --address ":9000" --console-address ":9001"
volumes:
- ${PWD}/minio/data:/data
restart: unless-stopped
depends_on: minio-ts
network_mode: service:minio-ts
volumes:
minio-ts:
local
minio:
local
docker-compose.yaml
Docker Compose “network_mode” 参数
通过设置network_mode: service:minio-ts
,我们可以有效地将我们的容器放置到另一个容器的网络命名空间中,具体来说是名为 minio-ts 的容器。这意味着容器继承了目标服务的网络堆栈,包括 IP 地址和端口设置。
在我们的示例中,minio 将共享minio-ts
服务的网络堆栈,使其能够在 Tailscale 网络上通信,而无需额外的网络配置。
使用 Tailscale 提供 MinIO 服务和 Funneling
Tailscale 的 Serve 和 Funnel 功能简化了与跨网络公开服务相关的传统复杂性。
- Serve 允许在您的 Tailscale 网络中访问内部服务,简化了您连接到开发服务器等资源的方式,而无需复杂的配置。
- Funnel 将此可访问性扩展到互联网,提供了一种安全的方式来公开外部服务,而无需直接暴露,在 Tailscale 的强大安全措施后面保护它们。
这种集成极大地简化了操作,减少了对传统反向代理和手动 SSL 管理的需求,使网络管理更加安全和可管理。
使用 Tailscale 的 Let's Encrypt
要为您的 MinIO 服务启用 Tailscale HTTPS 代理功能,tailscale cert 命令至关重要。它有助于通过 Let's Encrypt 获取 TLS 证书,确保您的 MinIO 实例可以通过 HTTPS 安全访问。以下是您需要执行的步骤
管理控制台设置
在 Tailscale 管理控制台中,启用 HTTPS 证书并确保 MagicDNS处于活动状态。这会将您的 tailnet 的名称链接到证书 启用 HTTPS · Tailscale 文档。
要为 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 cert 生成 TLS 证书,您需要运行指定精确域名(不使用通配符)的命令。这是一个示例命令
tailscale cert <subdomain>.<service-hostname>.<your-tailnet.ts.net>
示例命令
tailscale cert minio-ts.tailnet.ts.net
生成证书的示例命令。
确保域名与您 tailnet 中的 DNS 名称匹配。
重要说明
- TLS 证书:确保生成的证书随后由您的 MinIO 服务使用。
- 权限:确保 Tailscale 服务通过 API 密钥或 OAuth 设置了适当的权限以创建证书。
在您的TS_SERVE_CONFIG
(minio.json
)中,确保代理设置与 MinIO 容器的内部端口(通常为 9000 或 9001)一致。确保 Tailscale 服务和 MinIO 通过网络正确链接。
Tailscale 使用TS_CERT_DOMAIN
变量(这被称为“tailnet”)简化网络配置,在示例TS_SERVE_CONFIG
JSON 文件中,它自动为 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 - JSON 文件
上面提供的TS_SERVE_CONFIG
文件有效地演示了如何配置 Tailscale 以通过 HTTPS 通过 Tailscale 的安全网络基础设施提供本地 Web 服务(例如 MinIO 实例)。以下是 Tailscale Serve 配置的细分
TCP 块
- 此部分指示 TCP 端口 443(这是 HTTPS 流量的标准端口)已设置为处理 HTTPS 流量。此设置对于加密客户端和服务器之间传输的数据至关重要。
Web 块
"minio.{TS_CERT_DOMAIN}:443"
条目指定对端口 443 上此域的请求应由其中的定义规则处理。"Handlers"
部分包含路径和相应的操作。这里,根路径(“/”)配置为将请求代理到http://127.0.0.1:9001
,这应该是您的 MinIO 控制台服务正在运行的本地地址。此重定向允许 Tailscale 安全地公开本地服务,就像它直接在指定的域上运行一样。
AllowFunnel 块:
- 此设置控制是否可以通过 Tailscale 的 Funnel 功能访问服务,该功能使本地服务在互联网上可用。设置
"minio.{TS_CERT_DOMAIN}:443": false
明确拒绝服务在互联网范围内的公开,将其限制在 Tailscale 网络访问范围内。 - 如果您要将服务器公开到网络,则将
“AllowFunnel”
设置为true
。
Tailscale Funnel 将本地服务的可访问性扩展到公共互联网,允许创建 通过 Cloudflare 的 DNS 记录,为 Webhook 或 Web 应用程序等服务创建安全且加密的路径,直接从您的硬件。Tailscale 配置中的 AllowFunnel 设置启用了此功能,确保服务根据您的网络策略既可访问又安全。
Funneling 的限制
Tailscale Funnel 有一些特定的限制会影响其使用。
首先,DNS 名称仅限于 tailnet 的域,这意味着每个节点只能通过类似node-name.tailnet-name.ts.net
的 DNS 名称访问。
其次,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 允许控制服务的公共访问,从而能够从互联网安全地访问,而无需复杂的防火墙配置。
- 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 运营时代取得成功。
如需更多支持或与社区联系,请随时加入 MinIO Slack 频道中的对话,专家们会在那里分享见解并解答有关部署、管理和优化 MinIO 的问题。