View a markdown version of this page

Proteja cargas de trabalho do Kubernetes com certificados ACM - AWS Certificate Manager

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Proteja cargas de trabalho do Kubernetes com certificados ACM

Você pode usar certificados públicos Gerenciador de certificados da AWS exportáveis com AWS Controllers for Kubernetes (ACK) para emitir e exportar certificados TLS públicos do ACM para suas cargas de trabalho do Kubernetes. Essa integração permite que você proteja os pods do Amazon Elastic Kubernetes Service (Amazon EKS) e encerre o TLS no seu Kubernetes Ingress. Para começar, consulte o ACM Controller for Kubernetes em. GitHub

dica

Se você usar o cert-manager ou outro cliente ACME padrão do setor em seu cluster Kubernetes, poderá automatizar a emissão de certificados do ACM por meio do protocolo ACME. Nessa abordagem, o cliente ACME gera e mantém a chave privada. Para obter mais informações, consulte Automação de certificados ACME.

AWS O Controllers for Kubernetes (ACK) estende a API Kubernetes para gerenciar recursos usando manifestos nativos do Kubernetes. AWS O controlador de serviço ACK para ACM fornece gerenciamento automatizado do ciclo de vida de certificados em seu fluxo de trabalho do Kubernetes. Quando você cria um recurso de certificado ACM no Kubernetes, o controlador ACK executa as seguintes ações:

  1. Solicita um certificado do ACM, que gera a solicitação de assinatura de certificado (CSR).

  2. Aguarda a conclusão da validação do domínio e a emissão do certificado pelo ACM.

  3. Se o exportTo campo for especificado, exporta o certificado emitido e a chave privada e os armazena no segredo do Kubernetes especificado.

  4. Se o exportTo campo for especificado e o certificado estiver qualificado para renovação, atualize o Kubernetes Secret com certificados renovados antes da expiração.

Os certificados emitidos publicamente exigem a validação do domínio antes que o ACM possa emiti-los. Você pode usar o controlador de serviço ACK para o Amazon Route 53 para criar automaticamente os registros CNAME de validação de DNS necessários na sua zona hospedada.

Opções de uso do certificado

Você pode usar certificados do ACM com o Kubernetes de algumas maneiras:

O ELB se conecta ao Ingress, que encaminha para o Serviço distribuindo tráfego entre Pod1, Pod2 e Pod3.
  1. Encerramento do balanceador de carga (sem exportação): emita certificados por meio do ACK e use-os para encerrar o TLS em um AWS balanceador de carga. O certificado permanece no ACM e é descoberto automaticamente pelo AWS Load Balancer Controller. Essa abordagem não exige a exportação do certificado.

  2. Encerramento de entrada (com exportação): exporte certificados do ACM e armazene-os no Kubernetes Secrets para encerramento de TLS no nível de entrada. Isso permite que você use certificados diretamente em suas cargas de trabalho do Kubernetes.

nota

Para casos de uso que exigem certificados privados, consulte AWS Private CA Connector for Kubernetes, um plug-in de gerenciamento de certificados.

Pré-requisitos

Antes de instalar o controlador de serviço ACK para ACM, verifique se você tem o seguinte:

  • Um cluster Kubernetes.

  • Helm instalado.

  • O kubectl configurado para se comunicar com o cluster.

  • eksctlinstalado para configurar associações de identidade de pod no EKS.

Instale o controlador de serviço ACK para ACM

Use o Helm para instalar o controlador de serviço ACK para ACM em seu cluster Amazon EKS.

  1. Crie um namespace para o controlador ACK.

    $ kubectl create namespace ack-system --dry-run=client -o yaml | kubectl apply -f -
  2. Crie uma associação de identidade de pod para o controlador ACK. CLUSTER_NAMESubstitua pelo nome do seu cluster e REGION pela sua AWS região.

    $ 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. Faça login no registro público do Amazon ECR.

    $ aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
  4. Instale o controlador de serviço ACK para ACM. REGIONSubstitua pela sua AWS região.

    $ 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 se o controlador está em execução.

    $ kubectl get pods -n ack-system

Para obter mais informações sobre associações de identidade de pod, consulte Identidade de pod do EKS no Guia do usuário do Amazon EKS.

Exemplo: Encerrar o TLS na entrada

O exemplo a seguir demonstra como exportar um certificado ACM e usá-lo para encerrar o TLS no nível de entrada do Kubernetes. Essa configuração cria um certificado ACM, o exporta para um segredo do Kubernetes e configura um recurso de entrada para usar o certificado para encerramento de TLS.

Neste exemplo:

  • O segredo é criado para armazenar o certificado exportado () exported-cert-secret

  • O recurso de certificado ACK solicita um certificado do ACM para seu domínio e o exporta para o exported-cert-secret segredo.

  • O recurso Ingress faz referência exported-cert-secret ao para encerrar o TLS para tráfego de entrada.

Substitua ${HOSTNAME} pelo nome do domínio.

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

Depois de implantado, o controlador de serviço ACK para ACM gerencia automaticamente o ciclo de vida do certificado, incluindo renovações. Quando o ACM renova o certificado, o controlador atualiza o exported-cert-secret segredo com o novo certificado, garantindo que seu Ingress continue usando certificados válidos sem intervenção manual.