Freigeben über


Sichere Bereitstellungsoptionen für die verbundene Registrierungserweiterung mit Azure Container Registry

In diesem Artikel werden verschiedene Bereitstellungsszenarien für die verbundene Registrierungserweiterung in einem Arc-fähigen Kubernetes-Cluster beschrieben. Nachdem Sie die verbundene Registrierungserweiterung installiert haben, können Sie Bilder aus Ihrer Cloudregistrierung mit lokalen oder Remotestandorten synchronisieren.

Nehmen Sie sich vor dem Einarbeiten einen Moment Zeit, um zu erfahren, wie arc-fähiges Kubernetes grundsätzlich arbeitet.

Sie können die verbundene Registrierung sicher bereitstellen, indem Sie verschiedene Verschlüsselungsmethoden verwenden. Befolgen Sie für eine erfolgreiche Bereitstellung den Schnellstartleitfaden, um Voraussetzungen und andere relevante Informationen zu überprüfen. Standardmäßig ist die verbundene Registry mit HTTPS, ReadOnly-Modus, Verteilung von Vertrauensstellungen und dem Cert Manager-Service konfiguriert. Je nach Szenario können Sie weitere Anpassungen und Abhängigkeiten hinzufügen.

Was ist der Cert Manager-Service?

Der Cert Manager für die verbundene Registry ist ein Service, der TLS-Zertifikate für die Erweiterung für die verbundene Registry in einem Azure Arc-fähigen Kubernetes-Cluster verwaltet. Er stellt eine sichere Kommunikation zwischen der verbundenen Registry und anderen Komponenten sicher, indem er die Erstellung, Verlängerung und Verteilung von Zertifikaten übernimmt. Sie können diesen Dienst als Teil der verbundenen Registrierungsbereitstellung installieren, oder Sie können einen vorhandenen Zertifikat-Manager verwenden, wenn er bereits auf Ihrem Cluster installiert ist.

Cert-Manager ist ein Open-Source-Add-on von Kubernetes, das die Verwaltung und Ausstellung von TLS-Zertifikaten aus verschiedenen Quellen automatisiert. Es verwaltet den Lebenszyklus von Zertifikaten, die von CA-Pools ausgestellt wurden, die mit dem CA-Service erstellt wurden, und stellt sicher, dass sie gültig sind und verlängert werden, bevor sie ablaufen.

Was versteht man unter der Verteilung von Vertrauensstellungen?

Die Verteilung von Vertrauensstellungen einer verbundenen Registry bezieht sich auf den Prozess der sicheren Verteilung von Vertrauensstellungen zwischen dem Service für die verbundene Registry und den Kubernetes-Clients in einem Cluster. Wenn Sie eine Zertifizierungsstelle (Certificate Authority, Z. B. Zertifikat-Manager) zum Signieren von TLS-Zertifikaten verwenden, können Sie diese Zertifikate sowohl an den Registrierungsdienst als auch an die Clients verteilen. Dieser Prozess stellt sicher, dass alle Entitäten sich sicher authentifizieren können, wobei eine sichere und vertrauenswürdige Umgebung innerhalb des Kubernetes-Clusters beibehalten wird.

Bereitstellen der verbundenen Registrierungserweiterung mithilfe des vorinstallierten Zertifikatsmanagers

Wenn Sie einen vorinstallierten Zertifikat-Manager-Dienst auf dem Cluster verwenden, haben Sie die Kontrolle über die Zertifikatverwaltung. Stellen Sie die verbundene Registrierungserweiterung mit Verschlüsselung bereit, indem Sie die bereitgestellten Schritte ausführen:

Führen Sie den Befehl "az-k8s-extension-create" in der Schnellstartanleitung aus, und legen Sie die cert-manager.enabled=true Parameter cert-manager.install=false fest, um anzugeben, dass der Cert-Manager-Dienst installiert und aktiviert ist:

    az k8s-extension create --cluster-name myarck8scluster \ 
    --cluster-type connectedClusters \ 
    --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \ 
    --config service.clusterIP=192.100.100.1 \ 
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json

Bereitstellen der Erweiterung für eine verbundene Registry mithilfe von BYOC (Bring Your Own Certificate)

Wenn Sie Ihr eigenes Zertifikat (BYOC) mitbringen, können Sie Ihr eigenes öffentliches Zertifikat und ihr privates Schlüsselpaar verwenden, sodass Sie die Zertifikatverwaltung steuern können. Mit diesem Setup können Sie die verbundene Registrierungserweiterung mit Verschlüsselung bereitstellen.

Hinweis

BYOC ist nützlich für Kunden, die ihr eigenes Zertifikat mitbringen, das bereits von ihren Kubernetes-Knoten vertrauenswürdig ist. Aktualisieren Sie keine Knoten manuell, um Zertifikaten zu vertrauen.

Fügen Sie beim Bereitstellen der Erweiterung die Variable und das Wertpaar für öffentliche Zertifikate und private Schlüsselzeichenfolgen hinzu, indem Sie die folgenden Schritte ausführen:

  1. Erstellen Sie selbstsigniertes SSL-Zertifikat mit der IP des verbundenen Registrierungsdiensts als SAN:

    mkdir /certs
    
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext   "subjectAltName = IP:<service IP>"
    
  2. Abrufen von base64-codierten Zeichenfolgen dieser Zertifikatdateien:

    export TLS_CRT=$(cat mycert.crt | base64 -w0) 
    export TLS_KEY=$(cat mycert.key | base64 -w0) 
    
  3. Erstellen Sie eine geschützte Einstellungsdatei mit geheimem Schlüssel im JSON-Format, ähnlich dem folgenden Beispiel:

    Hinweis

    Das Paar aus öffentlichem Zertifikat und privatem Schlüssel muss im Base64-Format codiert sein und der Datei mit geschützten Einstellungen hinzugefügt werden.

    {
    "connectionString": "[connection string here]",
    "tls.crt": $TLS_CRT,
    "tls.key": $TLS_KEY,
    "tls.cacrt": $TLS_CRT
    } 
    
  4. Stellen Sie die verbundene Registrierungserweiterung mit HTTPS (TLS-Verschlüsselung) mithilfe des öffentlichen Zertifikats und der Verwaltung des privaten Schlüsselpaars bereit, indem Sie Variablen konfigurieren, die auf cert-manager.enabled=false und cert-manager.install=false eingestellt sind. Mit diesen Parametern wird der Zertifikat-Manager nicht installiert oder aktiviert, da stattdessen das öffentliche Zertifikat und das private Schlüsselpaar für die Verschlüsselung verwendet werden.

  5. Führen Sie den Befehl "az-k8s-extension-create" für die Bereitstellung aus, nachdem Sie die Datei für geschützte Einstellungen bearbeitet haben:

    az k8s-extension create --cluster-name myarck8scluster \
    --cluster-type connectedClusters \  
    --extension-type  Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \
    --config service.clusterIP=192.100.100.1 \
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json 
    

Bereitstellen einer verbundenen Registry mit Kubernetes-Secret-Verwaltung

Mithilfe eines Kubernetes-Schlüssels auf Ihrem Cluster können Sie autorisierten Zugriff zwischen Pods innerhalb des Clusters sicher verwalten. Mit diesem Setup können Sie die verbundene Registrierungserweiterung mit Verschlüsselung bereitstellen.

Fügen Sie die Kubernetes-TLS-Geheimniszeichenfolgenvariable und das Wertpaar hinzu, indem Sie die folgenden Schritte ausführen:

  1. Erstellen eines selbstsignierten SSL-Zertifikats mit der IP-Adresse des Services für verbundene Registrys als SAN

    mkdir /certs
    
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext    "subjectAltName = IP:<service IP>"
    
  2. Abrufen von base64-codierten Zeichenfolgen dieser Zertifikatdateien:

    export TLS_CRT=$(cat mycert.crt | base64 -w0) 
    export TLS_KEY=$(cat mycert.key | base64 -w0) 
    
  3. Erstellen Sie den geheimen Kubernetes-Schlüssel:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: k8secret
      type: kubernetes.io/tls
    data:
      ca.crt: $TLS_CRT
      tls.crt: $TLS_CRT
      tls.key: $TLS_KEY
    EOF
    
  4. Erstellen Sie eine geschützte Einstellungsdatei mit geheimem Schlüssel im JSON-Format, ähnlich dem folgenden Beispiel:

        { 
        "connectionString": "[connection string here]",
        "tls.secret": “k8secret” 
        } 
    
  5. Stellen Sie die Connected Registry-Erweiterung mit HTTPS (TLS-Verschlüsselung) mithilfe der Geheimverwaltung von Kubernetes bereit. Konfigurieren von Variablen, die auf cert-manager.enabled=false und cert-manager.install=false gesetzt werden. Mit diesen Parametern wird der Zertifikat-Manager nicht installiert oder aktiviert, da der geheime Kubernetes-Schlüssel stattdessen für die Verschlüsselung verwendet wird.

  6. Führen Sie den Befehl "az-k8s-extension-create" für die Bereitstellung aus, nachdem Sie die Datei für geschützte Einstellungen bearbeitet haben:

    az k8s-extension create --cluster-name myarck8scluster \
    --cluster-type connectedClusters \  
    --extension-type  Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \
    --config service.clusterIP=192.100.100.1 \
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json 
    

Bereitstellen der verbundenen Registrierung mithilfe Ihrer eigenen Vertrauensverteilung

Mit Ihrem eigenen Kubernetes-Geheimnis oder öffentlichen Zertifikat- und privaten Schlüsselpaaren können Sie die verbundene Registrierungserweiterung mit TLS-Verschlüsselung, Ihrer inhärenten Vertrauensverteilung bereitstellen und die Standardvertrauensverteilung der verbundenen Registrierung ablehnen. Mit diesem Setup können Sie die verbundene Registrierungserweiterung mit Verschlüsselung bereitstellen. Achten Sie darauf, entweder den geheimen Kubernetes-Schlüssel oder das öffentliche Zertifikat sowie private Schlüsselvariablen und Wertpaare in der Geschützten Einstellungsdatei im JSON-Format hinzuzufügen.

Um diese Option zu verwenden, legen Sie die Parameter trustDistribution.enabled=false und trustDistribution.skipNodeSelector=false fest, um die verbundene Vertrauensverteilung der Registrierung abzulehnen, wenn Sie die Erweiterung bereitstellen.

az k8s-extension create --cluster-name myarck8scluster \ 
--cluster-type connectedClusters \ 
--extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ 
--name myconnectedregistry \ 
--resource-group myresourcegroup \ 
--config service.clusterIP=192.100.100.1 \
--config trustDistribution.enabled=false \ 
--config cert-manager.enabled=false \
--config cert-manager.install=false \ 
--config-protected-file <JSON file path> 

Mithilfe dieser Parameter wird der Zertifikat-Manager nicht installiert oder aktiviert, und die verbundene Registrierungsvertrauensverteilung wird nicht erzwungen. Stattdessen verwenden Sie die vom Cluster bereitgestellte Vertrauensstellungsverteilung zum Einrichten der Vertrauensstellung zwischen der verbundenen Registry und den Clientknoten.

Bereinigen von Ressourcen

Führen Sie die folgenden Schritte durch, um die Erweiterung für verbundene Registrys, die entsprechenden verbundenen Registry-Pods und die Konfigurationseinstellungen zu entfernen.

  1. Führen Sie az-k8s-extension-delete aus, um die verbundene Registrierungserweiterung zu löschen:

    az k8s-extension delete --name myconnectedregistry 
    --cluster-name myarcakscluster \ 
    --resource-group myresourcegroup \ 
    --cluster-type connectedClusters
    
  2. Führen Sie az acr connected-registry delete aus, um die verbundene Registrierungsressource zu löschen:

    az acr connected-registry delete --registry myacrregistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup
    

Nächste Schritte