注意
本文档适用于 Ceph 的开发版本。
RGW 服务
部署 RGW
Cephadm 将对象网关 (RGW) 部署为一组守护程序,用于管理单集群部署或多站点部署中的特定“域”和“区域”。 (有关域和区域的更多信息,请参阅多站点。)
请注意,使用 cephadm 时,radosgw 守护程序是通过监视器配置数据库配置的,而不是通过 ceph.conf 或命令行配置的。如果尚未进行此配置(通常在 client.rgw.<something> 部分中),则 radosgw 守护程序将使用默认设置启动(例如,绑定到端口 80)。
要使用任意服务名称“名称”部署一组 radosgw 守护程序,请运行以下命令
ceph orch apply rgw *<name>* [--realm=*<realm-name>*] [--zone=*<zone-name>*] --placement="*<num-daemons>* [*<host1>* ...]"
简单设置
例如,要为具有任意服务 ID foo 的单集群 RGW 部署部署两个守护程序(默认值)
ceph orch apply rgw foo
指定网关
一个常见的场景是拥有一组带有标签的主机充当网关,并有多个 radosgw 实例运行在连续的端口 8000 和 8001 上
ceph orch host label add gwhost1 rgw # the 'rgw' label can be anything
ceph orch host label add gwhost2 rgw
ceph orch apply rgw foo '--placement=label:rgw count-per-host:2' --port=8000
另请参阅:守护程序并置。
指定网络
RGW 服务可以通过 YAML 服务规范配置其绑定的网络。
示例规范文件
service_type: rgw
service_id: foo
placement:
label: rgw
count_per_host: 2
networks:
- 192.169.142.0/24
spec:
rgw_frontend_port: 8080
传递前端额外参数
RGW 服务规范可用于通过使用 rgw_frontend_extra_args 参数列表将额外参数传递给前端。
示例规范文件
service_type: rgw
service_id: foo
placement:
label: rgw
count_per_host: 2
spec:
rgw_realm: myrealm
rgw_zone: myzone
rgw_frontend_type: "beast"
rgw_frontend_port: 5000
rgw_frontend_extra_args:
- "tcp_nodelay=1"
- "max_header_size=65536"
注意
cephadm 将 spec 部分中的参数与 rgw_frontend_extra_args 中的参数组合成一个由空格分隔的参数列表,用于设置 rgw_frontends 配置参数的值。
多站点区域
要在 myhost1 和 myhost2 上部署服务于多站点 myorg 域和 us-east-1 区域的 RGW
ceph orch apply rgw east --realm=myorg --zonegroup=us-east-zg-1 --zone=us-east-1 --placement="2 myhost1 myhost2"
请注意,在多站点情况下,cephadm 只部署守护程序。它不会创建或更新域或区域配置。要创建新的域、区域和区域组,请使用 RGW 模块或发出以下形式的命令
radosgw-admin realm create --rgw-realm=<realm-name>
radosgw-admin zonegroup create --rgw-zonegroup=<zonegroup-name> --master
radosgw-admin zone create --rgw-zonegroup=<zonegroup-name> --rgw-zone=<zone-name> --master
radosgw-admin period update --rgw-realm=<realm-name> --commit
有关放置规范的详细信息,请参阅守护程序放置。有关设置多站点 RGW 的更多信息,请参阅多站点。
另请参阅 多站点。
设置 HTTPS
RGW 服务与其他 cephadm 管理的服务一样,支持三种配置 HTTPS 证书的方式,所有这些方式都通过 cephadm 证书管理器 (certmgr) 进行管理
cephadm 签名(默认):如果
ssl设置为 true 但未指定证书,cephadm 会自动为 RGW 服务生成并签署证书。内联:用户可以在规范中将
certificate_source设置为inline,并使用ssl_cert和ssl_key字段将证书和私钥直接嵌入到规范中。引用:用户可以在 certmgr 中注册自己的证书和密钥,并在规范中将
certificate_source设置为reference。
选项 1:内联证书和密钥
service_type: rgw
service_id: myrgw
spec:
ssl: true
certificate_source: inline
ssl_cert: |
-----BEGIN CERTIFICATE-----
(PEM cert contents here)
-----END CERTIFICATE-----
ssl_key: |
-----BEGIN PRIVATE KEY-----
(PEM key contents here)
-----END PRIVATE KEY-----
应用规范
ceph orch apply -i myrgw.yaml
注意
较旧的 rgw_frontend_ssl_certificate 字段仍受支持以实现向后兼容性,但它已被弃用。新部署应改用 ssl_cert / ssl_key。
选项 2:引用已注册的证书/密钥
首先,在 certmgr 中注册证书和密钥
ceph orch certmgr cert set --cert-name rgw_ssl_cert --service-name rgw.<service_id> -i $PWD/server_cert.pem
ceph orch certmgr key set --key-name rgw_ssl_key --service-name rgw.<service_id> -i $PWD/server_key
然后在 RGW 规范中使用 reference 源
service_type: rgw
service_id: myrgw
spec:
ssl: true
certificate_source: reference
应用规范
ceph orch apply -i myrgw.yaml
选项 3:cephadm 签名(默认)
如果设置了 ssl: true 但未提供证书,cephadm 将自动为 RGW 服务生成并签署证书。
service_type: rgw
service_id: myrgw
spec:
ssl: true
certificate_source: cephadm-signed
这将使用 cephadm 签名的证书部署 RGW。
设置带有通配符 SAN 的 HTTPS
使用 cephadm 签名的证书时,通配符主题备用名称 (SAN) 可以选择性地包含在生成的证书中。对于 RGW 服务,可以通过应用以下规范文件来启用此功能
service_type: rgw
service_id: foo
placement:
label: rgw
count_per_host: 1
spec:
ssl: true
certificate_source: cephadm-signed
rgw_frontend_port: 8080
wildcard_enabled: true # Enables wildcard SANs in the certificate
zonegroup_hostnames:
- s3.cephlab.com
然后应用此 yaml 文档
ceph orch apply -i myrgw.yaml
wildcard_enabled 标志确保在自签名证书中包含通配符 SAN 条目,从而允许在虚拟主机模式下访问存储桶。默认情况下,此标志处于禁用状态。示例:通配符 SAN - (*.s3.cephlab.com)
用于 RGW 服务的 Cephadm ceph orch 规范现在支持以下可选配置
spec:
qat:
compression: hw | sw
压缩
hw:启用硬件 QAT 卸载(如果节点上存在 QAT 硬件和 VF)
sw:启用 QAT 软件回退模式
qat 块中目前不支持其他键。
禁用多站点同步流量
有一个 RGW 配置选项名为 rgw_run_sync_thread,它告诉 RGW 守护程序不要传输多站点复制数据。如果您希望该 RGW 守护程序专用于 I/O 而不是多站点同步操作,这将很有用。RGW 规范文件包含一个设置 disable_multisite_sync_traffic,当设置为“True”时,它会告诉 cephadm 将为该 RGW 服务部署的所有 RGW 守护程序的 rgw_run_sync_thread 设置为 false。例如
service_type: rgw
service_id: foo
placement:
label: rgw
spec:
rgw_realm: myrealm
rgw_zone: myzone
rgw_zonegroup: myzg
disable_multisite_sync_traffic: True
注意
这只会阻止 RGW 守护程序发送复制数据。除非已将其从区域组和区域复制终结点中删除,否则守护程序仍可以接收复制数据。
关闭时排空客户端连接
当 RGW 守护程序因任何原因停止时,包括在 cephadm 升级过程中,RGW 提供了一个设置来延迟关闭,因为 RGW 守护程序会尝试完成正在进行的客户端请求。此设置默认处于关闭状态,但可以通过向 RGW 进程传递 --stop-timeout=<timeout-in-seconds> 或为 RGW 守护程序设置 rgw_exit_timeout_secs 配置选项来手动激活。此值可以在 RGW 服务规范文件中通过在规范文件中指定 rgw_exit_timeout_secs 参数来配置。例如
service_type: rgw
service_id: foo
placement:
label: rgw
spec:
rgw_realm: myrealm
rgw_zone: myzone
rgw_zonegroup: myzg
rgw_exit_timeout_secs: 120
将告诉 cephadm 为 rgw.foo 服务部署的 RGW 守护程序最多等待 120 秒以完成当前的客户端请求。请注意,RGW 守护程序在此期间将拒绝新的客户端请求。
注意
在 cephadm 部署中,此设置默认为启用,时间为 120 秒。如果要禁用此功能,必须在规范中将 rgw_exit_timeout_secs 设置为 0
注意
此设置在规范中的修改不会被服务中的 RGW 守护程序获取,直到使用 ceph orch redeploy <service-name> 或 ceph orch daemon redeploy <daemon-name> 命令重新部署它们。
服务规范
- class ceph.deployment.service_spec.RGWSpec(service_type='rgw', service_id=None, placement=None, rgw_realm=None, rgw_zonegroup=None, rgw_zone=None, rgw_frontend_port=None, rgw_frontend_ssl_certificate=None, rgw_frontend_type=None, rgw_frontend_extra_args=None, unmanaged=False, ssl=False, certificate_source=None, ssl_cert=None, ssl_key=None, custom_sans=None, preview_only=False, config=None, networks=None, subcluster=None, extra_container_args=None, extra_entrypoint_args=None, custom_configs=None, only_bind_port_on_networks=False, rgw_realm_token=None, update_endpoints=False, zone_endpoints=None, zonegroup_hostnames=None, data_pool_attributes=None, rgw_user_counters_cache=False, rgw_user_counters_cache_size=None, rgw_bucket_counters_cache=False, rgw_bucket_counters_cache_size=None, generate_cert=False, disable_multisite_sync_traffic=None, wildcard_enabled=False, rgw_exit_timeout_secs=120, qat=None)
配置(多站点)Ceph RGW 的设置
service_type: rgw service_id: myrealm.myzone spec: rgw_realm: myrealm rgw_zonegroup: myzonegroup rgw_zone: myzone ssl: true rgw_frontend_port: 1234 rgw_frontend_type: beast rgw_frontend_ssl_certificate: ...
另请参阅:服务规范
- data_pool_attributes
在 rgw 域引导命令中创建的 <zone-name>.rgw.buckets.data 池的属性
- disable_multisite_sync_traffic
用于使 RGW 不执行多站点复制,以便它可以专用于 IO
- generate_cert
如果未提供证书/密钥,是否应为用户生成证书/密钥
- only_bind_port_on_networks
是否将绑定的 IP 限制为“networks”参数中指定的 IP
- placement: PlacementSpec
请参阅 守护进程放置。
- rgw_bucket_counters_cache
要按存储桶跟踪操作指标,配置值 rgw_bucket_counters_cache 必须设置为 true
- rgw_bucket_counters_cache_size
用于设置每个存储桶计数器缓存中的条目数
- rgw_exit_timeout_secs
RGW 在被告知关闭时等待尝试完成客户端请求的时间
- rgw_frontend_port: int | None
RGW 守护程序的端口
- rgw_frontend_ssl_certificate: str | List[str] | None
SSL 证书列表
- rgw_realm: str | None
与此服务关联的 RGW 域。如果规范直接应用于 cephdam,则需要手动创建。如果是 rgw 模块,则会自动创建域。
- rgw_user_counters_cache
要按用户跟踪操作指标,配置值 rgw_user_counters_cache 必须设置为 true
- rgw_user_counters_cache_size
用于设置每个用户计数器缓存中的条目数
- rgw_zone: str | None
与此服务关联的 RGW 区域。如果规范直接应用于 cephdam,则需要手动创建。如果是 rgw 模块,则会自动创建区域。
- rgw_zonegroup: str | None
与此服务关联的 RGW 区域组。如果规范直接应用于 cephdam,则需要手动创建。如果是 rgw 模块,则会自动创建区域组。
- ssl
启用 SSL
RGW 高可用性服务
ingress 服务允许您通过最少的配置选项为 RGW 创建高可用性终结点。orchestrator 将部署和管理 haproxy 和 keepalived 的组合,以在浮动虚拟 IP 上提供负载平衡。
如果 RGW 服务配置为启用 SSL,则 ingress 服务将在后端配置中使用 ssl 和 verify none 选项。信任验证被禁用,因为后端是通过 IP 地址而不是 FQDN 访问的。
有 N 个主机部署了 ingress 服务。每个主机都有一个 haproxy 守护程序和一个 keepalived 守护程序。虚拟 IP 会自动配置在这些主机中的一个上。
每个 keepalived 守护程序每隔几秒检查同一主机上的 haproxy 守护程序是否响应。Keepalived 还会检查主 keepalived 守护程序是否运行正常。如果“主”keepalived 守护程序或活动的 haproxy 没有响应,则将选举在备份模式下运行的其余 keepalived 守护程序之一作为主守护程序,并将虚拟 IP 转移到该节点。
活动的 haproxy 充当负载均衡器,在所有可用的 RGW 守护程序之间分配所有 RGW 请求。
先决条件
一个现有的 RGW 服务。
部署中
使用命令
ceph orch apply -i <ingress_spec_file>
服务规范
服务规范是具有以下属性的 YAML 块
service_type: ingress
service_id: rgw.something # adjust to match your existing RGW service
placement:
hosts:
- host1
- host2
- host3
spec:
backend_service: rgw.something # adjust to match your existing RGW service
virtual_ip: <string>/<string> # ex: 192.168.20.1/24
frontend_port: <integer> # ex: 8080
monitor_port: <integer> # ex: 1967, used by haproxy for load balancer status
virtual_interface_networks: [ ... ] # optional: list of CIDR networks
use_keepalived_multicast: <bool> # optional: Default is False.
vrrp_interface_network: <string>/<string> # optional: ex: 192.168.20.0/24
health_check_interval: <string> # optional: Default is 2s.
ssl: true
certificate_source: inline # optional: Default is cephadm-signed
ssl_cert: | # optional: SSL certificate and key
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
ssl_key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
enable_stats: true
monitor_ssl: <bool>
monitor_cert_source: inline # optional: default is reuse_service_cert
monitor_ssl_cert: | # optional: SSL certificate and key
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
monitor_ssl_key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
monitor_networks: [..]
monitor_ip_addrs:
host: <ip>
service_type: ingress
service_id: rgw.something # adjust to match your existing RGW service
placement:
hosts:
- host1
- host2
- host3
spec:
backend_service: rgw.something # adjust to match your existing RGW service
virtual_ips_list:
- <string>/<string> # ex: 192.168.20.1/24
- <string>/<string> # ex: 192.168.20.2/24
- <string>/<string> # ex: 192.168.20.3/24
frontend_port: <integer> # ex: 8080
monitor_port: <integer> # ex: 1967, used by haproxy for load balancer status
virtual_interface_networks: [ ... ] # optional: list of CIDR networks
first_virtual_router_id: <integer> # optional: default 50
health_check_interval: <string> # optional: Default is 2s.
ssl_cert: | # optional: SSL certificate and key
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
此服务规范的属性如下
service_type必需且设置为“ingress”
service_id服务的名称。我们建议以您正在控制 ingress 的服务命名此服务(例如,
rgw.foo)。
placement hosts希望运行 HA 守护程序的主机。将在这些主机上部署一个 haproxy 和一个 keepalived 容器。这些主机不需要与部署 RGW 的节点匹配。
virtual_ipingress 服务可用的 CIDR 格式的虚拟 IP(和网络)。
virtual_ips_listingress 服务可用的 CIDR 格式的虚拟 IP 地址。每个虚拟 IP 地址将是运行 ingress 服务的节点上的主 IP 地址。虚拟 IP 地址的数量必须小于或等于 ingress 节点的数量。
virtual_interface_networks网络列表,用于识别用于虚拟 IP 的以太网接口。
frontend_port用于访问 ingress 服务的端口。
ssl为 ingress 服务启用 SSL。
certificate_source证书来源可以是以下之一:“inline”、“reference”或“cephadm-signed”。- 如果设置为“inline”,则 YAML 配置必须包含 ssl_cert 和 ssl_key。- 如果设置为“reference”,则证书和密钥必须已存在于证书存储中。- 如果设置为“cephadm-signed”,Cephadm 将自动生成证书和密钥。默认情况下,来源设置为“cephadm-signed”。
ssl_certSSL 证书,如果启用了 SSL 且
certificate_source不是“cephadm-signed”。这应该具有证书 .pem 格式。
ssl_keySSL 密钥,如果启用了 SSL 且
certificate_source不是“cephadm-signed”。这应该具有密钥 .pem 格式。
use_keepalived_multicast默认值为 False。默认情况下,cephadm 将部署 keepalived 配置以使用单播 IP,使用主机的 IP。选择的 IP 将与 cephadm 用于连接机器的 IP 相同。但是,如果首选多播,我们可以将
use_keepalived_multicast设置为True,Keepalived 将使用多播 IP (224.0.0.18) 在实例之间通信,使用与 VIP 所在的接口相同的接口。
vrrp_interface_network默认情况下,cephadm 会将 keepalived 配置为使用与 VIP 相同的接口进行 VRRP 通信。如果需要另一个接口,可以通过
vrrp_interface_network设置,并提供一个网络来识别要使用的以太网接口。
first_virtual_router_id默认值为 50。当部署超过 1 个 ingress 时,此参数可用于确保每个 keepalived 具有不同的 virtual_router_id。在使用
virtual_ips_list的情况下,每个 IP 将创建自己的虚拟路由器。因此,第一个将具有first_virtual_router_id,第二个将具有first_virtual_router_id+ 1,依此类推。有效值范围从 1 到 255。
health_check_interval默认值为 2 秒。此参数可用于设置 haproxy 与后端服务器之间健康检查的间隔。
enable_stats默认值为 False,必须设置为启用 haproxy 统计信息。
monitor_ssl为监视启用 ssl。只有在启用服务 SSL 时才能为监视启用 SSL。
monitor_cert_source监视器证书来源可以是以下之一:“reuse_service_cert”、“inline”、“reference”或“cephadm-signed”。- 如果设置为“reuse_service_cert”,则将使用服务证书。- 如果设置为“inline”,则 YAML 配置必须包含 ssl_cert 和 ssl_key。- 如果设置为“reference”,则证书和密钥必须已存在于证书存储中。- 如果设置为“cephadm-signed”,Cephadm 将自动生成证书和密钥。默认情况下,来源设置为“reuse_service_cert”。
monitor_ssl_cert监视器 SSL 证书,如果启用了监视器 SSL 且
monitor_cert_source不是“cephadm-signed”。这应该具有证书 .pem 格式。
monitor_ssl_key监视器 SSL 密钥,如果启用了监视器 SSL 且
monitor_cert_source不是“cephadm-signed”。这应该具有密钥 .pem 格式。
monitor_ip_addrs如果提供了
monitor_ip_addrs并且指定了 IP 地址分配给主机,则将使用该 IP 地址。如果 IP 地址不存在,则将检查“monitor_networks”。
monitor_networks如果指定了
monitor_networks,则将使用与指定网络之一匹配的 IP 地址。如果 IP 不存在,则将使用默认主机 IP。
为虚拟 IP 选择网络接口
您不能简单地提供用于配置虚拟 IP 的网络接口名称,因为接口名称在不同主机之间可能会有所不同(和/或重新启动)。相反,cephadm 将根据已配置的其他现有 IP 地址来选择接口。
通常,虚拟 IP 将配置在具有相同子网中现有 IP 的第一个网络接口上。例如,如果虚拟 IP 是 192.168.0.80/24,并且 eth2 具有静态 IP 192.168.0.40/24,则 cephadm 将使用 eth2。
在某些情况下,虚拟 IP 可能不属于与现有静态 IP 相同的子网。在这种情况下,您可以提供要与现有 IP 匹配的子网列表,并且 cephadm 会将虚拟 IP 放在第一个匹配的网络接口上。例如,如果虚拟 IP 是 192.168.0.80/24,并且我们希望它与机器在 10.10.0.0/16 中的静态 IP 位于同一接口上,则可以使用如下规范
service_type: ingress
service_id: rgw.something
spec:
virtual_ip: 192.168.0.80/24
virtual_interface_networks:
- 10.10.0.0/16
...
此策略的一个后果是您目前无法在没有现有 IP 地址的接口上配置虚拟 IP。在这种情况下,我们建议在正确的接口上配置一个不可路由网络中的“虚拟”IP 地址,并在网络列表中引用该虚拟网络(见上文)。
ingress 的有用提示
建议至少有三个
radosgw守护程序以实现可用性和负载均衡。我们建议为
ingress服务至少提供三个主机。