12.3.9. 重新部署自定义 registry 或路由器证书
当因为重新部署了 CA 节点被撤离时,registry 和路由器 pod 会重启。如果 registry 和路由器证书也未被新的 CA 重新部署,这可能会导致中断,因为它们无法使用其旧证书访问 master。
12.3.9.1. 手动重新部署 registry 证书
要手动重新部署 registry 证书,您必须将新的 registry 证书添加到名为 registry-certificates
的 secret 中,然后重新部署 registry:
使用以下步骤的其余部分切换到
default
项目:$ oc project default
如果您的 registry 最初是在 OpenShift Container Platform 3.1 或更早版本上创建,它可能仍在使用环境变量来存储证书(这已被淘汰使用 secret)。
运行以下命令,并查找
OPENSHIFT_CA_DATA
、OPENSHIFT_CERT_DATA
、OPENSHIFT_KEY_DATA
环境变量:$ oc set env dc/docker-registry --list
如果不存在,请跳过这一步。如果这样做,请创建以下
ClusterRoleBinding
:$ cat <<EOF | apiVersion: v1 groupNames: null kind: ClusterRoleBinding metadata: creationTimestamp: null name: registry-registry-role roleRef: kind: ClusterRole name: system:registry subjects: - kind: ServiceAccount name: registry namespace: default userNames: - system:serviceaccount:default:registry EOF oc create -f -
然后,运行以下命令来删除环境变量:
$ oc set env dc/docker-registry OPENSHIFT_CA_DATA- OPENSHIFT_CERT_DATA- OPENSHIFT_KEY_DATA- OPENSHIFT_MASTER-
本地设置以下环境变量使其更复杂:
$ REGISTRY_IP=`oc get service docker-registry -o jsonpath='{.spec.clusterIP}'` $ REGISTRY_HOSTNAME=`oc get route/docker-registry -o jsonpath='{.spec.host}'`
创建新 registry 证书:
$ oc adm ca create-server-cert \ --signer-cert=/etc/origin/master/ca.crt \ --signer-key=/etc/origin/master/ca.key \ --hostnames=$REGISTRY_IP,docker-registry.default.svc,docker-registry.default.svc.cluster.local,$REGISTRY_HOSTNAME \ --cert=/etc/origin/master/registry.crt \ --key=/etc/origin/master/registry.key \ --signer-serial=/etc/origin/master/ca.serial.txt
仅从 Ansible 主机清单文件中列出的第一个 master 运行
oc adm
命令,默认为 /etc/ansible/hosts。使用新的 registry 证书更新
registry-certificates
secret:$ oc create secret generic registry-certificates \ --from-file=/etc/origin/master/registry.crt,/etc/origin/master/registry.key \ -o json --dry-run | oc replace -f -
重新部署 registry:
$ oc rollout latest dc/docker-registry