8.4. 创建 TLS 终止 HTTPS 负载均衡器
当您使用 TLS 终止的 HTTPS 负载均衡器时,您可以将 CPU 密集型加密操作卸载到负载均衡器,并允许负载均衡器使用第 7 层检查等高级功能。在 OpenShift 上的 Red Hat OpenStack Services (RHOSO)环境中,最好创建运行状况监控器,以确保您的后端成员仍然可用。
先决条件
-
管理员已为您创建一个项目,并为您提供了一个
clouds.yaml
文件来访问云。 python-openstackclient
软件包驻留在您的工作站上。dnf list installed python-openstackclient
$ dnf list installed python-openstackclient
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 可以从互联网访问的共享外部(public)子网。
TLS 公钥加密配置有以下特征:
-
从分配给负载均衡器 VIP 地址的 DNS 名称的外部证书颁发机构(CA)获取 TLS 证书、密钥和中间证书链,例如
www.example.com
。 - 证书、密钥和中间证书链位于当前目录中的独立文件中。
- 密钥和证书是 PEM 编码的。
- 中间证书链包含多个 PEM 编码并串联在一起的证书。
-
从分配给负载均衡器 VIP 地址的 DNS 名称的外部证书颁发机构(CA)获取 TLS 证书、密钥和中间证书链,例如
- 您必须将负载均衡服务(octavia)配置为使用 Key Manager 服务(barbican)。如需更多信息,请参阅使用 密钥管理器服务指南管理 secret。
流程
将密钥(
server.key
)、证书(server.crt
)和中间证书链(ca-chain.crt
)组合成单个 PKCS12 文件(server.p12
)。注意括号内的值是此流程中示例命令中使用的示例值。将这些示例值替换为适合您的站点的值。
Example
openssl pkcs12 -export -inkey server.key -in server.crt \ -certfile ca-chain.crt -passout pass: -out server.p12
$ openssl pkcs12 -export -inkey server.key -in server.crt \ -certfile ca-chain.crt -passout pass: -out server.p12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您密码保护 PKCS12 文件,以下步骤无法正常工作。
确认为您的云设置了系统
OS_CLOUD
变量:echo $OS_CLOUD
$ echo $OS_CLOUD my_cloud
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,重置变量:
export OS_CLOUD=my_other_cloud
$ export OS_CLOUD=my_other_cloud
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为替代方案,您可以在每次运行
openstack
命令时添加--os-cloud <cloud_name
> 选项指定云名称。使用 Key Manager 服务为 PKCS12 文件创建 secret 资源(
tls_secret1
)。Example
openstack secret store --name='tls_secret1' \ -t 'application/octet-stream' -e 'base64' \ --payload="$(base64 < server.p12)"
$ openstack secret store --name='tls_secret1' \ -t 'application/octet-stream' -e 'base64' \ --payload="$(base64 < server.p12)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在公共子网(
public_subnet
)上创建负载平衡器(lb1
)。Example
openstack loadbalancer create --name lb1 \ --vip-subnet-id public_subnet --wait
$ openstack loadbalancer create --name lb1 \ --vip-subnet-id public_subnet --wait
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
TERMINATED_HTTPS
侦听器(listener
1),并将机密资源引用为侦听器的默认 TLS 容器。Example
openstack loadbalancer listener create --protocol-port 443 \ --protocol TERMINATED_HTTPS \ --default-tls-container=\ $(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
$ openstack loadbalancer listener create --protocol-port 443 \ --protocol TERMINATED_HTTPS \ --default-tls-container=\ $(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建池(
pool1
),并使其成为侦听器的默认池。Example
本例中命令会创建一个 HTTP 池,它使用一个专用子网,其中包含在 TCP 端口 80 上托管非安全 HTTP 应用程序的后端服务器:
openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
$ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在池(
pool1
)上创建一个类型为(HTTP
)的运行状况监视器(healthmon1
),以连接后端服务器并测试路径(/
)。健康检查有助于避免误报。如果没有定义运行状况监视器,则假定成员服务器为
ONLINE
。Example
openstack loadbalancer healthmonitor create --name healthmon1 \ --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
$ openstack loadbalancer healthmonitor create --name healthmon1 \ --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将专用子网(
private_subnet
)上的非安全 HTTP 后端服务器(192.0.2.10
和192.0.2.11
)添加到池。Example
在本例中,后端服务器
192.0.2.10
和192.0.2.11
分别命名为member1
和member2
:openstack loadbalancer member create --name member1 --subnet-id \ private_subnet --address 192.0.2.10 --protocol-port 443 pool1 openstack loadbalancer member create --name member2 --subnet-id \ private_subnet --address 192.0.2.11 --protocol-port 443 pool1
$ openstack loadbalancer member create --name member1 --subnet-id \ private_subnet --address 192.0.2.10 --protocol-port 443 pool1 $ openstack loadbalancer member create --name member2 --subnet-id \ private_subnet --address 192.0.2.11 --protocol-port 443 pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看并验证负载平衡器(
lb1
)设置。Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当存在运行状况监控器并正常运行时,您可以检查每个成员的状态。
Example
openstack loadbalancer member show pool1 member1
$ openstack loadbalancer member show pool1 member1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 工作成员(
member1
)在其operating_status
中有一个ONLINE
值:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow