1.2. 使用公共服务的自定义证书更新 control plane
您可能需要使用自己的内部证书颁发机构(CA)保护公共 API。要将自动生成的路由证书替换为来自您的 CA 的通用证书,您必须创建一个包含额外 CA 证书的 secret,以及信任链中的所有证书。
先决条件
-
您有每个公共服务的列表,用于应用您的自定义服务证书。您可以使用
oc route list -n openstack
命令获取此列表。对于您必须创建的证书数量、这些证书的 DNS 名称,以及在openstack_control_plane.yaml
自定义资源(CR)中查找要编辑的相关服务,请使用此信息。 - 您有一个用于公共服务的服务证书
流程
创建名为
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
为每个 secret 创建一个名为
api_certificate_<service>_secret.yaml 的清单文件
:apiVersion: v1 kind: Secret metadata: name: api_certificate_<service>_secret 1 namespace: openstack type: kubernetes.io/tls data: tls.crt: <cat tlscrt.pem | base64 -w0> 2 tls.key: <cat tlskey.pem | base64 -w0> 3 ca.crt: <cat cacrt.pem | base64 -w0> 4
创建 secret
oc apply -f api_certificate_<service>_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: api_certificate_keystone_secret
Compute 服务(nova)和 NoVNCProxy 的编辑如下所示:
apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: myctlplane namespace: openstack spec: ... nova: apiOverride: tls: secretName: api_certificate_nova_secret route: {} cellOverride: cell1: NoVNCProxy: tls: secretName: api_certificate_novavncproxy_secret
应用 control plane 更改
oc apply -f openstack_control_plane.yaml