View a markdown version of this page

Proteja las cargas de trabajo de Kubernetes con certificados ACM - AWS Gestor de certificados

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Proteja las cargas de trabajo de Kubernetes con certificados ACM

Puedes usar certificados públicos AWS Gestor de certificados exportables con AWS Controllers for Kubernetes (ACK) para emitir y exportar certificados TLS públicos desde ACM a tus cargas de trabajo de Kubernetes. Esta integración le permite proteger los pods de Amazon Elastic Kubernetes Service (Amazon EKS) y cancelar el TLS en su Kubernetes Ingress. Para empezar, consulte el controlador ACM para Kubernetes en. https://github.com/aws-controllers-k8s/acm-controller GitHub

sugerencia

Si utilizas cert-manager u otro cliente ACME estándar del sector en tu clúster de Kubernetes, puedes automatizar la emisión de certificados desde ACM mediante el protocolo ACME. En este enfoque, el cliente ACME genera y almacena la clave privada. Para obtener más información, consulte Automatización de certificados ACME.

AWS Controllers for Kubernetes (ACK) amplía la API de Kubernetes para administrar los recursos mediante manifiestos nativos de Kubernetes. AWS El controlador de servicios ACK para ACM proporciona una administración automatizada del ciclo de vida de los certificados dentro del flujo de trabajo de Kubernetes. Al crear un recurso de certificado ACM en Kubernetes, el controlador ACK realiza las siguientes acciones:

  1. Solicita un certificado a ACM, que genera la solicitud de firma del certificado (CSR).

  2. Espera a que se complete la validación del dominio y a que ACM emita el certificado.

  3. Si se especifica el exportTo campo, exporta el certificado emitido y la clave privada y los almacena en el secreto de Kubernetes que hayas especificado.

  4. Si se especifica el exportTo campo y el certificado puede renovarse, actualiza el secreto de Kubernetes con los certificados renovados antes de que caduquen.

Los certificados emitidos públicamente requieren la validación del dominio antes de que ACM pueda emitirlos. Puede usar el controlador de servicios ACK de Amazon Route 53 para crear automáticamente los registros CNAME de validación de DNS necesarios en su zona alojada.

Opciones de uso del certificado

Puedes usar los certificados de ACM con Kubernetes de varias maneras:

ELB se conecta a Ingress, que se dirige al Servicio y distribuye el tráfico entre Pod1, Pod2 y Pod3.
  1. Finalización del balanceador de cargas (sin exportación): emite certificados mediante ACK y úsalos para terminar el TLS en un balanceador de cargas. AWS El certificado permanece en ACM y la controladora del balanceador de carga lo descubre automáticamente. AWS Este enfoque no requiere exportar el certificado.

  2. Finalización del ingreso (con exportación): exporte los certificados de ACM y guárdelos en Kubernetes Secrets para cancelar el TLS a nivel de ingreso. Esto te permite usar los certificados directamente en tus cargas de trabajo de Kubernetes.

nota

Para los casos de uso que requieren certificados privados, consulta AWS Private CA Connector for Kubernetes, un complemento de gestión de certificados.

Requisitos previos

Antes de instalar el controlador de servicio ACK para ACM, asegúrese de disponer de lo siguiente:

  • Un clúster de Kubernetes.

  • Helm instalado.

  • kubectl configurado para comunicarse con el clúster.

  • eksctlinstalado para configurar las asociaciones de identidad de los pods en EKS.

Instale el controlador de servicio ACK para ACM

Utilice Helm para instalar el controlador de servicio ACK para ACM en su clúster de Amazon EKS.

  1. Cree un espacio de nombres para el controlador ACK.

    $ kubectl create namespace ack-system --dry-run=client -o yaml | kubectl apply -f -
  2. Cree una asociación de identidades de pods para el controlador ACK. CLUSTER_NAMESustitúyala por el nombre de tu clúster y REGION por tu AWS región.

    $ eksctl create podidentityassociation --cluster CLUSTER_NAME --region REGION \ --namespace ack-system \ --create-service-account \ --service-account-name ack-acm-controller \ --permission-policy-arns arn:aws:iam::aws:policy/AWSCertificateManagerFullAccess
  3. Inicie sesión en el registro público de Amazon ECR.

    $ aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
  4. Instale el controlador de servicio ACK para ACM. REGIONSustitúyalo por el de su AWS región.

    $ helm install -n ack-system ack-acm-controller oci://public.ecr.aws/aws-controllers-k8s/acm-chart --set serviceAccount.create=false --set serviceAccount.name=ack-acm-controller --set aws.region=REGION
  5. Verifique que el controlador esté funcionando.

    $ kubectl get pods -n ack-system

Para obtener más información sobre las asociaciones de identidades de pods, consulte EKS Pod Identity en la guía del usuario de Amazon EKS.

Ejemplo: terminar el TLS en el momento de la entrada

El siguiente ejemplo muestra cómo exportar un certificado de ACM y usarlo para cancelar TLS en el nivel de Kubernetes Ingress. Esta configuración crea un certificado ACM, lo exporta a un secreto de Kubernetes y configura un recurso de Ingress para usar el certificado para la terminación de TLS.

En este ejemplo:

  • El secreto se crea para almacenar el certificado exportado () exported-cert-secret

  • El recurso del certificado ACK solicita un certificado de ACM para su dominio y lo exporta al exported-cert-secret secreto.

  • El recurso Ingress hace referencia al TLS exported-cert-secret para terminar el tráfico entrante.

Sustituya ${HOSTNAME} por su nombre de dominio.

apiVersion: v1 kind: Secret type: kubernetes.io/tls metadata: name: exported-cert-secret namespace: demo-app data: tls.crt: "" tls.key: "" --- apiVersion: acm.services.k8s.aws/v1alpha1 kind: Certificate metadata: name: exportable-public-cert namespace: demo-app spec: domainName: ${HOSTNAME} options: certificateTransparencyLoggingPreference: ENABLED exportTo: namespace: demo-app name: exported-cert-secret key: tls.crt --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-traefik namespace: demo-app spec: tls: - hosts: - ${HOSTNAME} secretName: exported-cert-secret ingressClassName: traefik rules: - host: ${HOSTNAME} http: paths: - path: / pathType: Prefix backend: service: name: whoami port: number: 80

Una vez implementado, el controlador de servicios ACK para ACM administra automáticamente el ciclo de vida del certificado, incluidas las renovaciones. Cuando ACM renueva el certificado, el controlador actualiza el exported-cert-secret secreto con el nuevo certificado, lo que garantiza que Ingress siga utilizando certificados válidos sin intervención manual.