Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.11. 在 Overcloud 中启用 SSL/TLS

默认情况下,Overcloud 使用未加密的端点(endpoints)提供相关的服务。因此,Overcloud 的配置需要一个额外的环境文件来为它的 Public API 端点启用 SSL/TLS。

注意

这个过程只为 Public API 端点启用 SSL/TLS。Internal API 和 Admin API 仍然没有加密。
这个过程需要网络分离来为 Public API 定义端点。如需了解与网络分类相关的信息,请参阅 第 6.2 节 “分离网络”
请确认已有一个私人密钥以及创建了证书授权(CA)。如需了解更多与创建 SSL/TLS 密钥和证书授权文件的信息,请参阅 附录 A, SSL/TLS 证书配置

启用 SSL/TLS

从 Heat 模板集合中复制 enable-tls.yaml 环境文件:
$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/enable-tls.yaml ~/templates/.
编辑这个文件,对以下参数进行修改:

parameter_defaults:

SSLCertificate:
把证书文件的内容复制到 SSLCertificate 参数中。例如:
parameter_defaults:
  SSLCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIDgzCCAmugAwIBAgIJAKk46qw6ncJaMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV
    ...
    sFW3S2roS4X0Af/kSSD8mlBBTFTCMBAj6rtLBKLaQbIxEpIzrgvp
    -----END CERTIFICATE-----

重要

证书授权内容中的所有新行都需要有相同的行缩进。
SSLKey:
把私人密钥的内容复制到 SSLKey 参数。例如>
parameter_defaults:
  ...
  SSLKey: |
    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAqVw8lnQ9RbeI1EdLN5PJP0lVO9hkJZnGP6qb6wtYUoy1bVP7
    ...
    ctlKn3rAAdyumi4JDjESAXHIKFjJNOLrBmpQyES4XpZUC7yhqPaU
    -----END RSA PRIVATE KEY-----

重要

私人密钥的内容中的所有新行都需要有相同的行缩进。
EndpointMap:
EndpointMap 包括了使用 HTTPS 和 HTTP 的服务的映射信息。如果 SSL 使用 DNS,不要修改这个部分的默认设置。但是,如果使用一个 IP 地址作为 SSL 证书的常规名(请参阅 附录 A, SSL/TLS 证书配置),使用 IP_ADDRESS 替换所有 CLOUDNAME 实例。运行以下命令:
$ sed -i 's/CLOUDNAME/IP_ADDRESS/' ~/templates/enable-tls.yaml

重要

不要使用实际的值替换 IP_ADDRESSCLOUDNAME,Heat 会在 Overcloud 创建的过程中替换这些变量。

resource_registry:

OS::TripleO::NodeTLSData:
OS::TripleO::NodeTLSData: 的资源 URL 改为一个绝对的 URL:
resource_registry:
OS::TripleO::NodeTLSData: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/tls/tls-cert-inject.yaml

注入一个 Root 证书

如果使用一个自签发的证书,或证书的签发者不在 Overcloud 镜像中的默认的 trust store 中,则需要把证书“注入”到 Overcloud 镜像中。从 heat 模板集合中复制 inject-trust-anchor.yaml 环境文件:
$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/inject-trust-anchor.yaml ~/templates/.
编辑这个文件,对以下参数进行修改:

parameter_defaults:

SSLRootCertificate:
把 root 证书授权文件的内容复制到 SSLRootCertificate 参数。例如:
parameter_defaults:
  SSLRootCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIDgzCCAmugAwIBAgIJAKk46qw6ncJaMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV
    ...
    sFW3S2roS4X0Af/kSSD8mlBBTFTCMBAj6rtLBKLaQbIxEpIzrgvp
    -----END CERTIFICATE-----

重要

证书授权内容中的所有新行都需要有相同的行缩进。

resource_registry:

OS::TripleO::NodeTLSCAData:
OS::TripleO::NodeTLSCAData: 的资源 URL 改为一个绝对的 URL:
resource_registry:
  OS::TripleO::NodeTLSCAData: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/tls/ca-inject.yaml

配置 DNS 端点

如果使用 DNS 主机名通过 SSL/TLS 来访问 Overcloud,创建一个新环境文件(~/templates/cloudname.yaml)来定义 Overcloud 端点的主机名。使用以下参数:

parameter_defaults:

CloudName:
Overcloud 端点的 DNS 主机名。
DnsServers:
使用的 DNS 服务器列表。配置的 DNS 服务器需要包括一个配置的 CloudName 的项,它需要和 Public API 的 IP 地址相匹配。
以下是这个文件的一个示例:
parameter_defaults:
CloudName: overcloud.example.com
DnsServers: ["10.0.0.1"]

在 Overcloud 创建期间添加环境文件

第 7 章 创建 Overcloud 中介绍的部署命令(openstack overcloud deploy)中使用 -e 选项来添加环境文件。使用以下顺序在这个部分添加环境文件:
  • 启用 SSL/TLS 的环境文件(enable-tls.yaml
  • 设置 DNS 主机名的环境文件(cloudname.yaml
  • 注入 root 证书授权的环境文件(inject-trust-anchor.yaml
例如:
$ openstack overcloud deploy --templates [...] -e /home/stack/templates/enable-tls.yaml -e ~/templates/cloudname.yaml -e ~/templates/inject-trust-anchor.yaml