3.6. 配置外部 Ceph 对象网关后端
您可以通过完成以下高级别任务,将外部 Ceph 对象网关(RGW)配置为充当对象存储服务(swift)后端:
- 配置 RGW,以验证 Identity 服务(keystone)中的用户及其角色,以使用外部 RGW 服务进行身份验证。
- 部署和配置 RGW 服务,以处理对象存储请求。
您可以使用 openstack
客户端工具配置对象存储服务。
3.6.1. 配置 RGW 身份验证
您必须配置 RGW,以验证 Identity 服务(keystone)中的用户及其角色,以便与外部 RGW 服务进行身份验证。
先决条件
- 您已部署了可正常工作的 OpenStack control plane。
流程
在 control plane 上创建 Object Storage 服务:
$ openstack service create --name swift --description "OpenStack Object Storage" object-store
创建名为
swift
的用户:$ openstack user create --project service --password <swift_password> swift
-
将
<swift_password
> 替换为要分配给swift
用户的密码。
-
将
为
swift
用户创建角色:$ openstack role create swiftoperator $ openstack role create ResellerAdmin
将
swift
用户添加到系统角色中:$ openstack role add --user swift --project service member $ openstack role add --user swift --project service admin
将 RGW 端点 IP 地址导出到变量并创建 control plane 端点:
$ export RGW_ENDPOINT_STORAGE=<rgw_endpoint_ip_address_storage> $ export RGW_ENDPOINT_EXTERNAL=<rgw_endpoint_ip_address_external> $ openstack endpoint create --region regionOne object-store public http://$RGW_ENDPOINT_EXTERNAL:8080/swift/v1/AUTH_%\(tenant_id\)s; $ openstack endpoint create --region regionOne object-store internal http://$RGW_ENDPOINT_STORAGE:8080/swift/v1/AUTH_%\(tenant_id\)s;
-
将
<rgw_endpoint_ip_address_storage
> 替换为存储网络上 RGW 端点的 IP 地址。这是内部服务如何访问 RGW。 将
<rgw_endpoint_ip_address_external
> 替换为外部网络上 RGW 端点的 IP 地址。这是云用户如何将对象写入 RGW 的方式。注意两个端点 IP 地址都是代表虚拟 IP 地址(由
haproxy
和keepalived
所有)的端点,用于访问在 配置和部署 RGW 服务的步骤中将部署在 Red Hat Ceph Storage 集群中的 RGW 后端。
-
将
将
swiftoperator
角色添加到 control planeadmin
组:$ openstack role add --project admin --user admin swiftoperator
3.6.2. 配置和部署 RGW 服务
配置和部署 RGW 服务以处理对象存储请求。
流程
- 登录到 Red Hat Ceph Storage Controller 节点。
创建名为
/tmp/rgw_spec.yaml
的文件并添加 RGW 部署参数:service_type: rgw service_id: rgw service_name: rgw.rgw placement: hosts: - <host_1> - <host_2> ... - <host_n> networks: - <storage_network> spec: rgw_frontend_port: 8082 rgw_realm: default rgw_zone: default --- service_type: ingress service_id: rgw.default service_name: ingress.rgw.default placement: count: 1 spec: backend_service: rgw.rgw frontend_port: 8080 monitor_port: 8999 virtual_ips_list: - <storage_network_vip> - <external_network_vip> virtual_interface_networks: - <storage_network>
-
将
<host_1&
gt; , <
> 替换为部署 RGW 实例的 Ceph 节点的名称。host_
2> , …, <host_n -
将
<storage_network
> 替换为用于解析绑定radosgw
进程的接口的网络范围。 -
将
<storage_network_vip
> 替换为用作haproxy
前端的虚拟 IP (VIP)。这与配置 RGW 身份验证过程中 Object Storage 服务端点($RGW_ENDPOINT
)的配置 相同。 -
可选:使用外部网络上的额外 VIP 替换
<external_network_vip>
,以用作haproxy
前端。此地址用于从外部网络连接到 RGW。
-
将
- 保存该文件。
输入 cephadm shell 并挂载
rgw_spec.yaml
文件。$ cephadm shell -m /tmp/rgw_spec.yaml
在集群中添加 RGW 相关配置:
$ ceph config set global rgw_keystone_url "https://<keystone_endpoint>" $ ceph config set global rgw_keystone_verify_ssl false $ ceph config set global rgw_keystone_api_version 3 $ ceph config set global rgw_keystone_accepted_roles "member, Member, admin" $ ceph config set global rgw_keystone_accepted_admin_roles "ResellerAdmin, swiftoperator" $ ceph config set global rgw_keystone_admin_domain default $ ceph config set global rgw_keystone_admin_project service $ ceph config set global rgw_keystone_admin_user swift $ ceph config set global rgw_keystone_admin_password "$SWIFT_PASSWORD" $ ceph config set global rgw_keystone_implicit_tenants true $ ceph config set global rgw_s3_auth_use_keystone true $ ceph config set global rgw_swift_versioning_enabled true $ ceph config set global rgw_swift_enforce_content_length true $ ceph config set global rgw_swift_account_in_url true $ ceph config set global rgw_trust_forwarded_https true $ ceph config set global rgw_max_attr_name_len 128 $ ceph config set global rgw_max_attrs_num_in_req 90 $ ceph config set global rgw_max_attr_size 1024
-
将
<keystone_endpoint
> 替换为 Identity 服务端点。EDPM 节点能够解析内部端点,但不能解析公共端点。不要从 URL 省略 URIScheme,它必须是http://
或https://
。 -
将 <
swift_password
> 替换为上一步中分配给 swift 用户的密码。
-
将
使用 Orchestrator 部署 RGW 配置:
$ ceph orch apply -i /mnt/rgw_spec.yaml