View a markdown version of this page

Sichern Sie Kubernetes-Workloads mit ACM-Zertifikaten - AWS Zertifikatsmanager

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Sichern Sie Kubernetes-Workloads mit ACM-Zertifikaten

Sie können AWS Certificate Manager exportierbare öffentliche Zertifikate mit AWS Controllers for Kubernetes (ACK) verwenden, um öffentliche TLS-Zertifikate von ACM auszustellen und in Ihre Kubernetes-Workloads zu exportieren. Diese Integration ermöglicht es Ihnen, Amazon Elastic Kubernetes Service (Amazon EKS) -Pods zu sichern und TLS auf Ihrem Kubernetes Ingress zu beenden. Um loszulegen, schauen Sie sich den ACM Controller für Kubernetes an. GitHub

Tipp

Wenn Sie Cert-Manager oder einen anderen ACME-Client nach Industriestandard in Ihrem Kubernetes-Cluster verwenden, können Sie stattdessen die Zertifikatsausstellung von ACM über das ACME-Protokoll automatisieren. Bei diesem Ansatz generiert und speichert der ACME-Client den privaten Schlüssel. Weitere Informationen finden Sie unter Automatisierung von ACME-Zertifikaten.

AWS Controllers for Kubernetes (ACK) erweitert die Kubernetes-API, um AWS Ressourcen mithilfe nativer Kubernetes-Manifeste zu verwalten. Der ACK Service Controller für ACM bietet ein automatisiertes Zertifikatslebenszyklusmanagement innerhalb Ihres Kubernetes-Workflows. Wenn Sie eine ACM-Zertifikatsressource in Kubernetes erstellen, führt der ACK-Controller die folgenden Aktionen aus:

  1. Fordert ein Zertifikat von ACM an, das die Zertifikatsignieranforderung (CSR) generiert.

  2. Wartet, bis die Domainvalidierung abgeschlossen ist und ACM das Zertifikat ausstellt.

  3. Wenn das exportTo Feld angegeben ist, exportiert das ausgestellte Zertifikat und den privaten Schlüssel und speichert sie in Ihrem angegebenen Kubernetes Secret.

  4. Wenn das exportTo Feld angegeben ist und das Zertifikat für eine Verlängerung in Frage kommt, aktualisiert Kubernetes Secret vor Ablauf mit erneuerten Zertifikaten.

Öffentlich ausgestellte Zertifikate erfordern eine Domainvalidierung, bevor ACM sie ausstellen kann. Sie können den ACK Service Controller für Amazon Route 53 verwenden, um automatisch die erforderlichen CNAME-Einträge für die DNS-Validierung in Ihrer gehosteten Zone zu erstellen.

Optionen zur Verwendung von Zertifikaten

Sie können ACM-Zertifikate auf verschiedene Arten mit Kubernetes verwenden:

ELB stellt eine Verbindung zu Ingress her, das an den Service weitergeleitet wird und den Datenverkehr über Pod1, Pod2 und Pod3 verteilt.
  1. Beendigung des Load Balancers (ohne Export): Stellen Sie Zertifikate über ACK aus und verwenden Sie sie, um TLS an einem Load Balancer zu beenden. AWS Das Zertifikat verbleibt in ACM und wird automatisch vom AWS Load Balancer Controller erkannt. Bei diesem Ansatz muss das Zertifikat nicht exportiert werden.

  2. Eingangsabbruch (mit Export): Exportieren Sie Zertifikate aus ACM und speichern Sie sie in Kubernetes Secrets für die TLS-Terminierung auf Ingress-Ebene. Auf diese Weise können Sie Zertifikate direkt in Ihren Kubernetes-Workloads verwenden.

Anmerkung

Anwendungsfälle, für die private Zertifikate erforderlich sind, finden Sie unter AWS Private CA Connector for Kubernetes, ein Cert-Manager-Plugin.

Voraussetzungen

Bevor Sie den ACK Service Controller für ACM installieren, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Ein Kubernetes-Cluster.

  • Helm installiert.

  • kubectl für die Kommunikation mit Ihrem Cluster konfiguriert.

  • eksctlwurde für die Konfiguration von Pod-Identitätszuordnungen auf EKS installiert.

Installieren Sie den ACK Service Controller für ACM

Verwenden Sie Helm, um den ACK Service Controller für ACM in Ihrem Amazon EKS-Cluster zu installieren.

  1. Erstellen Sie einen Namespace für den ACK-Controller.

    $ kubectl create namespace ack-system --dry-run=client -o yaml | kubectl apply -f -
  2. Erstellen Sie eine Pod-Identitätszuordnung für den ACK-Controller. CLUSTER_NAMEErsetzen Sie es durch Ihren Clusternamen und REGION durch Ihre AWS Region.

    $ 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. Melden Sie sich bei der öffentlichen Amazon ECR-Registrierung an.

    $ aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
  4. Installieren Sie den ACK Service Controller für ACM. Ersetzen Sie REGION durch Ihre AWS Region.

    $ 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. Stellen Sie sicher, dass der Controller läuft.

    $ kubectl get pods -n ack-system

Weitere Informationen zu Pod-Identitätszuordnungen finden Sie unter EKS Pod Identity im Amazon EKS-Benutzerhandbuch.

Beispiel: TLS beim Eingang beenden

Das folgende Beispiel zeigt, wie Sie ein ACM-Zertifikat exportieren und es verwenden, um TLS auf der Kubernetes-Ingress-Ebene zu beenden. Diese Konfiguration erstellt ein ACM-Zertifikat, exportiert es in ein Kubernetes-Secret und konfiguriert eine Ingress-Ressource so, dass das Zertifikat für die TLS-Terminierung verwendet wird.

In diesem Beispiel:

  • Secret wird erstellt, um das exportierte Zertifikat zu speichern () exported-cert-secret

  • Die ACK-Zertifikatsressource fordert ein Zertifikat von ACM für Ihre Domain an und exportiert es in das exported-cert-secret Secret.

  • Die Ingress-Ressource verweist auf dasexported-cert-secret, um TLS für eingehenden Verkehr zu beenden.

Ersetzen Sie ${HOSTNAME} durch Ihren Domainnamen.

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

Nach der Bereitstellung verwaltet der ACK Service Controller für ACM automatisch den Lebenszyklus des Zertifikats, einschließlich Verlängerungen. Wenn ACM das Zertifikat erneuert, aktualisiert der Controller das exported-cert-secret Secret mit dem neuen Zertifikat, um sicherzustellen, dass Ihr Ingress weiterhin gültige Zertifikate ohne manuelles Eingreifen verwendet.