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_ADDRESS
和CLOUDNAME
,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 创建期间添加环境文件
- 启用 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