Grundlegendes zur Azure-Containerregistrierung

Wenn Sie am Ende einer Devops-Build-Pipeline angelangt sind, verbleiben eine Reihe von Artefakten: Binärdateien, Konfigurationsdateien, Webseiten, sogar virtuelle Maschinen und Container. Sie sind die Komponenten, die zusammen eine moderne Anwendung bilden. Es ist sehr sinnvoll, so viele dieser Komponenten wie möglich in einen Container zu packen, um ein einfacheres Bereitstellungsmodell zu erhalten. Dies lässt jedoch neue Fragen offen: Wie verwalten Sie diese Container und wie stellen Sie sie in einer globalen Cloud-Anwendung bereit?

Dienste wie GitHub bieten private und öffentliche Registrierungen für Ihre Build-Artefakte unter Verwendung offener Standards und Open Source-Code. Azure hat dasselbe getan und die Open Source Docker Registry 2.0 als Grundlage für seine eigene Containerregistrierung verwendet, die der Open Container Initiative entspricht. Es ist nicht nur für Container gedacht. Mit der zunehmenden Bedeutung von Kubernetes-basierten Cloud-nativen Anwendungen soll es ein One-Stop-Repository für alle Ihre OCI-kompatiblen Build-Artefakte sein. Dazu gehören jetzt Helm-Diagramme, sodass Sie die Container-Registrierung (ACR) von Azure als Bereitstellungs-Hub für Ihre Anwendungen verwenden und Helm 3.0 für die Übermittlung an Kubernetes-Instanzen verwenden können.

Erste Schritte mit ACR

Tools wie die Azure-Containerregistrierung werden am besten als private Registrierungen betrachtet. Nur Sie, Ihr Team und Ihre Dienste haben Zugriff auf Ihre Registrierung, wodurch die Bereitstellung an Azure-Dienste automatisiert wird, die Container verwenden. Bekannte Tools wie Azure DevOps und Jenkins können so konfiguriert werden, dass die Registrierung als Build-Endpunkt verwendet wird, sodass Sie direkt von der Zusammenführung einer Pull-Anforderung zu einem bereitstellbaren Container in Azure wechseln können.

Microsoft bietet derzeit drei Versionen von ACR an: Basic, Standard und Premium zu drei verschiedenen Preisen. Sie alle arbeiten mit Web-Hooks, verwenden Azure Active Directory zur Authentifizierung und können Bilder löschen. Basic hat die niedrigste Kapazität; Premium bietet Unterstützung für die Replikation über Regionen hinweg und bietet Unterstützung für Bildsignaturen. Am wahrscheinlichsten ist Standard, das Ihnen 100 GB Speicherplatz, 60 MBit / s Download-Bandbreite und bis zu 10 Web-Hooks bietet. Die Preise gelten pro Registrierung und Tag, mit zusätzlichen Netzwerkkosten und einer separaten Gebühr für die CPU-Auslastung beim Erstellen neuer Container-Images.

Das Erstellen einer neuen Containerregistrierung ist mit der Azure-CLI oder dem Portal relativ einfach. ACR-Instanzen sind an Ressourcengruppen gebunden, sodass Sie für jede Anwendung, die Sie in Azure ausführen, eine separate Registrierung haben können. Sobald eine Registrierung erstellt wurde, erhalten Sie die URL eines Anmeldeservers. Dies ist der Endpunkt für die Integration in Devops-Tools oder die Desktop-Docker-Instanzen Ihrer Entwickler.

Interaktion mit einer ACR-Registrierung

Der acrBefehl der Azure-CLI ist wahrscheinlich die nützlichste Methode zur Interaktion mit einer Registrierung. Melden Sie sich an und Sie können Container-Images darauf verschieben. Es ist eine gute Idee, vom Desktop aus zu beginnen, um ein Gefühl dafür zu bekommen, wie es funktioniert. Kennzeichnen Sie ein lokales Docker-Image mit dem Namen des ACR-Anmeldeservers und docker pushsenden Sie das Image dann mit dem Befehl an die ACR-Registrierung, um automatisch das entsprechende Repository zu erstellen in Azure. Sobald sich ein Image in einem ACR-Repository befindet, verwenden Sie die Befehlszeilentools, um Dateien aufzulisten, zu entfernen und sogar Docker-Befehle zum Ausführen zu verwenden.

Durch die Automatisierung von ACR kann Ihre Arbeitsbelastung mithilfe von ACR-Aufgaben erheblich reduziert werden. Aufgaben bündeln eine Reihe von Azure CLI-Skripten in einfachen Workflows, die allgemeine Vorgänge verwalten. Sie bieten beispielsweise eine Reihe von Triggern, die das Erstellen neuer Images automatisieren, wenn Änderungen in Ihrer Build-Pipeline oder in Ihrem CI / CD-System (Continuous Integration / Continuous Delivery) auftreten.

Eine Option, die schnelle Aufgabe, fasst alle Phasen, die zum Erstellen einer Reihe von Dateien in einem Container verwendet werden, in einem einzigen Befehl zusammen. Sie benötigen lediglich ein Arbeitsverzeichnis mit Ihren Dateien sowie eine vorhandene ACR-Registrierung und eine Docker-Datei. Ein einzelner Befehl nimmt diese Dateien und erstellt mithilfe der Docker-Datei ein Bild, das automatisch in einem ACR-Repository gespeichert wird. Eine weitere schnelle Aufgabe führt das Image auf dem von Ihnen ausgewählten Host aus.

Wenn Sie sie zusammenfügen, verfügen Sie über grundlegende Tools zum Testen von Containerbildern. Für komplexere Bereitstellungen sind komplexere Skripts erforderlich, z. B. die Bereitstellung eines Containers für eine verwaltete Kubernetes-Instanz mithilfe von AKS. Alternativ können Sie den gesamten Prozess automatisieren, eine Aufgabe erstellen, die ein GitHub-Repo auf Änderungen in einem Bereitstellungszweig überwacht, und ein neues Image erstellen, wenn Sie eine Pull-Anforderung in den Zweig einfügen oder ein Commit durchführen.

Container in ACR sichern

Die Arbeit mit ACR bietet Sicherheitsvorteile. Eines der großen Probleme bei der Erstellung moderner Anwendungen ist das Verständnis und die Verwaltung Ihres Abhängigkeitsbaums. Woher wissen Sie, ob die Verwendung einer neuen Version einer Schlüsselbibliothek oder einer verschleierten Komponente sicher ist? Sie müssen Ihren Containern vertrauen können, und ACR bietet zwei Möglichkeiten, um sicherzustellen, dass Sie immer vertrauenswürdigen Code bereitstellen.

Erstens werden signierte Container-Images bereitgestellt, sodass Ihr Kubernetes-Cluster überprüfen kann, ob der ausgeführte Code der Code ist, den Sie von Ihrem Build-System in Ihre Registrierung übertragen haben. Signierte Bilder stellen sicher, dass niemand den Inhalt eines Containers während der Bereitstellung manipuliert hat. Zweitens kann ACR in das Azure Security Center integriert werden. Auf diese Weise können Sie Bilder scannen, während sie in der Registrierung gespeichert sind, und nicht nur nach Schwachstellen in Ihrem Code und im Basis-Image suchen, sondern auch nach Abhängigkeiten, die in der Image-Datei enthalten sind oder auf die verwiesen wird. Mithilfe des Scanners von Qualys können Sie mithilfe von Security Center-Berichten Schwachstellen mit Empfehlungen für Korrekturen identifizieren.

Interessant wird es, wenn Sie Ihre ACR-Instanzen nicht nur für Container verwenden. OCI hat damit begonnen, den Registrierungsstandard für Artefakte zu öffnen. Helm, das De-facto-Tool für die Bereitstellung von Kubernetes-Anwendungen, verwendet ihn in der neuesten Version. In der Branche gibt es eine Vielzahl von Registern und Repositorys, und es ist sinnvoll, für alle Ihre Anwendungskomponenten eine zu standardisieren, insbesondere wenn sie alle Teil derselben Cloud-nativen Anwendung sind.

ACR unterstützt jetzt OCI Registry As Storage (ORAS). Mit einem ORAS-Tool können Sie alle Ihre Artefakte aus demselben ACR-Repository verschieben und abrufen. Installieren Sie ORAS auf Ihren Entwicklercomputern oder fügen Sie Ihrer Build-Pipeline Unterstützung hinzu. Verwenden Sie nach der Anmeldung bei Ihrer Registrierung mit einem Azure Active Directory-Dienstprinzipal mit Push-Rechten das ORAS-Befehlszeilentool, um neue Artefakte in die Registrierung zu übertragen.

Die Verwendung eines Befehlszeilentools in der Azure-CLI bietet Ihnen die Flexibilität, ORAS-Push als Skript in Ihre Auswahl an Build-Tools zu erstellen, das bei Bedarf aufgerufen werden kann. Mit demselben Befehlszeilentool können Artefakte abgerufen und in Ihre Bereitstellungsskripts integriert werden, sodass alle Komponenten, aus denen Ihre Anwendungen bestehen, automatisch bereitgestellt werden können, wenn ein neuer Build in Ihre ACR-Repositorys verschoben wird.

Privater Code benötigt private Repositorys. Wenn Sie Ihre Container und andere Build-Artefakte in Azure aufbewahren, werden sie dort platziert, wo sie benötigt werden. Ein vollständiger Entwicklungsprozess für Entwickler sollte ohne menschliches Eingreifen vom Code-Commit zur Ausführung der Anwendung übergehen und Tools wie die Azure-Container-Registrierung und die damit verbundene Task-Automatisierung zu wesentlichen Komponenten in jeder Azure-Pipeline machen. Code wird nicht nur automatisch gespeichert und global bereitgestellt, sondern bei jeder Änderung auch auf Sicherheitsrisiken überprüft.