Ceph:关于Ceph 中使用 RADOS 网关提供对象存储的一些笔记整理(13)

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》

写在前面


  • 准备考试,整理 ceph 相关笔记
  • 博文内容涉及使用 RADOS 块设备提供块存储
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


使用 RADOS 网关提供对象存储

部署对象存储网关

对象存储是什么?

对象存储将数据存储为离散项,每个单独称为对象。与文件系统中的文件不同,对象不是按目录和子目录树组织的。相反,对象存储在平面名称空间中。通过使用对象的唯一对象ID(也称为对象键)检索每个对象

应用程序不使用普通的文件系统操作来访问对象数据。相反,应用程序访问一个REST API来发送和接收对象。

Ceph 支持两种最常用的对象资源:Amazon S3(简单存储服务)OpenStack Swift (OpenStack对象存储)

  • Amazon S3将对象存储的平面命名空间称为
  • OpenStack Swift将其称为容器

因为名称空间是平面的,所以桶和容器都不能嵌套。Ceph通常使用这个术语, 一个用户帐户可以访问同一个存储集群中的多个。每个桶可以有不同的访问权限,用于存储不同用例的对象

对象存储的优点

  • 是易于使用、扩展和扩展。因为每个对象都有一个惟一的ID,所以可以在用户不知道对象位置的情况下存储或检索它
  • 没有目录层次结构,简化了对象之间的关系
  • 与文件类似,对象包含二进制数据流,并且可以增长到任意大的大小
  • 对象还包含关于对象数据的元数据,并支持扩展元数据信息,通常以键-值对的形式存在。您还可以创建自己的元数据键,并将自定义信息作为键值存储在对象中

RADOS网关

RADOS网关,也被称为RGW (Object Gateway),是一种服务,为使用标准对象存储 api 的客户端提供对 Ceph 集群的访问。RADOS网关 同时支持 Amazon S3和OpenStack Swift的api

核心守护进程 radosgw 构建在librados 库之上。这个守护进程提供一个基于 Beast HTTP、WebSocket和 网络协议库的web服务接口,作为处理API请求的前端

radosgw 是 Ceph 的客户端,提供对其他客户端应用程序的对象访问。客户端应用程序使用标准的api与RADOS网关通信,而RADOS网关使用librados模块调用与Ceph集群通信

在这里插入图片描述

网关用户如何创建

RADOS网关提供了 radosgw-admin实用程序,用于创建使用该网关的用户。这些用户只能访问网关,而不是直接访问存储集群的cephx用户

在提交Amazon S3或OpenStack Swift API请求时,RADOS网关客户端使用这些网关用户帐户进行鉴权

通过RADOS网关对网关用户进行身份验证后,网关使用cephx凭据向存储集群进行身份验证,以处理对象请求。网关用户也可以通过集成基于ldap的外部认证服务进行管理

RADOS网关服务自动在每个区域的基础上创建池。这些池使用配置数据库中的放置组(PG)值,并使用默认的CRUSH层次结构

默认池设置对于生产环境可能不是最优的

RADOS网关为默认区域创建多个池:

  1. rgw.root 存储记录信息
  2. default.rgw.control 用作控制池
  3. default.rgw.meta 存储user_key和其他关键元数据
  4. default.rgw.log 包含所有bucket或container以及对象操作的日志,如create,read,delete
  5. default.rgw.buckets.index 存储桶的索引
  6. default.rgw.buckets.data 存储桶数据
  7. default.rgw.buckets.non-ec 用于multipart对象元数据上传

可以使用自定义设置手动创建池。Red Hat 建议将区域名称作为手动创建的池的前缀,.<zone-name>.rgw.control,例如:.us-east1-1.rgw.buckets.data 作为us-east-1区域的池名称

RADOS网关支持静态Web内容托管

RADOS网关支持静态网站托管在S3桶中,这可以比使用虚拟机更有效的网站托管。这适用于只使用静态元素的网站,如XHTML或HTML文件,或CSS

为静态web主机部署RADOS网关实例有限制

  • 实例不能用于S3或Swift API访问
  • 实例的域名应该与标准S3和Swift AP的域名不同,而且不能重叠。网关实例
  • 实例应该使用不同于标准S3和Swift API网关实例的面向公共的IP地址

RADOS网关部署

cephadm工具将RADOS网关服务部署为一组守护进程,用于管理单个集群或多站点部署。使用client.rgw.*来定义新的RADOS网关守护进程的参数和特征

使用Ceph Orchestrator部署或删除RADOS网关服务。通过命令行接口或服务规范文件使用Ceph Orchestrator

1
2
3
4
[ceph: root@node /)# ceph orch apply rgw <service-name> [--realm=<realm>J \ 
[--zone=<zone>J [--port=< port>] --placement="<num-daemons> (<hostl> ... ]" \
[--unmanaged]

在本例中,Ceph Orchestrator在单个集群中使用两个守护进程部署my_rgw_service RADOS网关服务,并在80端口上提供服务

1
2
3
[root@serverc ~]# ceph orch apply rgw ceph260_radosgw \
--port 80 --placement="2 serverc.lab.example.com"

如果client.rgw.*未定义或在构建时传递给Ceph协调器,然后部署使用这些默认设置

下面的示例YAML文件包含为RADOS Gateway部署定义的公共参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
service_type: rgw 
service_name : rgw_service_name
placement:
count: 2
hosts:
- node01
- node02
spec:
rgw_frontend_port: 8080
rgw_realm: realm_name
rgw_zone: zone_name
ssl: true
rgw_frontend_ssl_certificate: |
-----BEGIN PRIVATE KEY-----
... output omitted ...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
... output omitted ...
-----END CERTIFICATE-----
networks:
- 172.25.200.0/24

在本例中,创建RGW服务的参数与前一个服务类似,但现在使用的是CLI

1
2
[ceph: root@node /]# ceph orch apply rgw rgw_service_name --realm=realm_name \ 
--zone=zone_name --port 8080 --placement="2 node01 node02" --ssl

注意,在服务规范文件中,realm、zone和port的参数名称与CLI使用的参数名称不同。RGW实例使用的网络、ssl证书内容等参数只能通过服务规范文件定义。

count参数设置在hosts参数中定义的每台服务器上创建RGW实例的数量。如果创建多个实例,那么Ceph协调器将第一个实例的端口设置为指定的rgw_frontend_port或port值。对于后续的每个实例,端口值增加1。使用前面的YAML文件示例,服务部署创建:

  1. node0l服务器中的两个RGW实例,一个端口为8080,另一个端口为8081
  2. node02服务器中的两个RGW实例,一个端口为8080,另一个端口为8081

每个实例都有自己唯一的端口供访问,并对请求创建相0同的响应。通过部署提供单一业务IP地址和端口的负载均衡器服务来配置RADOS网关的高可用性

Ceph编排器服务通过使用该格式来命名守护进程 rgw.<realm>.<zone>.<host>.<random-string>

自定义服务配置

使用集群配置文件client.rgw sectionrgw_frontend参数中的port选项为RADOS网关配置Beast前端web端口。使用ceph config命令查看当前配置

1
2
[ceph: root@node /]# ceph config get client.rgw rgw_frontends 
beast port=7480

使用TLS/SSL (Transport Layer Security/Secure Socket Layer)协议时,在端口号的末尾使用s字符定义端口,例如port=443。端口选项支持使用加号字符(+)的双端口配置,以便用户可以访问在两个不同的端口上的RADOS网关。

例如,rgw_frontend配置可以使RADOS网关在80/TCP端口上监听,并在443/TCP端口上支持TLS/SSL

1
2
[ceph: root@node /]# ceph config get client.rgw rgw_frontends 
beast port=80+443s

使用Beast前端

RADOS网关 提供Beast嵌入式HTTP服务器作为前端。Beast前端使用Boost.Beast 库来做HTTP解析以及使用Boost.Asio库来做异步网络I/O,

Beast 是一个 C++ 库,它提供了一个基于 Boost.Asio 的 HTTP 和 WebSocket 协议的实现。Boost.Asio 是一个 C++ 网络库,它提供了异步 I/O 操作的支持,可以用于实现高性能的网络应用程序。

Beast的配置选项

通过配置来自证书颁发机构(CA)的证书,以及RGW实例的主机名和匹配的密钥,配置Beast web服务器使用TLS

Beast配置选项通过Ceph配置文件或配置数据库传递给嵌入式web服务器。如果未指定值,则默认值为空

port and ssl_port

设置IPv4和IPv6协议的侦听端口号,可以多次指定,如 port=80 port=8000

endpoint and ssl_endpoint

address [:port]的形式设置侦听地址,可以多次指定,如 endpoint= [:: 1] endpoint=192.168.0.100:8000

ssl_certificate

指定用于启用SSL的端点的SSL证书文件的路径

ssl_private_key

指定 SSL 私钥,但是如果没有提供值,则使用ssl_certificate指定的文件作为私钥

tcp_nodelay

在某些环境下设置性能优化参数

Red Hat建议使用 HAProxy和keepalive 服务在生产环境中配置TLS/ SSL访问

高可用Proxy和加密

RADOS Gateway业务负载增加时,可以部署更多的RGW实例,以支持业务负载。可以在单个zone组部署中添加实例,但是要考虑到每个RGW实例都有自己的IP地址,并且很难在单个zone中平衡对不同实例的请求

相反,配置HAProxy和keepalive来平衡RADOS网关服务器之间的负载。HAProxy只提供一个IP地址,它平衡所有RGW实例的请求

Keepalived确保代理节点保持相同的呈现IP地址,与节点可用性无关

HAProxy和keepa live服务配置至少两个独立的主机,以保持高可用性

HAProxy服务可以配置为使用HTTPS协议。要启用HTTPS,需要为配置生成SSL密钥和证书。如果没有来自证书颁发机构的证书,那么请使用自签名证书

服务器端加密

可以启用服务器端加密,以便在无法通过SSL发送加密请求时,允许使用不安全的HTTP向RADOS网关服务发送请求。目前仅在使用Amazon S3 API时支持服务器端加密场景。

有两个选项配置服务器端加密的RADOS网关,客户提供的密钥或密钥管理服务

  • 客户提供的密钥

该选项根据Amazon SSE-C规范实现。对RADOS网关服务的每个读或写请求都包含一个用户通过S3客户端提供的加密密钥

一个对象只能用一个密钥加密,用户使用不同的密钥加密不同的对象。跟踪用于加密每个对象的密钥是用户的责任

密钥管理服务

通过配置密钥管理服务,可以安全地保存RADOS Gateway服务的密钥。当配置密钥管理服务时,RADOS网关服务按需检索密钥,以对对象进行加密或解密。

下图演示了RADOS网关和示例HashiCorp Vault密钥管理服务之间的加密流程

在这里插入图片描述

目前,已测试的RADOS网关密钥管理服务实现包括HashiCorp VaultOpenStack Barbican

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 :)



© 2018-至今 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

发布于

2023-04-16

更新于

2025-02-04

许可协议

评论
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×