View a markdown version of this page

Proteggi i carichi di lavoro Kubernetes con certificati ACM - AWS Gestore certificati

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Proteggi i carichi di lavoro Kubernetes con certificati ACM

Puoi utilizzare certificati pubblici AWS Certificate Manager esportabili con AWS Controllers for Kubernetes (ACK) per emettere ed esportare certificati TLS pubblici da ACM ai tuoi carichi di lavoro Kubernetes. Questa integrazione ti consente di proteggere i pod Amazon Elastic Kubernetes Service (Amazon EKS) e di terminare il TLS sul tuo Kubernetes Ingress. Per iniziare, consulta ACM Controller for Kubernetes su. https://github.com/aws-controllers-k8s/acm-controller GitHub

Suggerimento

Se utilizzi cert-manager o un altro client ACME standard del settore nel tuo cluster Kubernetes, puoi invece automatizzare l'emissione dei certificati da ACM tramite il protocollo ACME. In questo approccio, il client ACME genera e detiene la chiave privata. Per ulteriori informazioni, consulta Automazione dei certificati ACME.

AWS Controllers for Kubernetes (ACK) estende l'API Kubernetes per gestire le risorse utilizzando manifesti Kubernetes nativi. AWS Il controller di servizio ACK per ACM fornisce una gestione automatizzata del ciclo di vita dei certificati all'interno del flusso di lavoro Kubernetes. Quando crei una risorsa di certificato ACM in Kubernetes, il controller ACK esegue le seguenti azioni:

  1. Richiede un certificato da ACM, che genera la richiesta di firma del certificato (CSR).

  2. Attende il completamento della convalida del dominio e l'emissione del certificato da parte di ACM.

  3. Se il exportTo campo è specificato, esporta il certificato e la chiave privata emessi e li archivia nel Kubernetes Secret specificato.

  4. Se il exportTo campo è specificato e il certificato è idoneo per il rinnovo, aggiorna Kubernetes Secret con certificati rinnovati prima della scadenza.

I certificati emessi pubblicamente richiedono la convalida del dominio prima che ACM possa emetterli. Puoi utilizzare il controller di servizio ACK per Amazon Route 53 per creare automaticamente i record CNAME di convalida DNS richiesti nella tua zona ospitata.

Opzioni di utilizzo del certificato

Puoi utilizzare i certificati ACM con Kubernetes in diversi modi:

ELB si connette a Ingress, che indirizza al servizio distribuendo il traffico su Pod1, Pod2 e Pod3.
  1. Terminazione del servizio di bilanciamento del carico (senza esportazione): emette certificati tramite ACK e li utilizza per terminare TLS presso un load balancer. AWS Il certificato rimane in ACM e viene rilevato automaticamente dal Load Balancer Controller. AWS Questo approccio non richiede l'esportazione del certificato.

  2. Terminazione dell'ingresso (con esportazione): esporta i certificati da ACM e li archivia in Kubernetes Secrets for TLS termination a livello di Ingress. Ciò consente di utilizzare i certificati direttamente all'interno dei carichi di lavoro Kubernetes.

Nota

Per i casi d'uso che richiedono certificati privati, consulta AWS Private CA Connector for Kubernetes, un plug-in cert-manager.

Prerequisiti

Prima di installare il controller di servizio ACK per ACM, assicurati di disporre di quanto segue:

  • Un cluster Kubernetes.

  • Helm installato.

  • kubectl configurato per comunicare con il cluster.

  • eksctlinstallato per configurare le associazioni di identità dei pod su EKS.

Installa il controller di servizio ACK per ACM

Usa Helm per installare il controller di servizio ACK per ACM nel tuo cluster Amazon EKS.

  1. Crea uno spazio dei nomi per il controller ACK.

    $ kubectl create namespace ack-system --dry-run=client -o yaml | kubectl apply -f -
  2. Crea un'associazione di identità pod per il controller ACK. Sostituiscilo CLUSTER_NAME con il nome del tuo cluster e REGION con la tua AWS regione.

    $ 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. Accedi al registro pubblico Amazon ECR.

    $ aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
  4. Installa il controller di servizio ACK per ACM. Sostituiscilo REGION con la tua AWS regione.

    $ 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. Verifica che il controller sia in funzione.

    $ kubectl get pods -n ack-system

Per ulteriori informazioni sulle associazioni di identità dei pod, consulta EKS Pod Identity nella Amazon EKS User Guide.

Esempio: terminare TLS all'ingresso

L'esempio seguente dimostra come esportare un certificato ACM e utilizzarlo per terminare TLS a livello di Kubernetes Ingress. Questa configurazione crea un certificato ACM, lo esporta in un Kubernetes Secret e configura una risorsa Ingress per utilizzare il certificato per la terminazione TLS.

In questo esempio:

  • Il segreto viene creato per archiviare il certificato esportato () exported-cert-secret

  • La risorsa ACK Certificate richiede un certificato da ACM per il tuo dominio e lo esporta nel exported-cert-secret Secret.

  • La risorsa Ingress fa riferimento exported-cert-secret a per terminare TLS per il traffico in entrata.

Sostituiscilo ${HOSTNAME} con il tuo nome di 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 volta implementato, il controller di servizio ACK per ACM gestisce automaticamente il ciclo di vita del certificato, inclusi i rinnovi. Quando ACM rinnova il certificato, il controller aggiorna il exported-cert-secret segreto con il nuovo certificato, assicurando che Ingress continui a utilizzare certificati validi senza interventi manuali.