在现代 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 运营时代推动成功。