注意
本文档适用于 Ceph 的开发版本。
管理网关
部署 mgmt-gateway
在从 Tentacle 开始的 Ceph 版本中,mgmt-gateway 服务引入了一种基于模块化、面向服务架构的 Ceph 应用程序新设计。此服务由 cephadm 管理,建立在 nginx(一个开源、高性能的 Web 服务器)之上,作为 Ceph 集群的新前端和单一入口点。mgmt-gateway 为所有 Ceph 应用程序(包括 Ceph 仪表板和监控堆栈)提供统一访问。使用 nginx 增强了安全性并简化了访问管理,因为它拥有强大的社区支持和高安全标准。mgmt-gateway 服务充当反向代理,将请求路由到适当的 Ceph 应用程序实例。
要部署 mgmt-gateway 服务,请使用以下命令
ceph orch apply mgmt-gateway [--placement ...] ...
应用后,cephadm 将重新配置特定的正在运行的守护程序(例如监控)以在新创建的服务后面运行。外部将无法再访问这些服务。访问将整合到新的服务端点后面:https://<node-ip>:<port>。
mgmt-gateway 服务的优势
统一访问:通过 nginx 整合访问提高了安全性,并为服务提供了单一入口点。改善的用户体验:用户不再需要知道每个应用程序在哪里运行 (ip/host)。仪表板高可用性:nginx HA 机制用于为 Ceph 仪表板提供高可用性。监控高可用性:nginx HA 机制用于为监控提供高可用性。
安全增强功能
部署 mgmt-gateway 服务后,用户无法在未通过 Ceph 仪表板进行身份验证的情况下访问监控服务。
高可用性增强功能
nginx HA 机制用于为所有 Ceph 管理应用程序(包括 Ceph 仪表板和监控堆栈)提供高可用性。对于 Ceph 仪表板,用户不再需要知道活动的管理器在哪里运行。mgmt-gateway 透明地处理管理器故障转移,并将用户重定向到活动的管理器。对于监控,当多个 Prometheus、Alertmanager 或 Grafana 实例可用时,mgmt-gateway 负责处理 HA。反向代理将自动检测健康的实例并使用它们来处理用户请求。
mgmt-gateway 服务的高可用性
除了为底层后端服务提供高可用性之外,mgmt-gateway 服务本身也可以配置为高可用性,确保系统即使在服务的某些核心组件(包括 mgmt-gateway 本身)发生故障时也能保持弹性。
可以使用 keepalived 在主动/备用配置中部署多个 mgmt-gateway 实例,以实现无缝故障转移。oauth2-proxy 服务可以部署为多个无状态实例,nginx 使用轮询策略充当它们之间的负载均衡器。这种设置消除了单点故障并增强了整个系统的弹性。
在此设置中,底层内部服务遵循相同的高可用性机制。服务不直接访问 mgmt-gateway 内部端点,而是使用规范中指定的虚拟 IP。这确保了 mgmt-gateway 的高可用性机制对其他服务是透明的。
在配置高可用性模式下部署 mgmt-gateway 的最简单和推荐方法是使用标签。要以 HA 模式运行 mgmt-gateway,用户可以使用如下 cephadm 命令行
ceph orch apply mgmt-gateway --virtual_ip 192.168.100.220 --enable-auth=true --placement="label:mgmt"
或者提供如下规范文件
mgmt-gateway 配置
service_type: mgmt-gateway
placement:
label: mgmt
spec:
enable_auth: true
virtual_ip: 192.168.100.220
此外,管理员必须配置入口服务以提供 mgmt-gateway 的虚拟 IP 功能。例如
service_type: ingress
service_id: ingress-mgmt-gw
placement:
label: mgmt
virtual_ip: 192.168.100.220
backend_service: mgmt-gateway
keepalive_only: true
部署的实例数由带有 mgmt 标签的主机数决定。入口配置为 keepalive_only 模式,标签确保 mgmt-gateway 守护程序的任何更改都会复制到相应的 keepalived 实例。
注意
virtual_ip 参数必须在入口和 mgmt-gateway 规范中保持一致。
使用 mgmt-gateway 访问服务
部署 mgmt-gateway 服务后,将不再允许直接访问监控服务。应用程序包括:Prometheus、Grafana 和 Alertmanager 现在可以通过 Administration > Services 中的链接访问。
服务规范
可以使用规范应用 mgmt-gateway 服务。下面是 YAML 示例
service_type: mgmt-gateway
service_id: gateway
placement:
hosts:
- ceph0
spec:
port: 5000
ssl: True
ssl_protocols:
- TLSv1.2
- TLSv1.3
- ...
ssl_ciphers:
- AES128-SHA
- AES256-SHA
- ...
ssl_cert: |
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3
DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T
[...]
-----END CERTIFICATE-----
ssl_key: |
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4
/CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h
[...]
-----END PRIVATE KEY-----
下面描述了 mgmt-gateway 服务 spec 部分特有的字段。
- class ceph.deployment.service_spec.MgmtGatewaySpec(service_type='mgmt-gateway', service_id=None, config=None, networks=None, placement=None, enable_auth=False, port=None, ssl_cert=None, ssl_key=None, ssl=True, certificate_source=None, custom_sans=None, ssl_prefer_server_ciphers=None, ssl_session_tickets=None, ssl_session_timeout=None, ssl_session_cache=None, server_tokens=None, ssl_stapling=None, ssl_stapling_verify=None, ssl_protocols=None, ssl_ciphers=None, enable_health_check_endpoint=False, virtual_ip=None, preview_only=False, unmanaged=False, extra_container_args=None, extra_entrypoint_args=None, custom_configs=None)
- enable_auth
用于启用 SSO 身份验证的标志。需要 oauth2-proxy 处于活动状态才能进行 SSO 身份验证。
- placement: PlacementSpec
请参阅 守护进程放置。
- port
服务器将监听的端口号
- server_tokens
控制响应中服务器令牌的标志:on | off | build | string
- ssl
用于启用/禁用 HTTPS 的标志。默认设置为 True。
- ssl_ciphers
受支持的安全 SSL 密码列表。更改此列表可能会降低系统安全性。
- ssl_prefer_server_ciphers
优先使用服务器密码而不是客户端密码:on | off
- ssl_protocols
受支持的 SSL 协议列表(由 nginx 支持)
- ssl_session_cache
SSL/TLS 会话缓存的持续时间:off | none | [builtin[:size]] [shared:name:size]
- ssl_session_tickets
控制会话票证的多选项标志:on | off
- ssl_session_timeout
SSL 会话超时的持续时间。语法:time(例如:5m)
- ssl_stapling
启用或禁用 SSL Stapling 的标志:on | off
- ssl_stapling_verify
控制 SSL Stapling 验证的标志:on | off
- virtual_ip
用于高可用性设置中管理网关的虚拟 IP 地址。
警告
TLSv1.3 在目前被认为是安全的,并且默认包含一组安全的密码。当为旧版本(尤其是 TLSv1.2)配置 SSL/TLS 密码时,至关重要的是仅使用安全的密码子集。使用弱或过时的密码会严重危及系统的安全性。
对 SSL/TLS 配置的密码列表进行的任何更改均由系统管理员负责。在不完全了解其影响的情况下,避免修改这些列表。不正确的配置可能导致漏洞,例如弱加密、缺乏前向保密性以及容易受到各种攻击。配置 SSL/TLS 设置时,请务必参考最新的安全指南和最佳实践。
然后可以通过运行以下命令应用规范
ceph orch apply -i mgmt-gateway.yaml
限制
服务必须根据所代理的应用程序绑定到适当的端口。确保没有可能破坏服务可用性的端口冲突。
默认镜像
mgmt-gateway 服务内部使用 nginx 反向代理。默认使用以下容器镜像
mgr/cephadm/container_image_nginx = 'quay.io/ceph/nginx:sclorg-nginx-126'
管理员可以通过更改 container_image_nginx cephadm 模块选项来指定要使用的镜像。如果已经有正在运行的守护程序,则必须重新部署守护程序才能使它们实际使用新镜像。
例如
ceph config set mgr mgr/cephadm/container_image_nginx <new-nginx-image>
ceph orch redeploy mgmt-gateway