Microservicearchitektur in Azure Kubernetes Service (AKS)Microservices architecture on Azure Kubernetes Service (AKS)

In dieser Referenzarchitektur wird veranschaulicht, wie eine Microserviceanwendung für Azure Kubernetes Service (AKS) bereitgestellt wird.This reference architecture shows a microservices application deployed to Azure Kubernetes Service (AKS). Es wird eine einfache AKS-Konfiguration beschrieben, die als Ausgangspunkt für die meisten Bereitstellungen dienen kann.It describes a basic AKS configuration that can be the starting point for most deployments. In diesem Artikel werden Kubernetes-Grundkenntnisse vorausgesetzt.This article assumes basic knowledge of Kubernetes. Es geht hauptsächlich um die Infrastruktur- und DevOps-Aspekte bei der Ausführung einer Microservicearchitektur für AKS.The article focuses mainly on the infrastructure and DevOps considerations of running a microservices architecture on AKS. Eine Anleitung zum Entwerfen von Microservices finden Sie unter Erstellen von Microservices in Azure.For guidance on how to design microservices, see Building microservices on Azure.

GitHub-Logo Eine Referenzimplementierung dieser Architektur ist auf GitHub verfügbar.GitHub logo A reference implementation of this architecture is available on GitHub.

AKS-Referenzarchitektur

Laden Sie eine Visio-Datei mit dieser Architektur herunter.Download a Visio file of this architecture.

ArchitectureArchitecture

Die Architektur umfasst die folgenden Komponenten.The architecture consists of the following components.

Azure Kubernetes Service (AKS):Azure Kubernetes Service (AKS). AKS ist ein Azure-Dienst, mit dem ein verwalteter Kubernetes-Cluster bereitgestellt wird.AKS is an Azure service that deploys a managed Kubernetes cluster.

Kubernetes-Cluster:Kubernetes cluster. AKS ist für die Bereitstellung des Kubernetes-Clusters und die Verwaltung der Kubernetes-Masterkomponenten zuständig.AKS is responsible for deploying the Kubernetes cluster and for managing the Kubernetes masters. Sie verwalten nur die Agent-Knoten.You only manage the agent nodes.

Virtuelles Netzwerk.Virtual network. Standardmäßig erstellt AKS ein virtuelles Netzwerk, in dem die Agent-Knoten bereitgestellt werden können.By default, AKS creates a virtual network to deploy the agent nodes into. Bei anspruchsvolleren Szenarien können Sie zuerst das virtuelle Netzwerk erstellen, damit Sie Dinge wie die Konfiguration der Subnetze, lokale Konnektivität und IP-Adressierung steuern können.For more advanced scenarios, you can create the virtual network first, which lets you control things like how the subnets are configured, on-premises connectivity, and IP addressing. Weitere Informationen finden Sie unter Konfigurieren von erweiterten Netzwerken in Azure Kubernetes Service (AKS).For more information, see Configure advanced networking in Azure Kubernetes Service (AKS).

Eingang:Ingress. Mit einem Eingang werden HTTP(S)-Routen für Dienste im Cluster verfügbar gemacht.An ingress exposes HTTP(S) routes to services inside the cluster. Weitere Informationen finden Sie unten im Abschnitt API-Gateway.For more information, see the section API Gateway below.

Azure Load Balancer:Azure Load Balancer. Beim Bereitstellen des NGINX-Eingangscontrollers wird eine Azure Load Balancer-Instanz erstellt.An Azure Load Balancer is created when the NGINX ingress controller is deployed. Der Lastenausgleich leitet Internetdatenverkehr an den Eingangscontroller.The load balancer routes internet traffic to the ingress.

Externe Datenspeicher:External data stores. Microservices sind normalerweise zustandslos und schreiben den Status in externe Datenspeicher, z.B. Azure SQL-Datenbank oder Cosmos DB.Microservices are typically stateless and write state to external data stores, such as Azure SQL Database or Cosmos DB.

Azure Active Directory:Azure Active Directory. AKS nutzt eine Azure AD-Identität (Azure Active Directory), um andere Azure-Ressourcen, z.B. Azure Load Balancers, zu erstellen und zu verwalten.AKS uses an Azure Active Directory (Azure AD) identity to create and manage other Azure resources such as Azure load balancers. Azure AD wird auch für die Benutzerauthentifizierung in Clientanwendungen empfohlen.Azure AD is also recommended for user authentication in client applications.

Azure Container Registry:Azure Container Registry. Verwenden Sie Container Registry zum Speichern von privaten Docker-Images, die im Cluster bereitgestellt werden.Use Container Registry to store private Docker images, which are deployed to the cluster. AKS kann die Authentifizierung mit Container Registry durchführen, indem die eigene Azure AD-Identität verwendet wird.AKS can authenticate with Container Registry using its Azure AD identity. Beachten Sie hierbei, dass Azure Container Registry für AKS nicht zwingend erforderlich ist.Note that AKS does not require Azure Container Registry. Sie können auch andere Containerregistrierungen nutzen, z.B. Docker-Hub.You can use other container registries, such as Docker Hub.

Azure Pipelines.Azure Pipelines. Pipelines ist Teil von Azure DevOps Services und führt automatisierte Build-, Test- und Bereitstellungsvorgänge durch.Pipelines is part of Azure DevOps Services and runs automated builds, tests, and deployments. Sie können auch CI/CD-Lösungen von Drittanbietern, z.B. Jenkins, verwenden.You can also use third-party CI/CD solutions such as Jenkins.

Helm:Helm. Helm ist ein Paket-Manager für Kubernetes und ermöglicht das Bündeln von Kubernetes-Objekten als Einheit, die Sie veröffentlichen, bereitstellen, mit einer Versionsangabe versehen und aktualisieren können.Helm is as a package manager for Kubernetes — a way to bundle Kubernetes objects into a single unit that you can publish, deploy, version, and update.

Azure Monitor:Azure Monitor. Azure Monitor erfasst Metriken und Protokolle und speichert diese Elemente. Beispiele hierfür sind Plattformmetriken für die Azure-Dienste in der Lösung und Anwendungstelemetrie.Azure Monitor collects and stores metrics and logs, including platform metrics for the Azure services in the solution and application telemetry. Nutzen Sie diese Daten zum Überwachen der Anwendung, Einrichten von Warnungen und Dashboards und Durchführen von Analysen der Grundursache von Fehlern.Use this data to monitor the application, set up alerts and dashboards, and perform root cause analysis of failures. Azure Monitor wird mit AKS integriert, um Metriken von Controllern, Knoten und Containern sowie aus Containerprotokollen und Knotenprotokollen zu erfassen.Azure Monitor integrates with AKS to collect metrics from controllers, nodes, and containers, as well as container logs and master node logs.

Überlegungen zum EntwurfDesign considerations

In dieser Referenzarchitektur geht es zwar um Microservicearchitekturen, aber ein Großteil der empfohlenen Methoden gilt auch für andere Workloads, die unter AKS ausgeführt werden.This reference architecture is focused on microservices architectures, although many of the recommended practices will apply to other workloads running on AKS.

MicroservicesMicroservices

Das Kubernetes Service-Objekt ist eine natürliche Möglichkeit zum Modellieren von Microservices in Kubernetes.The Kubernetes Service object is a natural way to model microservices in Kubernetes. Ein Microservice ist eine lose gekoppelte, unabhängig bereitstellbare Codeeinheit.A microservice is a loosely coupled, independently deployable unit of code. Microservices kommunizieren normalerweise über gut definierte APIs und können per Dienstermittlung ermittelt werden.Microservices typically communicate through well-defined APIs, and are discoverable through some form of service discovery. Mit dem Kubernetes Service-Objekt werden Funktionen bereitgestellt, die die folgenden Anforderungen erfüllen:The Kubernetes Service object provides a set of capabilities that match these requirements:

  • IP-Adresse.IP address. Das Kubernetes Service-Objekt umfasst eine statische interne IP-Adresse für eine Gruppe von Pods (ReplicaSet).The Service object provides a static internal IP address for a group of pods (ReplicaSet). Wenn Pods erstellt oder verschoben werden, ist der Dienst über diese interne IP-Adresse immer erreichbar.As pods are created or moved around, the service is always reachable at this internal IP address.

  • Lastenausgleich.Load balancing. Für den Datenverkehr, der an die IP-Adresse des Diensts gesendet wird, wird ein Lastenausgleich auf die Pods durchgeführt.Traffic sent to the service's IP address is load balanced to the pods.

  • Dienstermittlung:Service discovery. Diensten werden vom Kubernetes-DNS-Dienst interne DNS-Einträge zugewiesen.Services are assigned internal DNS entries by the Kubernetes DNS service. Dies bedeutet, dass das API-Gateway mit dem DNS-Namen einen Back-End-Dienst aufrufen kann.That means the API gateway can call a backend service using the DNS name. Derselbe Mechanismus kann auch für die Kommunikation von Dienst zu Dienst verwendet werden.The same mechanism can be used for service-to-service communication. Die DNS-Einträge sind nach Namespace organisiert. Wenn Ihre Namespaces also den Kontextgrenzen entsprechen, wird der DNS-Name für einen Dienst automatisch der Anwendungsdomäne zugeordnet.The DNS entries are organized by namespace, so if your namespaces correspond to bounded contexts, then the DNS name for a service will map naturally to the application domain.

Im folgenden Diagramm ist die konzeptionelle Beziehung zwischen Diensten und Pods dargestellt.The following diagram show the conceptual relation between services and pods. Die eigentliche Zuordnung zu Endpunkt-IP-Adressen und -ports wird mit kube-proxy, dem Kubernetes-Netzwerkproxy, durchgeführt.The actual mapping to endpoint IP addresses and ports is done by kube-proxy, the Kubernetes network proxy.

Dienste und Pods

API GatewayAPI Gateway

Ein API-Gateway ist ein Gateway, das zwischen externen Clients und den Microservices angeordnet ist.An API gateway is a gateway that sits between external clients and the microservices. Es fungiert als Reverseproxy und leitet Anforderungen von Clients an Microservices weiter.It acts as a reverse proxy, routing requests from clients to microservices. Darüber hinaus kann es verschiedene übergreifende Aufgaben wie Authentifizierung, SSL-Beendigung und Ratenbegrenzung übernehmen.It may also perform various cross-cutting tasks such as authentication, SSL termination, and rate limiting.

Die von einem Gateway bereitgestellte Funktionalität kann wie folgt gruppiert werden:Functionality provided by a gateway can be grouped as follows:

  • Gatewayrouting: Dient zum Weiterleiten von Clientanforderungen an die richtigen Back-End-Dienste.Gateway Routing: Routing client requests to the right backend services. Es stellt einen einzelnen Endpunkt für Clients bereit und trägt zur Entkopplung von Clients und Diensten bei.This provides a single endpoint for clients, and helps to decouple clients from services.

  • Gatewayaggregation: Dient zum Aggregieren mehrerer Anforderungen in einer einzelnen Anforderung, um umfangreiche Interaktionen („Chattiness“) zwischen dem Client und dem Back-End zu verringern.Gateway Aggregation: Aggregation of multiple requests into a single request, to reduce chattiness between the client and the backend.

  • Gatewayabladung:Gateway Offloading. Ein Gateway kann Funktionalität für die Back-End-Dienste abladen, z.B. SSL-Beendigung, Authentifizierung, IP-Whitelisting oder Clientratenbegrenzung (Drosselung).A gateway can offload functionality from the backend services, such as SSL termination, authentication, IP whitelisting, or client rate limiting (throttling).

API-Gateways sind ein allgemeines Microserviceentwurfsmuster.API gateways are a general microservices design pattern. Sie können mit unterschiedlichen Technologien implementiert werden.They can be implemented using a number of different technologies. Die häufigste Implementierung ist wahrscheinlich die Bereitstellung eines Edgerouters oder Reverseproxys, z.B. Nginx, HAProxy oder Traefik, im Cluster.Probably the most common implementation is to deploy an edge router or reverse proxy, such as Nginx, HAProxy, or Traefik, inside the cluster.

Andere Optionen sind:Other options include:

  • Azure Application Gateway bzw. Azure API Management, wobei es sich jeweils um verwaltete Dienste handelt, die sich außerhalb des Clusters befinden.Azure Application Gateway and/or Azure API-Management, which are both managed services that reside outside of the cluster. Ein Application Gateway-Eingangscontroller befindet sich derzeit in der Betaphase.An Application Gateway Ingress Controller is currently in beta.

  • Azure-Funktionsproxys:Azure Functions Proxies. Mit Proxys können Anforderungen und Antworten geändert und Anforderungen basierend auf der URL weitergeleitet werden.Proxies can modify requests and responses and route requests based on URL.

Mit dem Kubernetes-Ressourcentyp Eingang werden die Konfigurationseinstellungen für einen Proxyserver abstrahiert.The Kubernetes Ingress resource type abstracts the configuration settings for a proxy server. Dies funktioniert in Verbindung mit einem Eingangscontroller, der die zugrunde liegende Implementierung des Eingangs bereitstellt.It works in conjunction with an ingress controller, which provides the underlying implementation of the Ingress. Es gibt Eingangscontroller für Nginx, HAProxy, Traefik und Application Gateway (Vorschauversion) usw.There are ingress controllers for Nginx, HAProxy, Traefik, and Application Gateway (preview), among others.

Der Eingangscontroller führt die Konfiguration des Proxyservers durch.The ingress controller handles configuring the proxy server. Häufig sind hierfür komplexe Konfigurationsdateien erforderlich, deren Optimierung schwierig sein kann, wenn Sie kein Experte sind. Der Eingangscontroller stellt also eine willkommene Abstraktion dar.Often these require complex configuration files, which can be hard to tune if you aren't an expert, so the ingress controller is a nice abstraction. Außerdem hat der Eingangscontroller Zugriff auf die Kubernetes-API, damit er intelligente Entscheidungen zum Routing und Lastenausgleich treffen kann.In addition, the Ingress Controller has access to the Kubernetes API, so it can make intelligent decisions about routing and load balancing. Mit dem Nginx-Eingangscontroller wird beispielsweise der Netzwerkproxy „kube-proxy“ umgangen.For example, the Nginx ingress controller bypasses the kube-proxy network proxy.

Falls Sie dagegen die vollständige Kontrolle über die Einstellungen haben müssen, können Sie diese Abstraktion auch umgehen und den Proxyserver manuell konfigurieren.On the other hand, if you need complete control over the settings, you may want to bypass this abstraction and configure the proxy server manually.

Ein Reverseproxyserver ist ein potenzieller Engpass oder Single Point of Failure. Stellen Sie daher immer mindestens zwei Replikate bereit, um eine hohe Verfügbarkeit zu gewährleisten.A reverse proxy server is a potential bottleneck or single point of failure, so always deploy at least two replicas for high availability.

DatenspeicherData storage

In einer Microservicearchitektur sollten Datenspeicher nicht für Dienste gemeinsam genutzt werden.In a microservices architecture, services should not share data storage. Für jeden Dienst sollten die eigenen privaten Daten in einem separaten logischen Speicher enthalten sein, um versteckte Abhängigkeiten zwischen Diensten zu vermeiden.Each service should own its own private data in a separate logical storage, to avoid hidden dependencies among services. Der Grund ist die Vermeidung einer unbeabsichtigten Kopplung von Diensten, die entstehen kann, wenn Dienste die gleichen zugrunde liegenden Datenschemas nutzen.The reason is to avoid unintentional coupling between services, which can happen when services share the same underlying data schemas. Wenn Dienste ihre eigenen Datenspeicher nutzen, können Sie zudem jeweils den richtigen Datenspeicher für ihre speziellen Anforderungen verwenden.Also, when services manage their own data stores, they can use the right data store for their particular requirements. Weitere Informationen finden Sie unter Entwerfen von Microservices: Überlegungen zu Daten.For more information, see Designing microservices: Data considerations.

Vermeiden Sie das Speichern von persistenten Daten in einem lokalen Clusterspeicher, weil die Daten dann an den Knoten gebunden sind.Avoid storing persistent data in local cluster storage, because that ties the data to the node. Alternative:Instead,

  • Verwenden Sie einen externen Dienst, z.B. Azure SQL-Datenbank oder Cosmos DB. ODERUse an external service such as Azure SQL Database or Cosmos DB, or

  • Stellen Sie mit Azure Disks oder Azure Files ein persistentes Volume bereit.Mount a persistent volume using Azure Disks or Azure Files. Nutzen Sie Azure Files, wenn dasselbe Volume gemeinsam von mehreren Pods genutzt werden soll.Use Azure Files if the same volume needs to be shared by multiple pods.

NamespacesNamespaces

Verwenden Sie Namespaces, um Dienste im Cluster zu organisieren.Use namespaces to organize services within the cluster. Jedes Objekt in einem Kubernetes-Cluster gehört zu einem Namespace.Every object in a Kubernetes cluster belongs to a namespace. Wenn Sie ein neues Objekt erstellen, geht es standardmäßig in den Namespace default ein.By default, when you create a new object, it goes into the default namespace. Es ist aber eine gute Vorgehensweise, aussagekräftigere Namespaces zu erstellen, damit die Ressourcen im Cluster besser organisiert werden können.But it's a good practice to create namespaces that are more descriptive to help organize the resources in the cluster.

Zunächst einmal tragen Namespaces zur Verhinderung von Namenskonflikten bei.First, namespaces help prevent naming collisions. Wenn mehrere Teams Microservices in demselben Cluster bereitstellen und ggf. Hunderte von Microservices vorhanden sind, wird die Verwaltung schwierig, falls alle in demselben Namespace enthalten sind.When multiple teams deploy microservices into the same cluster, with possibly hundreds of microservices, it gets hard to manage if they all go into the same namespace. Darüber hinaus haben Sie mit Namespaces folgende Möglichkeiten:In addition, namespaces allow you to:

  • Wenden Sie Ressourceneinschränkungen auf einen Namespace an, damit die Gesamtzahl der Pods, die diesem Namespace zugewiesen sind, das Ressourcenkontingent des Namespace nicht überschreiten kann.Apply resource constraints to a namespace, so that the total set of pods assigned to that namespace cannot exceed the resource quota of the namespace.

  • Wenden Sie Richtlinien auf Namespaceebene an, z.B. rollenbasierte Zugriffssteuerung und Sicherheitsrichtlinien.Apply policies at the namespace level, including RBAC and security policies.

Für eine Microservicearchitektur kann erwägt werden, die Microservices anhand von Kontextgrenzen zu organisieren und für jede Kontextgrenze Namespaces zu erstellen.For a microservices architecture, considering organizing the microservices into bounded contexts, and creating namespaces for each bounded context. Beispielsweise können alle Microservices, die sich auf die Kontextgrenze „Auftragserfüllung“ beziehen, in demselben Namespace angeordnet werden.For example, all microservices related to the "Order Fulfillment" bounded context could go into the same namespace. Alternativ hierzu können Sie auch einen Namespace für jedes Entwicklungsteam erstellen.Alternatively, create a namespace for each development team.

Ordnen Sie Hilfsdienste in einem separaten Namespace an.Place utility services into their own separate namespace. Beispielsweise können Sie Elasticsearch oder Prometheus für die Clusterüberwachung oder auch Tiller für Helm bereitstellen.For example, you might deploy Elasticsearch or Prometheus for cluster monitoring, or Tiller for Helm.

Überlegungen zur SkalierbarkeitScalability considerations

Für Kubernetes wird die horizontale Skalierung auf zwei Ebenen unterstützt:Kubernetes supports scale-out at two levels:

  • Skalieren Sie die Anzahl von Pods, die einer Bereitstellung zugeordnet sind.Scale the number of pods allocated to a deployment.
  • Skalieren Sie die Knoten im Cluster, um die gesamten Computeressourcen zu erhöhen, die für den Cluster verfügbar sind.Scale the nodes in the cluster, to increase the total compute resources available to the cluster.

Sie können Pods und Knoten zwar manuell horizontal hochskalieren, aber wir empfehlen Ihnen die Verwendung der automatischen Skalierung. So kann die Wahrscheinlichkeit verringert werden, dass es für Dienste bei hoher Belastung zu einem Ressourcenmangel kommt.Although you can scale out pods and nodes manually, we recommend using autoscaling, to minimize the chance that services will become resource starved under high load. Bei einer Strategie für die automatische Skalierung müssen sowohl Pods als auch Knoten berücksichtigt werden.An autoscaling strategy must take both pods and nodes into account. Wenn Sie nur die Pods horizontal hochskalieren, erreichen Sie schließlich die Ressourcengrenzwerte der Knoten.If you just scale out the pods, eventually you will reach the resource limits of the nodes.

Automatische Skalierung von PodsPod autoscaling

Bei der „horizontalen automatischen Podskalierung“ (Horizontal Pod Autoscaler, HPA) werden Pods basierend auf beobachteten CPU-, Arbeitsspeicher- oder benutzerdefinierten Metriken skaliert.The Horizontal Pod Autoscaler (HPA) scales pods based on observed CPU, memory, or custom metrics. Zum Konfigurieren der horizontalen Skalierung von Pods geben Sie eine Zielmetrik (z.B. 70% der CPU) und die minimale und maximale Anzahl von Replikaten an.To configure horizontal pod scaling, you specify a target metric (for example, 70% of CPU), and the minimum and maximum number of replicas. Sie sollten für Ihre Dienste einen Auslastungstest durchführen, um diese Zahlen abzuleiten.You should load test your services to derive these numbers.

Ein Nebeneffekt der automatischen Skalierung ist, dass Pods häufiger erstellt oder ausgeschlossen werden können, wenn Ereignisse mit horizontalem Hoch- und Herunterskalieren eintreten.A side-effect of autoscaling is that pods may be created or evicted more frequently, as scale-out and scale-in events happen. Gehen Sie wie folgt vor, um die Auswirkungen zu entschärfen:To mitigate the effects of this:

  • Verwenden Sie Bereitschaftstests, um Kubernetes mitzuteilen, wann ein neuer Pod Datenverkehr akzeptieren kann.Use readiness probes to let Kubernetes know when a new pod is ready to accept traffic.
  • Nutzen Sie Budgets für die Unterbrechung von Pods, um einzuschränken, wie viele Pods gleichzeitig aus einem Dienst ausgeschlossen werden können.Use pod disruption budgets to limit how many pods can be evicted from a service at a time.

Automatische Skalierung von ClusternCluster autoscaling

Mit der automatischen Skalierung von Clustern wird die Anzahl von Knoten skaliert.The cluster autoscaler scales the number of nodes. Falls Pods aufgrund von Ressourceneinschränkungen nicht geplant werden können, stellt die automatische Skalierung des Clusters mehr Knoten bereit.If pods can't be scheduled because of resource constraints, the cluster autoscaler will provision more nodes. (Hinweis: Die Integration zwischen AKS und der automatischen Skalierung des Clusters befindet sich derzeit in der Vorschauphase.)(Note: Integration between AKS and the cluster autoscaler is currently in preview.)

Während bei HPA auf die tatsächlich genutzten Ressourcen oder andere Metriken ausgeführter Pods geachtet wird, werden bei der automatischen Skalierung des Clusters Knoten für Pods bereitgestellt, die noch nicht geplant sind.Whereas HPA looks at actual resources consumed or other metrics from running pods, the cluster autoscaler is provisioning nodes for pods that aren't scheduled yet. Aus diesem Grund werden die angeforderten Ressourcen untersucht, die in der Kubernetes-Podspezifikation für eine Bereitstellung angegeben sind.Therefore, it looks at the requested resources, as specified in the Kubernetes pod spec for a deployment. Verwenden Sie Auslastungstests, um diese Werte zu optimieren.Use load testing to fine-tune these values.

Da Sie die VM-Größe nach dem Erstellen des Clusters nicht mehr ändern können, sollten Sie zunächst eine Kapazitätsplanung durchführen. Hierbei können Sie eine geeignete VM-Größe für die Agent-Knoten wählen, die beim Erstellen des Clusters verwendet werden soll.You can't change the VM size after you create the cluster, so you should do some initial capacity planning to choose an appropriate VM size for the agent nodes when you create the cluster.

Überlegungen zur VerfügbarkeitAvailability considerations

IntegritätstestsHealth probes

Mit Kubernetes werden zwei Arten von Integritätstest definiert, die von einem Pod verfügbar gemacht werden können:Kubernetes defines two types of health probe that a pod can expose:

  • Bereitschaftstest: Teilt Kubernetes mit, ob der Pod für das Akzeptieren von Anforderungen bereit ist.Readiness probe: Tells Kubernetes whether the pod is ready to accept requests.

  • Livetest: Teilt Kubernetes mit, ob ein Pod entfernt und eine neue Instanz gestartet werden soll.Liveness probe: Tells Kubernetes whether a pod should be removed and a new instance started.

Im Hinblick auf Tests ist es hilfreich, sich daran zu erinnern, wie ein Dienst in Kubernetes funktioniert.When thinking about probes, it's useful to recall how a service works in Kubernetes. Ein Dienst verfügt über eine Bezeichnungsauswahl, mit der eine Gruppe von (null oder mehr) Pods abgeglichen werden kann.A service has a label selector that matches a set of (zero or more) pods. Kubernetes führt für den Datenverkehr einen Lastenausgleich auf die Pods durch, die die Auswahlkriterien erfüllen.Kubernetes load balances traffic to the pods that match the selector. Nur Pods, die erfolgreich gestartet wurden und fehlerfrei sind, erhalten Datenverkehr.Only pods that started successfully and are healthy receive traffic. Falls ein Container abstürzt, nimmt Kubernetes den Pod außer Betrieb und plant einen Ersatz.If a container crashes, Kubernetes kills the pod and schedules a replacement.

Es kann vorkommen, dass ein Pod noch nicht für den Empfang von Datenverkehr bereit ist, obwohl er erfolgreich gestartet wurde.Sometimes, a pod may not be ready to receive traffic, even though the pod started successfully. Beispielsweise werden Initialisierungsaufgaben durchgeführt, bei denen die im Container ausgeführte Anwendung Dinge in den Arbeitsspeicher lädt oder Konfigurationsdaten liest.For example, there may be initialization tasks, where the application running in the container loads things into memory or reads configuration data. Definieren Sie einen Bereitschaftstest, um anzugeben, dass ein Pod fehlerfrei, aber noch nicht für den Empfang von Datenverkehr bereit ist.To indicate that a pod is healthy but not ready to receive traffic, define a readiness probe.

Livetests werden verwendet, wenn ein Pod noch ausgeführt wird, aber fehlerhaft ist und recycelt werden sollte.Liveness probes handle the case where a pod is still running, but is unhealthy and should be recycled. Angenommen, ein Container stellt HTTP-Anforderungen bereit, hängt aber aus irgendeinem Grund.For example, suppose that a container is serving HTTP requests but hangs for some reason. Der Container stürzt nicht ab, stellt aber keine Anforderungen mehr bereit.The container doesn't crash, but it has stopped serving any requests. Wenn Sie einen HTTP-Livetest definieren, antwortet der Test nicht mehr, und Kubernetes erhält die Information, dass der Pod neu gestartet werden muss.If you define an HTTP liveness probe, the probe will stop responding and that informs Kubernetes to restart the pod.

Hier sind einige Aspekte angegeben, die beim Entwerfen von Tests berücksichtigt werden sollten:Here are some considerations when designing probes:

  • Falls Ihr Code über eine lange Startdauer verfügt, besteht die Gefahr, dass bei einem Livetest ein Fehler gemeldet wird, bevor der Startvorgang abgeschlossen ist.If your code has a long startup time, there is a danger that a liveness probe will report failure before the startup completes. Verwenden Sie die Einstellung „initialDelaySeconds“, mit der der Start des Tests verzögert wird, um dies zu verhindern.To prevent this, use the initialDelaySeconds setting, which delays the probe from starting.

  • Ein Livetest stellt nur dann eine Hilfe dar, wenn ein Neustart des Pods wahrscheinlich ist, um den fehlerfreien Zustand wiederherzustellen.A liveness probe doesn't help unless restarting the pod is likely to restore it to a healthy state. Sie können einen Livetest als Maßnahme gegen Speicherverluste oder unerwartete Deadlocks verwenden, aber es hat keinen Zweck, einen Pod neu zu starten, für den sofort wieder ein Fehler auftritt.You can use a liveness probe to mitigate against memory leaks or unexpected deadlocks, but there's no point in restarting a pod that's going to immediately fail again.

  • In einigen Fällen werden Bereitschaftstests genutzt, um abhängige Dienste zu überprüfen.Sometimes readiness probes are used to check dependent services. Wenn für einen Pod beispielsweise eine Abhängigkeit von einer Datenbank besteht, kann mit dem Test ggf. die Datenbankverbindung überprüft werden.For example, if a pod has a dependency on a database, the probe might check the database connection. Dieser Ansatz kann aber zu unerwarteten Problemen führen.However, this approach can create unexpected problems. Unter Umständen ist ein externer Dienst aus einem bestimmten Grund vorübergehend nicht verfügbar.An external service might be temporarily unavailable for some reason. Dies führt dazu, dass der Bereitschaftstest für alle Pods Ihres Diensts fehlschlägt, sodass alle aus dem Lastenausgleich entfernt werden und es im weiteren Verlauf zu kaskadierenden Fehlern kommt.That will cause the readiness probe to fail for all the pods in your service, causing all of them to be removed from load balancing, and thus creating cascading failures upstream. Ein besserer Ansatz ist die Implementierung einer Verarbeitungswiederholung in Ihrem Dienst, damit Ihr Dienst nach vorübergehenden Fehlern korrekt wiederhergestellt werden kann.A better approach is to implement retry handling within your service, so that your service can recover correctly from transient failures.

RessourceneinschränkungenResource constraints

Ressourcenkonflikte können sich auf die Verfügbarkeit eines Diensts auswirken.Resource contention can affect the availability of a service. Definieren Sie Ressourceneinschränkungen für Container, damit ein einzelner Container die Clusterressourcen (Arbeitsspeicher und CPU) nicht überlasten kann.Define resource constraints for containers, so that a single container cannot overwhelm the cluster resources (memory and CPU). Für andere Ressourcen, bei denen es sich nicht um Container handelt, z.B. Threads oder Netzwerkverbindungen, können Sie das Bulkhead-Muster (Trennwandmuster) verwenden, um Ressourcen zu isolieren.For non-container resources, such as threads or network connections, consider using the Bulkhead Pattern to isolate resources.

Nutzen Sie Ressourcenkontingente, um die Gesamtzahl der Ressourcen, die für einen Namespace zulässig sind, zu begrenzen.Use resource quotas to limit the total resources allowed for a namespace. Auf diese Weise kann das Front-End die Back-End-Dienste für Ressourcen blockieren (oder umgekehrt).That way, the front end can't starve the backend services for resources or vice-versa.

SicherheitshinweiseSecurity considerations

Rollenbasierte Zugriffssteuerung (Role Based Access Control, RBAC)Role based access control (RBAC)

Kubernetes und Azure verfügen jeweils über Mechanismen für die rollenbasierte Zugriffssteuerung (RBAC):Kubernetes and Azure both have mechanisms for role-based access control (RBAC):

  • Mit der rollenbasierten Zugriffssteuerung von Azure wird der Zugriff auf Ressourcen in Azure gesteuert, z.B. auch die Möglichkeit zum Erstellen neuer Azure-Ressourcen.Azure RBAC controls access to resources in Azure, including the ability to create new Azure resources. Berechtigungen können Benutzern, Gruppen oder Dienstprinzipalen zugewiesen werden.Permissions can be assigned to users, groups, or service principals. (Ein Dienstprinzipal ist eine Sicherheitsidentität, die von Anwendungen verwendet wird.)(A service principal is a security identity used by applications.)

  • Mit der rollenbasierten Zugriffssteuerung von Kubernetes werden die Berechtigungen für die Kubernetes-API gesteuert.Kubernetes RBAC controls permissions to the Kubernetes API. Beispielsweise sind das Erstellen und Auflisten von Pods Aktionen, die per RBAC für einen Benutzer autorisiert (oder abgelehnt) werden können.For example, creating pods and listing pods are actions that can be authorized (or denied) to a user through RBAC. Zum Zuweisen von Kubernetes-Berechtigungen zu Benutzern erstellen Sie Rollen und Rollenbindungen:To assign Kubernetes permissions to users, you create roles and role bindings:

    • Eine Rolle ist ein Satz mit Berechtigungen, die innerhalb eines Namespace gelten.A Role is a set of permissions that apply within a namespace. Berechtigungen werden in Form von Verben (abrufen, aktualisieren, erstellen, löschen) für Ressourcen (Pods, Bereitstellungen usw.) definiert.Permissions are defined as verbs (get, update, create, delete) on resources (pods, deployments, etc.).

    • Mit einer Rollenbindung (RoleBinding) werden Benutzer oder Gruppen einer Rolle zugewiesen.A RoleBinding assigns users or groups to a Role.

    • Es ist auch ein ClusterRole-Objekt vorhanden. Dies ähnelt einer Rolle, gilt aber für den gesamten Cluster übergreifend für alle Namespaces.There is also a ClusterRole object, which is like a Role but applies to the entire cluster, across all namespaces. Erstellen Sie eine Clusterrollenbindung (ClusterRoleBinding), um Benutzer oder Gruppen einer Clusterrolle (ClusterRole) zuzuweisen.To assign users or groups to a ClusterRole, create a ClusterRoleBinding.

AKS integriert diese beiden RBAC-Mechanismen.AKS integrates these two RBAC mechanisms. Beim Erstellen eines AKS-Clusters können Sie diesen so konfigurieren, dass für die Benutzerauthentifizierung Azure AD verwendet wird.When you create an AKS cluster, you can configure it to use Azure AD for user authentication. Ausführliche Informationen zur Einrichtung finden Sie unter Integrieren von Azure Active Directory in Azure Kubernetes Service.For details on how to set this up, see Integrate Azure Active Directory with Azure Kubernetes Service.

Nachdem dies konfiguriert wurde, muss sich ein Benutzer, der Zugriff auf die Kubernetes-API erhalten möchte (z.B. über kubectl), mit seinen Azure AD-Anmeldeinformationen anmelden.Once this is configured, a user who wants to access the Kubernetes API (for example, through kubectl) must sign in using their Azure AD credentials.

Standardmäßig hat ein Azure AD-Benutzer keinen Zugriff auf den Cluster.By default, an Azure AD user has no access to the cluster. Zum Gewähren des Zugriffs erstellt der Clusteradministrator Rollenbindungen (RoleBindings), die sich auf Azure AD-Benutzer oder -Gruppen beziehen.To grant access, the cluster administrator creates RoleBindings that refer to Azure AD users or groups. Es tritt ein Fehler auf, wenn ein Benutzer nicht über die Berechtigungen für einen bestimmten Vorgang verfügt.If a user doesn't have permissions for a particular operation, it will fail.

Dies wirft folgende Frage auf: Wenn Benutzer standardmäßig keinen Zugriff haben, wie verfügt der Clusteradministrator dann überhaupt über die Berechtigung zum Erstellen der Rollenbindungen?If users have no access by default, how does the cluster admin have permission to create the role bindings in the first place? Ein AKS-Cluster weist zwei Arten von Anmeldeinformationen auf, mit denen der Kubernetes-API-Server aufgerufen wird: Clusterbenutzer und Clusteradministrator. Mit den Anmeldeinformationen für den Clusteradministrator wird Vollzugriff auf den Cluster gewährt.An AKS cluster actually has two types of credentials for calling the Kubernetes API server: cluster user and cluster admin. The cluster admin credentials grant full access to the cluster. Mit dem Azure CLI-Befehl az aks get-credentials --admin werden die Anmeldeinformationen des Clusteradministrators heruntergeladen und in Ihrer kubeconfig-Datei gespeichert.The Azure CLI command az aks get-credentials --admin downloads the cluster admin credentials and saves them into your kubeconfig file. Der Clusteradministrator kann diese kubeconfig-Datei zum Erstellen von Rollen und Rollenbindungen verwenden.The cluster administrator can use this kubeconfig to create roles and role bindings.

Da die Anmeldeinformationen des Clusteradministrators mit umfassenden Berechtigungen verbunden sind, können Sie Azure RBAC verwenden, um den Zugriff zu beschränken:Because the cluster admin credentials are so powerful, use Azure RBAC to restrict access to them:

  • Die „Administratorrolle für Azure Kubernetes Service-Cluster“ verfügt über die Berechtigung zum Herunterladen der Anmeldeinformationen für den Clusteradministrator.The "Azure Kubernetes Service Cluster Admin Role" has permission to download the cluster admin credentials. Dieser Rolle sollten nur Clusteradministratoren zugewiesen werden.Only cluster administrators should be assigned to this role.

  • Die „Benutzerrolle für Azure Kubernetes Service-Cluster“ verfügt über die Berechtigung zum Herunterladen der Anmeldeinformationen für den Clusterbenutzer.The "Azure Kubernetes Service Cluster User Role" has permission to download the cluster user credentials. Benutzer ohne Administratorrechte können dieser Rolle zugewiesen werden.Non-admin users can be assigned to this role. Mit dieser Rolle werden keine besonderen Berechtigungen für Kubernetes-Ressourcen im Cluster gewährt. Einem Benutzer wird lediglich die Berechtigung gewährt, eine Verbindung mit dem API-Server herzustellen.This role does not give any particular permissions on Kubernetes resources inside the cluster — it just allows a user to connect to the API server.

Beachten Sie beim Definieren Ihrer RBAC-Richtlinien (sowohl für Kubernetes als auch für Azure) die Rollen in Ihrer Organisation:When you define your RBAC policies (both Kubernetes and Azure), think about the roles in your organization:

  • Wer kann einen AKS-Cluster erstellen oder löschen und die Administratoranmeldeinformationen herunterladen?Who can create or delete an AKS cluster and download the admin credentials?
  • Wer kann einen Cluster verwalten?Who can administer a cluster?
  • Wer kann Ressourcen innerhalb eines Namespace erstellen oder aktualisieren?Who can create or update resources within a namespace?

Es ist eine bewährte Vorgehensweise, den Bereich für Kubernetes-RBAC-Berechtigungen basierend auf dem Namespace festzulegen, indem „Roles“ und „RoleBindings“ verwendet werden (anstatt „ClusterRoles“ und „ClusterRoleBindings“).It's a good practice to scope Kubernetes RBAC permissions by namespace, using Roles and RoleBindings, rather than ClusterRoles and ClusterRoleBindings.

Abschließend muss die Frage beantwortet werden, über welche Berechtigungen der AKS-Cluster für die Erstellung und Verwaltung von Azure-Ressourcen verfügt, z.B. Lastenausgleichsmodule, Netzwerke oder Speicher.Finally, there is the question of what permissions the AKS cluster has to create and manage Azure resources, such as load balancers, networking, or storage. Für die Authentifizierung gegenüber Azure-APIs nutzt der Cluster einen Azure AD-Dienstprinzipal.To authenticate itself with Azure APIs, the cluster uses an Azure AD service principal. Falls Sie beim Erstellen des Clusters keinen Dienstprinzipal angeben, wird automatisch einer erstellt.If you don't specify a service principal when you create the cluster, one is created automatically. Es ist aber eine gute Vorgehensweise in Bezug auf die Sicherheit, zuerst den Dienstprinzipal zu erstellen und ihm die RBAC-Mindestberechtigungen zuzuweisen.However, it's a good security practice to create the service principal first and assign the minimal RBAC permissions to it. Weitere Informationen finden Sie unter Dienstprinzipale mit Azure Kubernetes Service (AKS).For more information, see Service principals with Azure Kubernetes Service.

Geheimnisverwaltung und AnwendungsanmeldeinformationenSecrets management and application credentials

Anwendungen und Dienste benötigen häufig Anmeldeinformationen, mit denen sie sich an externen Diensten, z.B. Azure Storage oder SQL-Datenbank, anmelden können.Applications and services often need credentials that allow them to connect to external services such as Azure Storage or SQL Database. Die Herausforderung besteht darin, diese Anmeldeinformationen sicher aufzubewahren und vor der Offenlegung zu schützen.The challenge is to keep these credentials safe and not leak them.

Für Azure-Ressourcen besteht eine Option darin, verwaltete Identitäten zu nutzen.For Azure resources, one option is to use managed identities. Die Idee bei einer verwalteten Identität ist, dass für eine Anwendung oder einen Dienst eine Identität in Azure AD gespeichert ist, die zum Authentifizieren gegenüber einem Azure-Dienst verwendet wird.The idea of a managed identity is that an application or service has an identity stored in Azure AD, and uses this identity to authenticate with an Azure service. Für die Anwendung oder den Dienst wird in Azure AD ein Dienstprinzipal erstellt, und für die Authentifizierung werden OAuth 2.0-Token verwendet.The application or service has a Service Principal created for it in Azure AD, and authenticates using OAuth 2.0 tokens. Der ausführende Prozess ruft eine localhost-Adresse auf, um das Token abzurufen.The executing process calls a localhost address to get the token. Auf diese Weise müssen Sie keine Kennwörter oder Verbindungszeichenfolgen speichern.That way, you don't need to store any passwords or connection strings. Sie können verwaltete Identitäten in AKS nutzen, indem Sie den einzelnen Pods über das Projekt aad-pod-identity Identitäten zuweisen.You can use managed identities in AKS by assigning identities to individual pods, using the aad-pod-identity project.

Derzeit unterstützen nicht alle Azure-Dienste die Authentifizierung mit verwalteten Identitäten.Currently, not all Azure services support authentication using managed identities. Eine Liste finden Sie unter Azure-Dienste, die die Azure AD-Authentifizierung unterstützen.For a list, see Azure services that support Azure AD authentication.

Auch bei verwalteten Identitäten müssen Sie wahrscheinlich einige Anmeldeinformationen oder anderen Anwendungsgeheimnisse speichern, z.B. für Azure-Dienste, die keine verwalteten Identitäten unterstützen, Drittanbieterdienste, API-Schlüssel usw.Even with managed identities, you'll probably need to store some credentials or other application secrets, whether for Azure services that don't support managed identities, third-party services, API keys, and so on. Hier sind einige Optionen für die sichere Speicherung von Geheimnissen angegeben:Here are some options for storing secrets securely:

  • Azure Key Vault:Azure Key Vault. In AKS können Sie ein oder mehrere Geheimnisse aus Key Vault als Volume bereitstellen.In AKS, you can mount one or more secrets from Key Vault as a volume. Das Volume liest die Geheimnisse aus Key Vault aus.The volume reads the secrets from Key Vault. Der Pod kann die Geheimnisse dann wie ein reguläres Volume lesen.The pod can then read the secrets just like a regular volume. Weitere Informationen finden Sie unter dem Projekt Kubernetes-KeyVault-FlexVolume auf GitHub.For more information, see the Kubernetes-KeyVault-FlexVolume project on GitHub.

    Der Pod authentifiziert sich selbst entweder mit einer Pod-Identität (oben beschrieben) oder mit einem Azure AD-Dienstprinzipal und einem geheimen Clientschlüssel.The pod authenticates itself by using either a pod identity (described above) or by using an Azure AD Service Principal along with a client secret. Die Verwendung von Pod-Identitäten wird empfohlen, da der geheime Clientschlüssel in diesem Fall nicht benötigt wird.Using pod identities is recommended because the client secret isn't needed in that case.

  • HashiCorp Vault:HashiCorp Vault. Kubernetes-Anwendungen können sich auch per HashiCorp authentifizieren, indem sie verwaltete Azure AD-Identitäten verwenden.Kubernetes applications can authenticate with HashiCorp Vault using Azure AD managed identities. Weitere Informationen finden Sie unter HashiCorp Vault speaks Azure Active Directory (HashiCorp Vault spricht Azure Active Directory).See HashiCorp Vault speaks Azure Active Directory. Sie können Vault selbst für Kubernetes bereitstellen, aber es wird empfohlen, die Anwendung nicht in Ihrem Anwendungscluster, sondern in einem separaten dedizierten Cluster auszuführen.You can deploy Vault itself to Kubernetes, but it's recommend to run it in a separate dedicated cluster from your application cluster.

  • Kubernetes-Geheimnisse:Kubernetes secrets. Eine weitere Option ist einfach die Nutzung von Kubernetes-Geheimnissen.Another option is simply to use Kubernetes secrets. Diese Option ist am einfachsten zu konfigurieren, aber es sind auch einige Herausforderungen zu bewältigen.This option is the easiest to configure but has some challenges. Die Geheimnisse werden in „etcd“ gespeichert, wobei es sich um einen verteilten Schlüssel-Wert-Speicher handelt.Secrets are stored in etcd, which is a distributed key-value store. Bei AKS wird etcd im ruhenden Zustand verschlüsselt.AKS encrypts etcd at rest. Microsoft verwaltet die Verschlüsselungsschlüssel.Microsoft manages the encryption keys.

Die Nutzung eines Systems wie HashiCorp Vault oder Azure Key Vault hat mehrere Vorteile, z.B.:Using a system like HashiCorp Vault or Azure Key Vault provides several advantages, such as:

  • Zentralisierte Steuerung der GeheimnisseCentralized control of secrets.
  • Sicherheit, dass alle Geheimnisse im Ruhezustand verschlüsselt sindEnsuring that all secrets are encrypted at rest.
  • Zentrale SchlüsselverwaltungCentralized key management.
  • Zugriffssteuerung für GeheimnisseAccess control of secrets.
  • ÜberwachungAuditing

Pod- und ContainersicherheitPod and container security

Dies ist keine vollständige Liste, aber hier sind einige empfohlene Vorgehensweisen zum Schützen Ihrer Pods und Container angegeben:This list is certainly not exhaustive, but here are some recommended practices for securing your pods and containers:

Führen Sie Container nicht im privilegierten Modus aus.Don't run containers in privileged mode. Im privilegierten Modus hat ein Container Zugriff auf alle Geräte auf dem Host.Privileged mode gives a container access to all devices on the host. Sie können eine Pod-Sicherheitsrichtlinie festlegen, um die Ausführung im privilegierten Modus für Container zu unterbinden.You can set Pod Security Policy to disallow containers from running in privileged mode.

Vermeiden Sie nach Möglichkeit die Ausführung von Prozessen als Root-Benutzer innerhalb von Containern.When possible, avoid running processes as root inside containers. Container bieten aus Sicherheitssicht keine vollständige Isolation, und es ist besser, einen Containerprozess als nicht privilegierter Benutzer auszuführen.Containers do not provide complete isolation from a security standpoint, so it's better to run a container process as a non-privileged user.

Speichern Sie Images in einer vertrauenswürdigen privaten Registrierung, z.B. Azure Container Registry oder Docker Trusted Registry.Store images in a trusted private registry, such as Azure Container Registry or Docker Trusted Registry. Verwenden Sie in Kubernetes einen Webhook für die Aufnahmeüberprüfung, um sicherzustellen, dass Pods Images nur aus der vertrauenswürdigen Registrierung per Pullvorgang abrufen können.Use a validating admission webhook in Kubernetes to ensure that pods can only pull images from the trusted registry.

Scannen Sie Images und laufende Container auf bekannte Sicherheitsrisiken, indem Sie Scanlösungen wie Twistlock oder Aqua verwenden, die über den Azure Marketplace erhältlich sind.Scan images and running containers for known vulnerabilities, using a scanning solution such as Twistlock and Aqua, which are available through the Azure Marketplace.

Automatisieren Sie das Patchen der Images mit ACR Tasks, einem Feature von Azure Container Registry.Automate image patching using ACR Tasks, a feature of Azure Container Registry. Ein Containerimage besteht aus verschiedenen Ebenen.A container image is built up from layers. Die Basisebenen enthalten das Betriebssystemimage und die Anwendungsframework-Images, z.B. ASP.NET Core oder Node.js.The base layers include the OS image and application framework images, such as ASP.NET Core or Node.js. Die Erstellung der Basisimages ist den Anwendungsentwicklern normalerweise vorgeschaltet, und die Verwaltung wird von anderen Projektbeteiligten durchgeführt.The base images are typically created upstream from the application developers, and are maintained by other project maintainers. Wenn diese Images vorher gepatcht werden, ist es wichtig, dass Sie Ihre eigenen Images aktualisieren, testen und erneut bereitstellen, damit keine bekannten Sicherheitsrisiken bestehen.When these images are patched upstream, it's important to update, test, and redeploy your own images, so that you don't leave any known security vulnerabilities. ACR Tasks kann zum Automatisieren dieses Prozesses beitragen.ACR Tasks can help to automate this process.

Bereitstellungsaspekte (CI/CD)Deployment (CI/CD) considerations

Hier sind einige Ziele eines stabilen CI/CD-Prozesses für eine Microservicearchitektur aufgeführt:Here are some goals of a robust CI/CD process for a microservices architecture:

  • Jedes Team kann die eigenen Dienste unabhängig erstellen und bereitstellen, ohne dass andere Teams hierdurch beeinträchtigt oder gestört werden.Each team can build and deploy the services that it owns independently, without affecting or disrupting other teams.
  • Bevor eine neue Version eines Diensts für die Produktion bereitgestellt wird, wird sie zunächst zur Überprüfung in Umgebungen für die Entwicklung, Tests und Qualitätssicherung bereitgestellt.Before a new version of a service is deployed to production, it gets deployed to dev/test/QA environments for validation. Jede Phase verfügt über so genannte „Quality Gates“.Quality gates are enforced at each stage.
  • Eine neue Version eines Diensts kann parallel zur vorherigen Version bereitgestellt werden.A new version of a service can be deployed side by side with the previous version.
  • Es sind ausreichende Richtlinien für die Zugriffssteuerung vorhanden.Sufficient access control policies are in place.
  • Bei Workloads in Containern können Sie den Containerimages vertrauen, die für die Produktion bereitgestellt werden.For containerized workloads, you can trust the container images that are deployed to production.

Weitere Informationen zu den Herausforderungen finden Sie unter CI/CD für Microservicearchitekturen.To learn more about the challenges, see CI/CD for microservices architectures.

Bestimmte Empfehlungen und Best Practices finden Sie unter CI/CD für Microservices in Kubernetes.For specific recommendations and best practices, see CI/CD for microservices on Kubernetes.

Bereitstellen der LösungDeploy the solution

Führen Sie die Schritte im GitHub-Repository aus, um die Referenzimplementierung für diese Architektur bereitzustellen.To deploy the reference implementation for this architecture, follow the steps in the GitHub repo.