3.7. 为外部 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)端点。这可让 Red Hat OpenStack Services on OpenShift (RHOSO)客户端解析主机并信任证书。

由于 RHOSO pod 需要安全地访问由 Red Hat OpenShift Container Platform (RHOCP)托管的 HTTPS 端点,所以此过程用于为该端点创建 DNS 域和证书。

在此过程中,会创建一个 DNSData 域,在示例中 ceph.local,以便 pod 可以为 RHOCP 上托管的服务将主机名映射到 IP 地址。然后,使用 CoreDNS 服务为域配置 DNS 转发。最后,使用 RHOSO 公共根证书颁发机构创建证书。

您必须将 RHOCP 中创建的证书和密钥文件复制到托管 RGW 的节点,以便它们可以成为 Ceph 编排器 RGW 规范的一部分。

流程

  1. 为外部 Ceph 集群创建 DNSData 自定义资源(CR)。

    注意

    创建 DNSData CR 创建一个新的 dnsmasq pod,它可以在关联的 DNSData CR 中读取和解析 DNS 信息。

    以下是 DNSData CR 的示例:

    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 访问主机。

    本例中的主机列表不是所需主机的确定列表。它提供给演示目的。替换适合您的环境的主机。

  2. 将 CR 应用到您的环境:

    $ oc apply -f <ceph_dns_yaml>
    • <ceph_dns_yaml > 替换为 DNSData CR 文件的名称。
  3. 使用向 ceph.local 域的请求的 dnsmasq 更新 CoreDNS CR。有关 DNS 转发的更多信息,请参阅 RHOCP 网络指南中的 使用 DNS 转发
  4. 列出 openstack domain 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
  5. 记录命令输出中的转发信息。
  6. 列出 CoreDNS CR:

    $ oc -n openshift-dns describe dns.operator/default
  7. 编辑 CoreDNS CR,并使用转发信息更新它。

    以下是带有转发信息更新的 CoreDNS CR 示例:

    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 1
        name: ceph
        zones:
        - ceph.local
    ....
    1
    oc get svc dnsmasq-dns 命令记录的转发信息。
  8. 使用 DNSData CR 中的主机名创建一个 证书 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。

  9. 将 CR 应用到您的环境:

    $ oc apply -f <ceph_cert_yaml>
    • <ceph_cert_yaml > 替换为 证书 CR 文件的名称。
  10. 从应用 证书 CR 时创建的 secret 中提取证书和密钥数据:

    $ oc get secret <ceph_cert_secret_name> -o yaml
    • <ceph_cert_secret_name > 替换为 Certificate CR 的 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

      <b64cert> 和 <b64key> 值是您在下一步中必须使用的 base64 编码证书和密钥字符串。

  11. 提取和 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_certificatessl_cert 包含上一步中的 < b64cert> 和 < b64key> 中的 base64 解码值,两者之间没有空格。

  12. 使用服务规格部署 Ceph 对象网关的步骤, 以使用 SSL 部署 Ceph RGW。
  13. 连接到 openstackclient pod。
  14. 验证转发信息是否已成功更新。

    $ curl --trace - <host_name>
    • <host_name > 替换为之前添加到 DNSData CR 的外部主机的名称。

      注意

      以下是此命令的输出示例,其中 openstackclient pod 成功解析主机名,且不会遇到 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$
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.