Entidad de certificación (CA) personalizada en Azure Kubernetes Service (AKS) (versión preliminar)

AKS genera y usa los siguientes certificados, entidades de certificación (CA) y cuentas de servicio (SA):

  • El servidor de API de AKS crea una entidad de certificación denominada CA del clúster.
  • El servidor de API tiene una CA del clúster que firma los certificados para la comunicación unidireccional desde el servidor de API a kubelets.
  • Cada kubelet también crea una solicitud de firma de certificado (CSR), que está firmada por la CA del clúster, para la comunicación desde el kubelet al servidor de la API.
  • El agregador de API usa la CA del clúster para emitir certificados para la comunicación con otras API. El agregador de API también puede tener su propia CA para emitir esos certificados, pero actualmente usa la CA del clúster.
  • Cada nodo usa un token de cuenta de servicio (SA), que está firmado por la entidad de certificación del clúster.
  • El cliente kubectl tiene un certificado para comunicarse con el clúster de AKS.

También puede crear entidades de certificación (CA) personalizadas que permiten establecer la confianza entre los clústeres de Azure Kubernetes Service (AKS) y las cargas de trabajo, como registros privados, servidores proxy y firewalls. Un secreto de Kubernetes almacena la información de la entidad de certificación y, luego, se pasa a todos los nodos del clúster. Esta característica se aplica por grupo de nodos, por lo que debe habilitarla en grupos de nodos nuevos y existentes.

En este artículo se muestra cómo crear entidades de certificación personalizadas y aplicarlas a los clústeres de AKS.

Prerrequisitos

  • Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita.
  • CLI de Azure instalada (versión 2.43.0 o posterior).
  • Cadena de certificado codificada en base64 o un archivo de texto con certificado.

Limitaciones

  • Actualmente, esta característica no se admite para grupos de nodos de Windows.

Instalación de la extensión de la CLI de Azure aks-preview

Importante

Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

  1. Instale la extensión aks-preview mediante el comando az extension add.

    az extension add --name aks-preview
    
  2. Actualiza a la última versión de la extensión mediante el comando az extension update.

    az extension update --name aks-preview
    

Registro de la marca de característica CustomCATrustPreview

  1. Registre la marca de características de CustomCATrustPreview mediante el comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    

    Tarda unos minutos en que el estado muestre Registrado.

  2. Comprobar el estado del registro mediante el comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    
  3. Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Instalación de una entidad de certificación personalizada en grupos de nodos de AKS

Instalación de entidades de certificación en grupos de nodos de AKS

  • Si el entorno requiere que las entidades de certificación personalizadas se agreguen al almacén de confianza del nodo para el aprovisionamiento correcto, debe pasar un archivo de texto que contenga hasta diez certificados separados por línea en blanco durante las operaciones az aks create o az aks update. Archivo de texto de ejemplo:

    -----BEGIN CERTIFICATE-----
    cert1
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    cert2
    -----END CERTIFICATE-----
    

Creación de una entidad de certificación durante el arranque del grupo de nodos

  • Instale las entidades de certificación durante la creación del grupo de nodos mediante el parámetro[az aks create][az-aks-create] command and specifying your text file for the --custom-ca-trust-certificates".

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs
    

Rotación de entidades de certificación para disponibilidad durante el arranque del grupo de nodos

  • Actualice las entidades de certificación que se pasan al clúster durante el arranque mediante el comando az aks update y al especificar el archivo de texto para el parámetro --custom-ca-trust-certificates.

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --custom-ca-trust-certificates pathToFileWithCAs
    

    Nota:

    Esta operación desencadena una actualización del modelo, lo que garantiza que los nuevos nodos tengan las entidades de certificación más recientes y necesarias para el aprovisionamiento correcto. AKS crea nodos adicionales, purga los existentes, los elimina y los reemplaza con los nodos que tienen el nuevo conjunto de entidades de certificación instaladas.

Instalación de entidades de certificación después de la creación del grupo de nodos

Si el entorno se puede aprovisionar correctamente sin las entidades de certificación personalizadas, puede proporcionar las entidades de certificación mediante la implementación de un secreto en el espacio de nombres kube-system. Este enfoque permite la rotación de certificados sin necesidad de recreación de nodos.

  • Cree un manifiesto YAML de [secreto de Kubernetes][secretos-kubernetes] con la cadena de certificado codificada en base64 en el campo data.

    apiVersion: v1
    kind: Secret
    metadata: 
        name: custom-ca-trust-secret
        namespace: kube-system
    type: Opaque
    data:
        ca1.crt: |
          {base64EncodedCertStringHere}
        ca2.crt: |
          {anotherBase64EncodedCertStringHere}
    

    Los datos de este secreto se usan para actualizar la CA en todos los nodos. Asegúrese de que el secreto se llama custom-ca-trust-secret y se crea en el espacio de nombres kube-system. La instalación de entidades de certificación mediante el secreto en el espacio de nombres kube-system permite la rotación de entidades de certificación sin la necesidad de volver a crear nodos. Para actualizar o quitar una CA, puede edita y aplicar el manifiesto de YAML. El clúster sondea los cambios y actualiza los nodos en consecuencia. Esto puede tardar un par de minutos en aplicar los cambios.

    Nota:

    Es posible que sea necesario reiniciar containerd en el nodo para que las entidades de certificación se recojan correctamente. Si parece que las entidades de certificación no se agregan correctamente al almacén de confianza del nodo, puede desencadenar un reinicio mediante el siguiente comando desde el shell del nodo:

    systemctl restart containerd

Configuración de un nuevo clúster de AKS para usar una entidad de certificación personalizada

  • Para configurar un nuevo clúster de AKS para que use una entidad de certificación personalizada, use el comando az aks create con el parámetro --enable-custom-ca-trust.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --enable-custom-ca-trust
    

Configure un clúster de AKS para usar una entidad de certificación personalizada con las entidades de certificación instaladas antes de que el nodo arranque.

  • Para configurar un nuevo clúster de AKS para usa una entidad de certificación personalizada con entidades de certificación instaladas antes de que el nodo arranque, use el comando az aks create con los parámetros --enable-custom-ca-trust y --custom-ca-trust-certificates.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs
    

Configuración de un clúster de AKS existente para tener instaladas entidades de certificación personalizadas antes de que el nodo arranque

  • Para configurar un clúster de AKS existente para que las entidades de certificación personalizadas se agreguen al almacén de confianza del nodo antes de que se inicie, use el comando az aks update con el parámetro --custom-ca-trust-certificates.

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --custom-ca-trust-certificates pathToFileWithCAs
    

Configuración de un nuevo grupo de nodos para usar una entidad de certificación personalizada

  • Para configurar un nuevo grupo de nodos para usar una entidad de certificación personalizada, use el comando az aks nodepool add con el parámetro --enable-custom-ca-trust.

    az aks nodepool add \
        --cluster-name myAKSCluster \
        --resource-group myResourceGroup \
        --name myNodepool \
        --enable-custom-ca-trust \
        --os-type Linux
    

    Si no existe ningún otro grupo de nodos con la característica habilitada, el clúster tiene que conciliar su configuración para que los cambios surtan efecto. Esta operación se realiza automáticamente como parte del bucle de conciliación de AKS. Antes de la operación, el conjunto de demonios y los pods no aparecen en el clúster. Puede desencadenar una operación de conciliación inmediata mediante el comando az aks update. El conjunto de demonios y los pods aparecen una vez completada la actualización.

Configuración de un grupo de nodos existente para usar una entidad de certificación personalizada

  • Para configurar un grupo de nodos existente para usar una entidad de certificación personalizada, use el comando az aks nodepool update con el parámetro --enable-custom-trust-ca.

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name myNodepool \
        --enable-custom-ca-trust
    

    Si no existe ningún otro grupo de nodos con la característica habilitada, el clúster tiene que conciliar su configuración para que los cambios surtan efecto. Esta operación se realiza automáticamente como parte del bucle de conciliación de AKS. Antes de la operación, el conjunto de demonios y los pods no aparecen en el clúster. Puede desencadenar una operación de conciliación inmediata mediante el comando az aks update. El conjunto de demonios y los pods aparecen una vez completada la actualización.

Solución de problemas

La característica está habilitada y se agrega el secreto con entidades de certificación, pero se producen errores en las operaciones con el certificado X.509 firmado por un error de entidad desconocida.

Certificados con formato incorrecto pasados en el secreto

AKS requiere que los certificados pasados en el secreto creado por el usuario tenga el formato correcto y la codificación base64. Asegúrese de que las entidades de certificación que ha pasado están codificadas correctamente en base64 y que los archivos con entidades de certificación no tienen saltos de línea CRLF. Los certificados pasados a --custom-ca-trust-certificates no deben estar codificados en base64.

containerd no ha recogido nuevos certificados

En el shell del nodo, ejecute systemctl restart containerd. Una vez reiniciado containerd, el tiempo de ejecución del contenedor recoge adecuadamente los nuevos certificados.

Pasos siguientes

Para obtener más información sobre los procedimientos recomendados de seguridad de AKS, puede consultar los Procedimientos recomendados para administrar la seguridad y las actualizaciones de los clústeres en Azure Kubernetes Service (AKS).