12.3.9.2. 手动重新部署路由器证书
要手动重新部署路由器证书,您必须将新的路由器证书添加到名为 router-certs
的 secret 中,然后重新部署路由器:
使用以下步骤的其余部分切换到
default
项目:$ oc project default
如果您的路由器最初是在 OpenShift Container Platform 3.1 或更早版本创建的,它可能仍然使用环境变量来存储证书,这已被使用 service serving 证书 secret。
运行以下命令并查找
OPENSHIFT_CA_DATA
、OPENSHIFT_CERT_DATA
、OPENSHIFT_KEY_DATA
环境变量:$ oc set env dc/router --list
如果这些变量存在,请创建以下
ClusterRoleBinding
:$ cat <<EOF | apiVersion: v1 groupNames: null kind: ClusterRoleBinding metadata: creationTimestamp: null name: router-router-role roleRef: kind: ClusterRole name: system:router subjects: - kind: ServiceAccount name: router namespace: default userNames: - system:serviceaccount:default:router EOF oc create -f -
如果存在这些变量,请运行以下命令删除它们:
$ oc set env dc/router OPENSHIFT_CA_DATA- OPENSHIFT_CERT_DATA- OPENSHIFT_KEY_DATA- OPENSHIFT_MASTER-
获取证书。
- 如果您使用外部证书颁发机构(CA)为证书进行签名,请创建新的证书并根据内部流程将其提供给 OpenShift Container Platform。
如果使用内部 OpenShift Container Platform CA 签署证书,请运行以下命令:
重要以下命令生成内部签名的证书。它仅被信任 OpenShift Container Platform CA 的客户端信任。
$ cd /root $ mkdir cert ; cd cert $ oc adm ca create-server-cert \ --signer-cert=/etc/origin/master/ca.crt \ --signer-key=/etc/origin/master/ca.key \ --signer-serial=/etc/origin/master/ca.serial.txt \ --hostnames='*.hostnames.for.the.certificate' \ --cert=router.crt \ --key=router.key \
这些命令生成以下文件:
- 名为 router.crt 的新证书。
- 签名 CA 证书链 /etc/origin/master/ca.crt 的副本。如果您使用中间 CA,则此链可以包含多个证书。
- 对应的名为 router.key 的私钥。
创建新文件以串联生成的证书:
$ cat router.crt /etc/origin/master/ca.crt router.key > router.pem
注意只有在使用由 OpenShift CA 签名的证书时,此步骤才有效。如果使用自定义证书,则应该使用正确的 CA 链的文件而不是
/etc/origin/master/ca.crt
。在生成新的 secret 前,备份当前 secret:
$ oc get -o yaml --export secret router-certs > ~/old-router-certs-secret.yaml
创建新 secret 以容纳新证书和密钥,并替换现有 secret 的内容:
$ oc create secret tls router-certs --cert=router.pem \ 1 --key=router.key -o json --dry-run | \ oc replace -f -
- 1
- router.pem 是包含您生成的证书的串联的文件。
重新部署路由器:
$ oc rollout latest dc/router
最初部署路由器时,会将注解添加到路由器的服务,该服务自动创建一个名为
router-metrics-tls
的 服务证书 secret。要手动重新部署
router-metrics-tls
证书,可通过删除 secret、删除并重新添加注解到路由器服务来重新创建服务证书,然后重新部署router-metrics-tls
secret:从
router
服务中删除以下注解:$ oc annotate service router \ service.alpha.openshift.io/serving-cert-secret-name- \ service.alpha.openshift.io/serving-cert-signed-by-
删除现有的
router-metrics-tls
secret。$ oc delete secret router-metrics-tls
重新添加注解:
$ oc annotate service router \ service.alpha.openshift.io/serving-cert-secret-name=router-metrics-tls