Sicherung von Workloads mit Kubernetes-Zertifikaten - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Sicherung von Workloads mit Kubernetes-Zertifikaten

Die Kubernetes-Zertifikats-API automatisiert die Bereitstellung von X.509-Anmeldeinformationen. Die API verfügt über eine Befehlszeilenschnittstelle, über die Kubernetes-API-Clients X.509-Zertifikate von einer Zertifizierungsstelle (CA) anfordern und abrufen kann. Sie können die CertificateSigningRequest (CSR)-Ressource verwenden, um anzufordern, dass ein benannter Unterzeichner das Zertifikat signiert. Ihre Anträge werden entweder genehmigt oder abgelehnt, bevor sie signiert werden. Kubernetes unterstützt sowohl integrierte Unterzeichner als auch benutzerdefinierte Unterzeichner mit klar definierten Verhaltensweisen. Auf diese Weise können Kunden vorhersehen, was mit ihren CSRs passiert. Weitere Informationen zur Zertifikatsignatur finden Sie unter Signieren von Anforderungen.

Einer der integrierten Unterzeichner ist kubernetes.io/legacy-unknown. Die v1beta1-API der CSR-Ressource berücksichtigte diesen Unterzeichnertyp „legacy-unknown“. Die stabile v1-API von CSR lässt jedoch nicht zu, dass signerName auf kubernetes.io/legacy-unknown festgelegt wird.

Wenn Sie Amazon EKS CA zum Generieren von Zertifikaten verwenden möchten, müssen Sie einen benutzerdefinierten Unterzeichner verwenden. Um die CSR-v1-API-Version zu verwenden und ein neues Zertifikat zu generieren, müssen Sie alle vorhandenen Manifeste und API-Clients migrieren. Bestehende Zertifikate, die mit der vorhandenen v1beta1-API erstellt wurden, sind gültig und funktionieren, bis sie ablaufen. Diese umfasst die folgenden Funktionen:

  • Vertrauensverteilung: keine. Es gibt kein Standardvertrauen oder eine Standardverteilung für diesen Unterzeichner in einem Kubernetes-Cluster.

  • Zulässige Themen: beliebig

  • Zulässige x509-Erweiterungen: Berücksichtigt SubjectAltName und Schlüsselnutzungserweiterungen und verwirft andere Erweiterungen

  • Zulässige Schlüsselnutzung: Darf keine anderen Nutzungen als [„Schlüsselverschlüsselung“, „digitale Signatur“, „Serverauth“] enthalten

    Anmerkung

    Das Signieren von Clientzertifikaten wird nicht unterstützt.

  • Ablauf/Zertifikatslebensdauer: 1 Jahr (Standard und Maximum)

  • CA-Bit zulässig/unzulässig: unzulässig

Beispiel CSR-Erstellung mit signerName

Diese Schritte veranschaulichen, wie Sie ein Bereitstellungszertifikat für DNS-Namen myserver.default.svc mit signerName: beta.eks.amazonaws.com/app-serving erstellen. Verwenden Sie dies als Leitfaden für Ihre eigene Umgebung.

  1. Führen Sie den Befehl openssl genrsa -out myserver.key 2048 aus, um einen privaten RSA-Schlüssel zu erzeugen.

    openssl genrsa -out myserver.key 2048
  2. Führen Sie den folgenden Befehl aus, um eine Zertifikatsanforderung zu erstellen.

    openssl req -new -key myserver.key -out myserver.csr -subj "/CN=myserver.default.svc"
  3. Generieren Sie einen base64-Wert für die CSR-Variablen für die Verwendung in einem späteren Schritt.

    base_64=$(cat myserver.csr | base64 -w 0 | tr -d " ")
  4. Führen Sie den folgenden Befehl aus, um eine Datei mit dem Namen mycsr.yaml zu erstellen. Im folgenden Beispiel ist beta.eks.amazonaws.com/app-serving der signerName.

    cat >mycsr.yaml <<EOF apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: myserver spec: request: $base_64 signerName: beta.eks.amazonaws.com/app-serving usages: - digital signature - key encipherment - server auth EOF
  5. Reichen Sie die CSR ein.

    kubectl apply -f mycsr.yaml
  6. Genehmigen Sie das Bereitstellungszertifikat.

    kubectl certificate approve myserver
  7. Stellen Sie sicher, dass das Zertifikat ausgestellt wurde.

    kubectl get csr myserver

    Eine Beispielausgabe sieht wie folgt aus.

    NAME AGE SIGNERNAME REQUESTOR CONDITION myserver 3m20s beta.eks.amazonaws.com/app-serving kubernetes-admin Approved,Issued
  8. Exportieren Sie das ausgestellte Zertifikat.

    kubectl get csr myserver -o jsonpath='{.status.certificate}'| base64 -d > myserver.crt