注意

本文档适用于 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 身份验证。

networks: List[str]

网络标识列表,指示守护进程只绑定在该列表中的特定网络上。如果集群分布在多个网络中,您可以添加多个网络。请参阅 网络和端口指定网络指定网络

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

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入