Renovación de certificados

Puede renovar los certificados creados por el instalador después de instalar IBM Cloud Private.

Tipo de usuario o nivel de acceso necesario: administrador de clúster o administrador de equipos

Puede actualizar los certificados de los componentes siguientes:

Componente Directorio
Entidad emisora de certificados raíz cluster/cfc-certs/root-ca
Etcd cluster/cfc-certs/etcd
Front-Proxy cluster/cfc-certs/front-proxy
Kubernetes cluster/cfc-certs/kubernetes
IPSec cluster/cfc-certs/ipsec
Helm cluster/cfc-certs/helm

Antes de comenzar:

Verifique que el clúster IBM Cloud Private está en ejecución.

Nota: Al ejecutar el mandato para renovar un certificado, los servicios de gestión relacionados podrían no estar disponibles durante un breve periodo de tiempo. El mandato no afecta a las aplicaciones del clúster.

Lleve a cabo los pasos siguientes para realizar una copia de seguridad de los certificados existentes:

  1. Inicie sesión en el nodo de arranque.
  2. Cambie al directorio de clúster y cree una copia de seguridad de todos los certificados ejecutando los mandatos siguientes:
     cd <installation_directory>/cluster/
     cp -r cfc-certs cfc-certs.bak
    

Renovación de los certificados de entidad emisora de certificados raíz

  1. Actualice la entidad emisora de certificados anterior: Suprima el certificado de entidad emisora de certificados anterior, ca.crt, ejecutando el mandato siguiente:

       rm -rf <cluster_dir>/cfc-certs/root-ca
    
  2. Suprima los certificados y las claves relacionados con la entidad emisora de certificados anterior. Por ejemplo:

       rm -rf <cluster_dir>/cfc-certs/kubernetes
       rm -rf <cluster_dir>/cfc-certs/helm
       rm -rf <cluster_dir>/cfc-certs/ipsec
    
  3. Ejecute el mandato siguiente para renovar los certificados root-ca:

  4. Reinicie manualmente los servicios volviendo a cargarlos. Se deben volver a cargar todas las señales predeterminadas y los servicios relacionados. Para obtener más información, consulte Recarga de servicios.

  5. Vuelva a crear manualmente el secreto de extracción de imagen. Para obtener más información, consulte Volver a crear el secreto de obtención de imagen

  6. Renueve todos los certificados cert-manager que utilizan la entidad emisora de certificados. Para obtener más información, consulte Renovación de certificados Cert-Manager.

  7. Reinicie Docker

     sudo systemctl restart docker
    
  8. Ejecute el mandato siguiente para reiniciar Kubelet en el nodo maestro.

     sudo systemctl restart kubelet
    

Renovación de certificados etcd

  1. Suprima los certificados anteriores ejecutando el mandato siguiente:

       rm -rf <cluster_dir>/cfc-certs/etcd
    
  2. Ejecute el mandato siguiente para sustituir los certificados etcd:

Renovación de certificados front proxy

  1. Suprima los certificados anteriores ejecutando el mandato siguiente:

     rm -rf <cluster_dir>/cfc-certs/front
    
  2. Ejecute el mandato siguiente para sustituir los certificados front proxy:

Renovación de certificados kubernetes

  1. Suprima los certificados anteriores ejecutando el mandato siguiente:

     rm -rf <cluster_dir>/cfc-certs/kubernetes
    
  2. Ejecute el mandato siguiente para sustituir los certificados kubernetes:

Renovación de certificados ipsec

  1. Suprima los certificados anteriores ejecutando el mandato siguiente:

     rm -rf <cluster_dir>/cfc-certs/ipsec
    
  2. Ejecute el mandato siguiente para sustituir los certificados ipsec:

Renovación de certificados helm

  1. Suprima los certificados anteriores ejecutando el mandato siguiente:

     rm -rf <cluster_dir>/cfc-certs/helm
    
  2. Ejecute el mandato siguiente para sustituir los certificados helm:

Recarga de servicios

Recarga de señal predeterminada

Después de sustituir la entidad emisora de certificados raíz, debe suprimir la señal predeterminada de todos los espacios de nombres y reiniciar los servicios relacionados. Puede utilizar el código siguiente para suprimir la señal predeterminada de todos los espacios de nombres y reiniciar los servicios relacionados.

kubectl get secret --no-headers --all-namespaces -o=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace | grep default-token | while read token; do
    secret_name=$(echo $token | awk '{print $1}')
    secret_namespace=$(echo $token | awk '{print $2}')
    echo "-----------------------------------------------------------------------"
    echo "|                      Token: ${secret_name}"
    echo "|                  Namespace: ${secret_namespace}"
    echo "-----------------------------------------------------------------------"
    echo "Deleteing default token ..."
    kubectl -n ${secret_namespace} delete secret ${secret_name} &>/dev/null
    echo "Reloading services ..."
    kubectl -n ${secret_namespace} get po --field-selector=status.phase!=Completed,status.phase!=Succeeded,status.phase!=Unknow --no-headers -o=custom-columns=NAME:.metadata.name | while read pod; do
    secret_used=$(kubectl -n ${secret_namespace} get po ${pod} -oyaml | egrep 'secretName: default-token|secretName: calico-node-token' &>/dev/null || echo no && echo yes)
    if [[ "$secret_used" == "yes" ]]; then
        echo "    - Restarting pod ${pod} ..."
        kubectl -n ${secret_namespace} delete po ${pod} --grace-period=0 --force &>/dev/null
    fi
    done
    echo
done

Vuelva a crear el secreto de extracción de imagen

Renovación de certificados cert-manager

Después de sustituir la entidad emisora de certificados raíz, debe renovar todos los certificados firmados por la entidad emisora de certificados raíz, y reiniciar los servicios que utilice esos certificados. Cert-manager crea el ClusterIssuer predeterminado de la entidad emisora de certificados raíz, por lo que todos los certificados emitidos por cert-manager y firmados por el ClusterIssuer predeterminado también se deben renovar.

El código siguiente suprime los secretos de Kubernetes asociados con cada certificado cert-manager para renovar el certificado y reiniciar los servicios que utilizan el certificado.

kubectl get cert --all-namespaces -o custom-columns=:spec.secretName,:metadata.namespace --no-headers -l certmanager.k8s.io/issuer-name=icp-ca-issuer -l certmanager.k8s.io/issuer-kind=ClusterIssuer | while read secret ; do
    name=$(echo $secret | awk '{print $1}')
    namespace=$(echo $secret | awk '{print $2}')
    kubectl delete secret $name -n $namespace
    echo "Secret $name was deleted."
hecho