Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

12.3.9.2. 手动重新部署路由器证书

要手动重新部署路由器证书,您必须将新的路由器证书添加到名为 router-certs 的 secret 中,然后重新部署路由器:

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

    $ oc project default
  2. 如果您的路由器最初是在 OpenShift Container Platform 3.1 或更早版本创建的,它可能仍然使用环境变量来存储证书,这已被使用 service serving 证书 secret。

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

      $ oc set env dc/router --list
    2. 如果这些变量存在,请创建以下 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 -
    3. 如果存在这些变量,请运行以下命令删除它们:

      $ oc set env dc/router OPENSHIFT_CA_DATA- OPENSHIFT_CERT_DATA- OPENSHIFT_KEY_DATA- OPENSHIFT_MASTER-
  3. 获取证书。

    • 如果您使用外部证书颁发机构(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 的私钥。
  4. 创建新文件以串联生成的证书:

    $ cat router.crt /etc/origin/master/ca.crt router.key > router.pem
    注意

    只有在使用由 OpenShift CA 签名的证书时,此步骤才有效。如果使用自定义证书,则应该使用正确的 CA 链的文件而不是 /etc/origin/master/ca.crt

  5. 在生成新的 secret 前,备份当前 secret:

    $ oc get -o yaml --export secret router-certs > ~/old-router-certs-secret.yaml
  6. 创建新 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 是包含您生成的证书的串联的文件。
  7. 重新部署路由器:

    $ oc rollout latest dc/router

    最初部署路由器时,会将注解添加到路由器的服务,该服务自动创建一个名为 router-metrics-tls服务证书 secret

    要手动重新部署 router-metrics-tls 证书,可通过删除 secret、删除并重新添加注解到路由器服务来重新创建服务证书,然后重新部署 router-metrics-tls secret:

  8. router 服务中删除以下注解:

    $ oc annotate service router \
        service.alpha.openshift.io/serving-cert-secret-name- \
        service.alpha.openshift.io/serving-cert-signed-by-
  9. 删除现有的 router-metrics-tls secret。

    $ oc delete secret router-metrics-tls
  10. 重新添加注解:

    $ oc annotate service router \
        service.alpha.openshift.io/serving-cert-secret-name=router-metrics-tls