3.8. 为外部 Red Hat Ceph Storage 集群使用 TLS 配置 RGW
使用 TLS 配置 RGW,以便 control plane 服务可以解析外部 Red Hat Ceph Storage 集群主机名。此流程将 Ceph RGW 配置为模拟 Object Storage 服务(swift)。
在此过程中,您要配置以下内容:* 一个 DNS 区域和证书,以便 https://rgw-external.ceph.local:8080 等 URL 被注册为 Identity 服务(keystone)端点,而 {rhos_log} 可以安全地访问 HTTPS 端点。* DNSData 域,如 ceph.local,以便 pod 可以为 RHOCP 上托管的服务将主机名映射到 IP 地址。* 带有 CoreDNS 服务的域的 DNS 转发。* 使用 RHOSO 公共 root 证书颁发机构的证书。
您必须将 RHOCP 中创建的证书和密钥文件复制到托管 RGW 的节点,以便它们可以成为 Ceph 编排器 RGW 规范的一部分。
流程
为外部 Ceph 集群创建
DNSData自定义资源(CR)。注意创建
CR 创建一个新的DNSDatadnsmasqpod,它可以在关联的 DNSData CR 中读取和解析 DNS 信息。以下是
DNSDataCR 的示例:apiVersion: network.openstack.org/v1beta1 kind: DNSData metadata: labels: component: ceph-storage service: ceph name: ceph-storage namespace: openstack spec: dnsDataLabelSelectorValue: dnsdata hosts: - hostnames: - ceph-rgw-internal-vip.ceph.local ip: 172.18.0.2 - hostnames: - ceph-rgw-external-vip.ceph.local ip: 10.10.10.2注意在本例中,假设 IP 地址
172.18.0.2的主机托管 Ceph RGW 端点,以访问私有存储网络。此主机通过 CR,以便创建 DNS A 和 PTR 记录。这可让使用主机名ceph-rgw-internal-vip.ceph.local访问主机。还假设主机位于 IP 地址
10.10.10.2的主机上,用于外部网络上访问 Ceph RGW 端点。此主机通过 CR,以便创建 DNS A 和 PTR 记录。这可让使用主机名ceph-rgw-external-vip.ceph.local访问主机。本例中的主机列表不是所需主机的确定列表。它提供给演示目的。替换适合您的环境的主机。
将 CR 应用到您的环境:
$ oc apply -f <ceph_dns_yaml>-
将
<ceph_dns_yaml> 替换为DNSDataCR 文件的名称。
-
将
-
使用向
ceph.local域的请求的dnsmasq更新CoreDNSCR。有关 DNS 转发的更多信息,请参阅 RHOCP 网络指南中的 使用 DNS 转发。 列出
openstackdomain DNS 集群 IP:$ oc get svc dnsmasq-dns以下是这个命令的输出示例:
$ oc get svc dnsmasq-dns dnsmasq-dns LoadBalancer 10.217.5.130 192.168.122.80 53:30185/UDP 160m- 记录命令输出中的转发信息。
列出
CoreDNSCR:$ oc -n openshift-dns describe dns.operator/default编辑
CoreDNSCR,并使用转发信息更新它。以下是带有转发信息更新的
CoreDNSCR 示例:apiVersion: operator.openshift.io/v1 kind: DNS metadata: creationTimestamp: "2024-03-25T02:49:24Z" finalizers: - dns.operator.openshift.io/dns-controller generation: 3 name: default resourceVersion: "164142" uid: 860b0e61-a48a-470e-8684-3b23118e6083 spec: cache: negativeTTL: 0s positiveTTL: 0s logLevel: Normal nodePlacement: {} operatorLogLevel: Normal servers: - forwardPlugin: policy: Random upstreams: - 10.217.5.130:53 name: ceph zones: - ceph.local upstreamResolvers: policy: Sequential upstreams: - port: 53 type: SystemResolvConf以下是添加到 CR 中的内容:
.... servers: - forwardPlugin: policy: Random upstreams: - 10.217.5.130:53 name: ceph zones: - ceph.local ....其中:
10.217.5.130:53-
是从
oc get svc dnsmasq-dns命令记录的转发信息。
使用
DNSDataCR 中的主机名创建一个证书CR。以下是
证书 CR 的示例:apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: cert-ceph-rgw namespace: openstack spec: duration: 43800h0m0s issuerRef: {'group': 'cert-manager.io', 'kind': 'Issuer', 'name': 'rootca-public'} secretName: cert-ceph-rgw dnsNames: - ceph-rgw-internal-vip.ceph.local - ceph-rgw-external-vip.ceph.local注意证书
issuerRef设置为 RHOSO 的 root 证书颁发机构(CA)。部署 control plane 时会自动创建此 CA。CA 的默认名称为rootca-public。RHOSO pod 信任这个新证书,因为使用了 root CA。将 CR 应用到您的环境:
$ oc apply -f <ceph_cert_yaml>-
将
<ceph_cert_yaml> 替换为证书CR 文件的名称。
-
将
从应用
证书CR 时创建的 secret 中提取证书和密钥数据:$ oc get secret <ceph_cert_secret_name> -o yaml将
<ceph_cert_secret_name> 替换为CertificateCR 的secretName字段中使用的名称。注意此命令使用类似如下的 data 部分输出 YAML:
[stack@osp-storage-04 ~]$ oc get secret cert-ceph-rgw -o yaml apiVersion: v1 data: ca.crt: <CA> tls.crt: <b64cert> tls.key: <b64key> kind: Secret&
lt;b64cert> 和 <b64key> 值是您在下一步中必须使用的 base64 编码证书和密钥字符串。
提取和 base64 解码上一步中获取的证书和密钥信息,并将它们的串联保存到 Ceph 对象网关服务规格中。
规格文件的
rgw部分类似如下:service_type: rgw service_id: rgw service_name: rgw.rgw placement: hosts: - host1 - host2 networks: - 172.18.0.0/24 spec: rgw_frontend_port: 8082 rgw_realm: default rgw_zone: default ssl: true rgw_frontend_ssl_certificate: | -----BEGIN CERTIFICATE----- MIIDkzCCAfugAwIBAgIRAKNgGd++xV9cBOrwDAeEdQUwDQYJKoZIhvcNAQELBQAw <redacted> -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAyTL1XRJDcSuaBLpqasAuLsGU2LQdMxuEdw3tE5voKUNnWgjB <redacted> -----END RSA PRIVATE KEY-----规格文件的
ingress部分类似如下: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_interface_networks: - 172.18.0.0/24 virtual_ip: 172.18.0.2/24 ssl_cert: | -----BEGIN CERTIFICATE----- MIIDkzCCAfugAwIBAgIRAKNgGd++xV9cBOrwDAeEdQUwDQYJKoZIhvcNAQELBQAw <redacted> -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAyTL1XRJDcSuaBLpqasAuLsGU2LQdMxuEdw3tE5voKUNnWgjB <redacted> -----END RSA PRIVATE KEY-----在上例中,
rgw_frontend_ssl_certificate和ssl_cert包含上一步中的 <b64cert> 和 <b64key>中的 base64 解码值,两者之间没有空格。- 使用服务规格部署 Ceph 对象网关的步骤, 以使用 SSL 部署 Ceph RGW。
-
连接到
openstackclientpod。 验证转发信息是否已成功更新。
$ curl --trace - <host_name>将
<host_name> 替换为之前添加到DNSDataCR 的外部主机的名称。注意以下是此命令的输出示例,其中
openstackclientpod 成功解析主机名,且不会遇到 SSL 验证错误。sh-5.1$ curl https://rgw-external-vip.ceph.local:8080 <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult> .1$ sh-5.1$