2.3. 使用单个自定义证书为公共服务更新 control plane
您可能需要使用自己的内部证书颁发机构(CA)保护公共 API。要将自动生成的路由证书替换为来自您的 CA 的通用证书,您必须创建一个包含 CA 证书的 secret,以及信任链中的所有证书。
先决条件
-
您有每个公共服务的列表,用于应用您的自定义服务证书。您可以使用
oc route list -n openstack命令获取此列表。将此信息用于证书的 DNS 名称,并在openstack_control_plane.yaml自定义资源(CR)中查找要编辑的相关服务。
流程
在
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创建名为
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 从清单文件创建 secret:
oc apply -f cacerts.yaml为名为
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 创建 secret
oc apply -f certificate-secret.yaml编辑
openstack_control_plane.yaml自定义资源,并将捆绑包添加为caBundleSecretName的参数:apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: myctlplane spec: tls: podLevel: enabled: true caBundleSecretName: cacerts将 secret 服务证书应用到
apiOverride字段中的每个公共服务。例如,为 Identity 服务(keystone)输入以下内容:apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: myctlplane namespace: openstack spec: ... keystone: apiOverride: tls: secretName: certificate-secretCompute 服务(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应用 control plane 更改
oc apply -f openstack_control_plane.yaml