第 19 章 在 OpenStack 上安装
19.1. 准备在 OpenStack 上安装
您可以在 Red Hat OpenStack Platform (RHOSP) 上安装 OpenShift Container Platform。
19.1.1. 先决条件
- 您可以参阅有关 OpenShift Container Platform 安装和更新 流程的详细信息。
- 您可以阅读有关 选择集群安装方法的文档,并为用户准备它。
19.1.2. 选择在 OpenStack 上安装 OpenShift Container Platform 的方法
您可以在安装程序置备或用户置备的基础架构上安装 OpenShift Container Platform。默认安装类型使用安装程序置备的基础架构,安装程序会在其中为集群置备底层基础架构。您还可以在您置备的基础架构上安装 OpenShift Container Platform。如果不使用安装程序置备的基础架构,您必须自己管理和维护集群资源。
如需有关安装程序置备和用户置备的安装过程的更多信息,请参阅 安装过程。
19.1.2.1. 在安装程序置备的基础架构上安装集群
您可以使用以下方法之一在 OpenShift Container Platform 安装程序置备的 Red Hat OpenStack Platform(RHOSP)基础架构上安装集群:
- 使用自定义在 OpenStack 上安装集群 :您可以在 RHOSP 上安装自定义集群。安装程序允许在安装阶段应用一些自定义。其它自定义选项可 在安装后使用。
- 在带有 Kuryr 的 OpenStack 上安装集群 :您可以在使用 Kuryr SDN 的 RHOSP 上安装自定义 OpenShift Container Platform 集群。Kuryr 和 OpenShift Container Platform 的集成主要针对在 RHOSP VM 上运行的 OpenShift Container Platform 集群设计。Kuryr 通过将 OpenShift Container Platform pod 插入 RHOSP SDN 来提高网络性能。另外,它还提供 pod 和 RHOSP 虚拟实例间的互联性。
- 在受限网络中的 OpenStack 上安装集群: 您可以通过创建安装发行内容的内部镜像在受限或断开连接的网络中在 RHOSP 上安装 OpenShift Container Platform。您可以使用此方法安装不需要活跃互联网连接的集群来获取软件组件。您还可以使用此安装方法来确保集群只使用满足您组织对外部内容控制的容器镜像。
19.1.2.2. 在用户置备的基础架构上安装集群
您可以使用以下方法之一在您置备的 RHOSP 基础架构上安装集群:
- 在您自己的基础架构的 OpenStack 上安装集群 :您可以在用户置备的 RHOSP 基础架构上安装 OpenShift Container Platform。通过使用这个安装方法,您可以将集群与现有的基础架构和修改进行集成。对于在用户置备的基础架构上安装,您必须创建所有 RHOSP 资源,如 Nova 服务器、Neutron 端口和安全组。您可以使用提供的 Ansible playbook 来协助部署过程。
- 在您自己的基础架构上带有 Kuryr 的 OpenStack 上安装集群: 您可以在使用 Kuryr SDN 的用户置备的 RHOSP 基础架构上安装 OpenShift Container Platform。
19.1.3. 为旧 HTTPS 证书扫描 RHOSP 端点
从 OpenShift Container Platform 4.10 开始,HTTPS 证书必须包含主题替代名称(SAN)字段。运行以下脚本,为仅包含 CommonName
字段的传统证书在 Red Hat OpenStack Platform(RHOSP)目录中扫描每个 HTTPS 端点。
OpenShift Container Platform 在安装或升级前不会检查底层 RHOSP 基础架构是否有旧证书。使用提供的脚本来自行检查这些证书。在安装或升级集群前无法更新旧证书将导致集群无法正常工作。
先决条件
在运行脚本的机器中,有以下软件:
- Bash 版本 4.0 或更高版本
-
grep
- OpenStack 客户端
-
jq
- openssl 版本 1.1.1l 或更高版本
- 使用目标云的 RHOSP 凭证填充机器。
流程
将以下脚本保存到机器中:
#!/usr/bin/env bash set -Eeuo pipefail declare catalog san catalog="$(mktemp)" san="$(mktemp)" readonly catalog san declare invalid=0 openstack catalog list --format json --column Name --column Endpoints \ | jq -r '.[] | .Name as $name | .Endpoints[] | select(.interface=="public") | [$name, .interface, .url] | join(" ")' \ | sort \ > "$catalog" while read -r name interface url; do # Ignore HTTP if [[ ${url#"http://"} != "$url" ]]; then continue fi # Remove the schema from the URL noschema=${url#"https://"} # If the schema was not HTTPS, error if [[ "$noschema" == "$url" ]]; then echo "ERROR (unknown schema): $name $interface $url" exit 2 fi # Remove the path and only keep host and port noschema="${noschema%%/*}" host="${noschema%%:*}" port="${noschema##*:}" # Add the port if was implicit if [[ "$port" == "$host" ]]; then port='443' fi # Get the SAN fields openssl s_client -showcerts -servername "$host" -connect "$host:$port" </dev/null 2>/dev/null \ | openssl x509 -noout -ext subjectAltName \ > "$san" # openssl returns the empty string if no SAN is found. # If a SAN is found, openssl is expected to return something like: # # X509v3 Subject Alternative Name: # DNS:standalone, DNS:osp1, IP Address:192.168.2.1, IP Address:10.254.1.2 if [[ "$(grep -c "Subject Alternative Name" "$san" || true)" -gt 0 ]]; then echo "PASS: $name $interface $url" else invalid=$((invalid+1)) echo "INVALID: $name $interface $url" fi done < "$catalog" # clean up temporary files rm "$catalog" "$san" if [[ $invalid -gt 0 ]]; then echo "${invalid} legacy certificates were detected. Update your certificates to include a SAN field." exit 1 else echo "All HTTPS certificates for this cloud are valid." fi
- 运行脚本。
-
将脚本报告为
INVALID
的任何证书替换为包含 SAN 字段的证书。
在安装 OpenShift Container Platform 4.10 之前,您必须替换所有旧的 HTTPS 证书,或将集群更新至该版本。旧证书将被拒绝,并显示以下信息:
x509: certificate relies on legacy Common Name field, use SANs instead
19.1.3.1. 手动为旧 HTTPS 证书扫描 RHOSP 端点
从 OpenShift Container Platform 4.10 开始,HTTPS 证书必须包含主题替代名称(SAN)字段。如果您无法访问 "Scanning RHOSP 端点用于旧 HTTPS 证书"中列出的预备工具,请执行以下步骤为仅包含 CommonName
字段的传统证书扫描 Red Hat OpenStack Platform (RHOSP)目录中的每个 HTTPS 端点。
OpenShift Container Platform 在安装或升级前不会检查底层 RHOSP 基础架构是否有旧证书。使用以下步骤自己检查这些证书。在安装或升级集群前无法更新旧证书将导致集群无法正常工作。
流程
在命令行中运行以下命令查看 RHOSP 公共端点的 URL:
$ openstack catalog list
记录命令返回的每个 HTTPS 端点的 URL。
对于每个公共端点,请注意主机和端口。
提示通过删除方案、端口和路径来确定端点的主机。
对于每个端点,运行以下命令来提取证书的 SAN 字段:
设置
host
变量:$ host=<host_name>
设置
port
变量:$ port=<port_number>
如果端点的 URL 中没有包括端口,使用值
443
。检索证书的 SAN 字段:
$ openssl s_client -showcerts -servername "$host" -connect "$host:$port" </dev/null 2>/dev/null \ | openssl x509 -noout -ext subjectAltName
输出示例
X509v3 Subject Alternative Name: DNS:your.host.example.net
对于每个端点,查找类似于上例的输出。如果没有端点的输出,则该端点的证书无效,必须重新发布。
在安装 OpenShift Container Platform 4.10 之前,您必须替换所有旧的 HTTPS 证书,或将集群更新至该版本。旧证书被拒绝,并显示以下信息:
x509: certificate relies on legacy Common Name field, use SANs instead