2.3. 使用单个自定义证书为公共服务更新 control plane


您可能需要使用自己的内部证书颁发机构(CA)保护公共 API。要将自动生成的路由证书替换为来自您的 CA 的通用证书,您必须创建一个包含 CA 证书的 secret,以及信任链中的所有证书。

先决条件

  • 您有每个公共服务的列表,用于应用您的自定义服务证书。您可以使用 oc route list -n openstack 命令获取此列表。将此信息用于证书的 DNS 名称,并在 openstack_control_plane.yaml 自定义资源(CR)中查找要编辑的相关服务。

流程

  1. alt_names 部分中创建一个包含每个服务的主机名的签名证书:

    [alt_names]
    DNS.1 = barbican-public-openstack.apps.ocp.openstack.lab
    DNS.2 = cinder-public-openstack.apps.ocp.openstack.lab
    DNS.3 = glance-default-public-openstack.apps.ocp.openstack.lab
    DNS.4 = horizon-openstack.apps.ocp.openstack.lab
    DNS.5 = keystone-public-openstack.apps.ocp.openstack.lab
    DNS.6 = manila-public-openstack.apps.ocp.openstack.lab
    DNS.7 = neutron-public-openstack.apps.ocp.openstack.lab
    DNS.8 = nova-novncproxy-cell1-public-openstack.apps.ocp.openstack.lab
    DNS.9 = nova-public-openstack.apps.ocp.openstack.lab
    DNS.10 = placement-public-openstack.apps.ocp.openstack.lab
    Copy to Clipboard Toggle word wrap
  2. 创建名为 cacerts.yaml 的清单文件,其中包含所有 CA 证书。如果需要,在信任链中包括所有证书:

    apiVersion: v1
    kind: Secret
    metadata:
      name: cacerts
      namespace: openstack
    type: Opaque
    data:
      myBundleExample: <cat mybundle.pem | base64 -w0> 
    1
    
      CACertExample: <cat cacert.pem | base64 -w0>     
    2
    Copy to Clipboard Toggle word wrap
    1
    运行这个命令,将 mybundle.pem 替换为证书或证书捆绑包的名称。结果被粘贴为 myBundleExample 字段的值。
    2
    运行这个命令,将 cacert.pem 替换为您的 CA 证书的名称。
  3. 从清单文件创建 secret:

    oc apply -f cacerts.yaml
    Copy to Clipboard Toggle word wrap
  4. 为名为 certificate-secret.yaml 的 secret 创建清单文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: certificate-secret
      namespace: openstack
    type: kubernetes.io/tls
    data:
      tls.crt: <cat tlscrt.pem | base64 -w0> 
    1
    
      tls.key: <cat tlskey.pem | base64 -w0> 
    2
    
      ca.crt: <cat cacrt.pem | base64 -w0>   
    3
    Copy to Clipboard Toggle word wrap
    1
    运行这个命令,将 tlscrt.pem 替换为签名证书的名称。
    2
    运行这个命令,将 tlskey.pem 替换为私钥的名称。
    3
    运行这个命令,将 cacrt.pem 替换为 CA 证书的名称。
  5. 创建 secret

    oc apply -f certificate-secret.yaml
    Copy to Clipboard Toggle word wrap
  6. 编辑 openstack_control_plane.yaml 自定义资源,并将捆绑包添加为 caBundleSecretName 的参数:

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: myctlplane
    spec:
      tls:
        podLevel:
          enabled: true
        caBundleSecretName: cacerts
    Copy to Clipboard Toggle word wrap
  7. 将 secret 服务证书应用到 apiOverride 字段中的每个公共服务。例如,为 Identity 服务(keystone)输入以下内容:

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: myctlplane
      namespace: openstack
    spec:
      ...
      keystone:
        apiOverride:
          tls:
            secretName: certificate-secret
    Copy to Clipboard Toggle word wrap

    Compute 服务(nova)和 NoVNCProxy 的编辑如下所示:

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: myctlplane
      namespace: openstack
    spec:
    ...
      nova:
        apiOverride:
          tls:
            secretName: certificate-secret
          route: {}
        cellOverride:
          cell1:
            NoVNCProxy:
              tls:
                secretName: certificate-secret
    Copy to Clipboard Toggle word wrap
  8. 应用 control plane 更改

    oc apply -f openstack_control_plane.yaml
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat