Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

12.3.9. 重新部署自定义 registry 或路由器证书

当因为重新部署了 CA 节点被撤离时,registry 和路由器 pod 会重启。如果 registry 和路由器证书也未被新的 CA 重新部署,这可能会导致中断,因为它们无法使用其旧证书访问 master。

12.3.9.1. 手动重新部署 registry 证书

要手动重新部署 registry 证书,您必须将新的 registry 证书添加到名为 registry-certificates 的 secret 中,然后重新部署 registry:

  1. 使用以下步骤的其余部分切换到 default 项目:

    $ oc project default
  2. 如果您的 registry 最初是在 OpenShift Container Platform 3.1 或更早版本上创建,它可能仍在使用环境变量来存储证书(这已被淘汰使用 secret)。

    1. 运行以下命令,并查找 OPENSHIFT_CA_DATAOPENSHIFT_CERT_DATAOPENSHIFT_KEY_DATA 环境变量:

      $ oc set env dc/docker-registry --list
    2. 如果不存在,请跳过这一步。如果这样做,请创建以下 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-
  3. 本地设置以下环境变量使其更复杂:

    $ REGISTRY_IP=`oc get service docker-registry -o jsonpath='{.spec.clusterIP}'`
    $ REGISTRY_HOSTNAME=`oc get route/docker-registry -o jsonpath='{.spec.host}'`
  4. 创建新 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

  5. 使用新的 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 -
  6. 重新部署 registry:

    $ oc rollout latest dc/docker-registry