Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✔️ AKS Automatic
Azure Kubernetes Service (AKS) Automatic bietet die einfachste verwaltete Kubernetes-Erfahrung für Entwickler, DevOps-Ingenieure und Plattformtechniker. AKS Automatic automatisiert die Einrichtung von AKS-Clustern sowie Clustervorgänge und bettet Konfigurationen mit bewährten Methoden ein, wodurch es sich ideal für moderne Anwendungen und KI-Anwendungen (künstliche Intelligenz) eignet. Unabhängig von ihren Kenntnissen und Qualifikationen können alle Benutzer von der Sicherheit, Leistung und Zuverlässigkeit profitieren, die AKS Automatic für ihre Anwendungen bietet. AKS Automatic umfasst auch eine Vereinbarung zur Betriebsbereitschaft der Pods, die garantiert, dass 99,9 % der qualifizierenden Pod-Bereitschaftsvorgänge innerhalb von 5 Minuten abgeschlossen werden, wodurch eine zuverlässige, selbstheilende Infrastruktur für Ihre Anwendungen sichergestellt wird. Für diese Schnellstartanleitung werden Grundkenntnisse in Bezug auf die Kubernetes-Konzepte vorausgesetzt. Weitere Informationen finden Sie unter Kubernetes Kernkonzepte für Azure Kubernetes Service (AKS).
In dieser Schnellstartanleitung lernen Sie Folgendes:
- Erstellen Sie ein virtuelles Netzwerk.
- Erstellen Sie eine verwaltete Identität mit Berechtigungen für das virtuelle Netzwerk.
- Stellen Sie einen privaten AKS Automatic Cluster im virtuellen Netzwerk bereit.
- Stellen Sie eine Verbindung mit dem privaten Cluster her.
- Führen Sie eine Beispielanwendung mit mehreren Containern mit einer Gruppe von Microservices und Web-Front-Ends aus, die ein Einzelhandelsszenario simulieren.
Voraussetzungen
- Wenn Sie kein Azure Konto haben, erstellen Sie ein free-Konto.
- Azure CLI Version 2.86.0 oder höher. Um die Version zu finden, führen Sie den Befehl aus
az --version. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI.
Hinweis
In diesem Beispiel wird der automatische AKS-Cluster mit der Ressource des AzureRM-Anbieters azurerm_kubernetes_automatic_cluster erstellt, für den die AzureRM-Anbieterversion v4.81 oder höher erforderlich ist. Ein entsprechendes Beispiel, das den AzAPI-Anbieter verwendet, finden Sie im Beispiel "101-aks-automatic-private-custom-network-azapi" .
- Clusteridentität mit einer
Network Contributorintegrierten Rollenzuweisung im API-Server-Subnetz. - Clusteridentität mit einer
Network Contributorintegrierten Rollenzuweisung im virtuellen Netzwerk zur Unterstützung der automatischen Bereitstellung vonKnoten. - Auf den Cluster wird mit der Benutzeridentität
Azure Kubernetes Service Cluster User RoleundAzure Kubernetes Service RBAC Writerzugegriffen. - Ein virtuelles Netzwerk mit einem dedizierten API-Server-Subnetz mit mindestens
*/28Größe, das anMicrosoft.ContainerService/managedClustersdelegiert wird.- Wenn eine Netzwerksicherheitsgruppe (Network Security Group, NSG) an Subnetze angefügt ist, stellen Sie sicher, dass die Regeln den folgenden Datenverkehr zulassen zwischen den Knoten und dem API-Server, dem Azure Load Balancer und dem API-Server und der Pod-zu-Pod-Kommunikation.
- Wenn eine Azure Firewall oder eine andere ausgehende Einschränkungsmethode oder Appliance vorhanden ist, stellen Sie sicher, dass die angeforderten ausgehenden Netzwerkregeln und FQDNs zulässig sind.
- AKS Automatic aktiviert Azure Policy auf Ihrem AKS-Cluster, Sie sollten jedoch den
Microsoft.PolicyInsights-Ressourcenanbieter in Ihrem Abonnement vorab registrieren, um einen reibungsloseren Ablauf zu gewährleisten. Weitere Informationen finden Sie unter Azure Ressourcenanbieter und -typen. - Deinstallieren Sie die AKS-Preview-Erweiterung mit
az extension remove -n aks-preview.
Von Bedeutung
Ab AKS 1.36 werden neue AKS-Automatik-Cluster standardmäßig Kubernetes Gateway API über das Application Routing Add-on anstelle von Verwaltetem NGINX Ingress mit dem Application Routing Add-on aufgrund der Ablösung von Ingress NGINX durch das Upstream aktivieren.
Vorhandene automatische Cluster sind nicht betroffen, sollten aber mit der Migration zur Kubernetes-Gateway-API über das Anwendungsrouting-Add-On beginnen.
Einschränkungen
Die folgenden Einschränkungen gelten für automatische AKS-Cluster:
- AKS Automatic ist in den folgenden Regionen allgemein verfügbar:
australiacentral,australiaeast,australiasoutheast,austriaeast,belgiumcentral,brazilsouth,canadaeast,norwayeast,canadacentral,southindia,southeastasia,southcentralus,southafricanorth,polandcentral,northeurope,swedencentral,eastus2,eastus,eastasia,denmarkeast,francecentral,chilecentral,centralindia,newzealandnorth,mexicocentral,northcentralus,spaincentral,koreasouth,westus,koreacentral,israelcentral,indonesiacentral,italynorth,germanywestcentral,japaneast,centralus,japanwest,malaysiawest,westcentralus,ukwest,westeurope,uaenorth,uksouth,switzerlandnorth,westus2,westus3. - Neue automatische AKS-Cluster aktivieren standardmäßig verwaltete Systemknotenpools und LocalDNS. Sie können keine automatischen AKS-Cluster ohne verwaltete Systemknotenpools in einer beliebigen Region erstellen.
- AKS Automatic ist mit node resource group lockdown vorkonfiguriert, wodurch keine Änderungen an der Ressourcengruppe
MC_zulässig sind und virtuelle Netzwerkverknüpfungen in der standardmäßigen privaten DNS-Zone verhindert werden. Für VNet-übergreifende oder benutzerdefinierte DNS-Szenarien verwenden Sie ein benutzerdefiniertes Netzwerk und einen privaten DNS gemäß den Anweisungen unter Erstellen eines privaten Azure Kubernetes Service (AKS) automatischen Clusters in einem benutzerdefinierten virtuellen Netzwerk. - Azure CLI Version 2.86.0 oder höher ist erforderlich. Um die Version zu finden, führen Sie den Befehl aus
az --version. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI. - Die folgenden Erweiterungen werden nicht unterstützt:
- Windows-Knoten werden nicht unterstützt.
- Die Migration von AKS-Basis-SKU zu automatischer SKU wird nicht unterstützt.
- Die Migration von einem vorhandenen automatischen AKS-Cluster ohne verwaltete Systemknotenpools zu AKS Automatic mit verwalteten Systemknotenpools wird in der Vorschau in Regionen unterstützt, in denen verwaltete Systemknotenpools allgemein verfügbar sind. Die Migration von AKS Automatic mit verwalteten Systemknotenpools zurück zu AKS Automatic ohne verwaltete Systemknotenpools wird nicht unterstützt.
Definieren von Variablen
Definieren Sie die folgenden Variablen, die in den nachfolgenden Schritten verwendet werden.
RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
Erstellen einer Ressourcengruppe
Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure Ressourcen bereitgestellt und verwaltet werden.
Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.
az group create -n ${RG_NAME} -l ${LOCATION}
Die folgende Beispielausgabe ähnelt der Ausgabe bei der erfolgreichen Erstellung der Ressourcengruppe:
{
"id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
"location": "canadacentral",
"managedBy": null,
"name": "automatic-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Erstellen eines virtuellen Netzwerks
Erstellen Sie ein virtuelles Netzwerk mit dem Befehl az network vnet create. Erstellen Sie mithilfe des az network vnet subnet create Befehls ein API-Server-Subnetz und ein Cluster-Subnetz.
Wenn Sie ein benutzerdefiniertes virtuelles Netzwerk mit AKS Automatic verwenden, müssen Sie ein API-Server-Subnetz erstellen. AKS delegiert das Subnetz in Ihrem Auftrag an Microsoft.ContainerService/managedClusters, wodurch dem AKS-Dienst die Berechtigungen erteilt werden, die API-Server-Pods und den internen Lastenausgleich in dieses Subnetz einzufügen. Sie können das Subnetz nicht für andere Workloads verwenden, aber Sie können es für das API-Server-Subnetz für mehrere AKS-Cluster im selben virtuellen Netzwerk verwenden. Die minimale unterstützte API-Server-Subnetzgröße zur Unterstützung eines einzelnen Clusters ist ein /28.
Warnung
Ein AKS-Cluster reserviert mindestens neun (9) IPs im Subnetzadressraum. Wenn die IP-Adressen ausgehen, könnte dies die Skalierung des API-Servers verhindern und zu einem Ausfall des API-Servers führen.
az network vnet create --name ${VNET_NAME} \
--resource-group ${RG_NAME} \
--location ${LOCATION} \
--address-prefixes 172.19.0.0/16
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name apiServerSubnet \
--delegations Microsoft.ContainerService/managedClusters \
--address-prefixes 172.19.0.0/28
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name userNodeSubnet \
--address-prefixes 172.19.1.0/24
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name managedSystemNodeSubnet \
--address-prefixes 172.19.0.64/26
Netzwerksicherheitsgruppen-Regeln
Der gesamte Datenverkehr innerhalb des virtuellen Netzwerks ist standardmäßig zulässig. Wenn Sie jedoch Regeln für die Netzwerksicherheitsgruppe (Network Security Group, NSG) zum Einschränken des Datenverkehrs zwischen verschiedenen Subnetzen hinzugefügt haben, stellen Sie sicher, dass die NSG-Sicherheitsregeln die folgenden Kommunikationstypen zulassen:
| Bestimmungsort | Quelle | Protokoll | Hafen | Verwendung |
|---|---|---|---|---|
| APIServer-Subnetz-CIDR | Subnetz des Benutzerknotens und Subnetz des Systemknotens | TCP | 443 und 4443 | Erforderlich, um die Kommunikation zwischen Knoten und dem API-Server zu aktivieren. |
| APIServer-Subnetz-CIDR | Azure Load Balancer | TCP | 9988 | Erforderlich, um die Kommunikation zwischen Azure Load Balancer und dem API-Server zu aktivieren. Sie können auch die gesamte Kommunikation zwischen dem Azure Load Balancer und dem API Server Subnet CIDR aktivieren. |
| Knoten-CIDR | Knoten-CIDR | Alle Protokolle | Alle Ports | Erforderlich, um die Kommunikation zwischen Knoten zu aktivieren. |
| Knoten-CIDR | Pod-CIDR | Alle Protokolle | Alle Ports | Erforderlich für das Dienstdatenverkehrsrouting. |
| Pod-CIDR | Pod-CIDR | Alle Protokolle | Alle Ports | Erforderlich für Pod-zu-Pod- und Pod-zu-Dienst-Datenverkehr, einschließlich DNS. |
Erstellen einer verwalteten Identität und Erteilen von Berechtigungen im virtuellen Netzwerk
Erstellen Sie mithilfe des az identity create Befehls eine verwaltete Identität, und rufen Sie die Principal-ID ab. Weisen Sie die Rolle "Netzwerkmitwirkender" im virtuellen Netzwerk mithilfe des az role assignment create Befehls der verwalteten Identität zu.
az identity create \
--resource-group ${RG_NAME} \
--name ${IDENTITY_NAME} \
--location ${LOCATION}
IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query principalId -o tsv)
az role assignment create \
--scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}" \
--role "Network Contributor" \
--assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \
--assignee-principal-type ServicePrincipal
Erstellen eines privaten AKS Automatic Cluster in einem benutzerdefinierten virtuellen Netzwerk
Verwenden Sie zum Erstellen eines privaten AKS Automatic Cluster den Befehl "az aks create ". Beachten Sie die Verwendung der --enable-private-cluster Kennzeichnung.
Hinweis
Sie können in der Dokumentation zu privaten Clustern weitere Optionen konfigurieren, z. B. das Deaktivieren des öffentlichen FQDN des Clusters und das Konfigurieren der privaten DNS-Zone.
az aks create \
--resource-group ${RG_NAME} \
--name ${CLUSTER_NAME} \
--location ${LOCATION} \
--apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" \
--node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/userNodeSubnet" \
--system-node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/managedSystemNodeSubnet"
--assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" \
--sku automatic \
--enable-private-cluster \
--no-ssh-key
Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben.
Herstellen einer Verbindung mit dem Cluster
Wenn ein automatischer AKS-Cluster als privater Cluster erstellt wird, hat der API-Serverendpunkt keine öffentliche IP-Adresse. Um den API-Server zu verwalten, z. B. über kubectl, müssen Sie eine Verbindung über einen Computer herstellen, der Zugriff auf das Azure virtuelle Netzwerk des Clusters hat. Es gibt mehrere Optionen zum Einrichten der Netzwerkkonnektivität mit dem privaten Cluster:
- Erstellen Sie einen virtuellen Computer im selben virtuellen Netzwerk wie der automatische AKS-Cluster mithilfe des
az vm createBefehls mit der--vnet-nameKennzeichnung. - Verwenden Sie einen virtuellen Computer in einem separaten virtuellen Netzwerk, und richten Sie peering für virtuelle Netzwerke ein.
- Verwenden Sie eine ExpressRoute- oder VPN-Verbindung.
- Verwenden Sie eine private Endpunktverbindung .
Das Erstellen eines virtuellen Computers im selben virtuellen Netzwerk wie der AKS-Cluster ist die einfachste Option. ExpressRoute und VPNs fügen Kosten hinzu und erfordern weitere Netzwerkkomplexität. Beim Peering virtueller Netzwerke müssen Sie Ihre Netzwerk-CIDR-Bereiche planen, um sicherzustellen, dass es keine überlappenden Bereiche gibt. Weitere Informationen finden Sie unter "Optionen zum Herstellen einer Verbindung mit dem privaten Cluster".
Um einen Kubernetes-Cluster zu verwalten, verwenden Sie den Kubernetes-Befehlszeilenclient kubectl.
kubectl ist bereits installiert, wenn Sie Azure Cloud Shell verwenden. Führen Sie für die lokale Installation von kubectl den Befehl az aks install-cli aus. AKS Automatic-Cluster sind mit Microsoft Entra ID für Kubernetes rollenbasierte Zugriffskontrolle (RBAC) konfiguriert.
Wenn Sie einen Cluster mithilfe des Azure CLI erstellen, werden Ihrem Benutzer integrierte Rollen zugewiesen für Azure Kubernetes Service RBAC Cluster Admin.
Mit dem Befehl kubectl können Sie für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.
az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}
Überprüfen Sie die Verbindung mit dem Cluster mithilfe des Befehls kubectl get. Dieser Befehl gibt eine Liste der Clusterknoten zurück.
kubectl get nodes
Die folgende Beispielausgabe zeigt, wie Sie aufgefordert werden, sich anzumelden.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
Nach der Anmeldung zeigt die folgende Beispielausgabe die verwalteten Systemknotenpools an. Stellen Sie sicher, dass der Knotenstatus Bereit lautet.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
Erstellen eines virtuellen Netzwerks
Diese Bicep Datei definiert ein virtuelles Netzwerk.
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'
@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'
@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'
@description('The name of the user node subnet.')
param userNodeSubnetName string = 'userNodeSubnet'
@description('The subnet prefix of the user node subnet.')
param userNodeSubnetPrefix string = '172.19.1.0/24'
@description('The name of the system node subnet.')
param systemNodeSubnetName string = 'systemNodeSubnet'
@description('The subnet prefix of the system node subnet.')
param systemNodeSubnetPrefix string = '172.19.0.64/26'
// Virtual network with an API server subnet, a user node subnet, and a system node subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [ addressPrefix ]
}
subnets: [
{
name: apiServerSubnetName
properties: {
addressPrefix: apiServerSubnetPrefix
}
}
{
name: userNodeSubnetName
properties: {
addressPrefix: userNodeSubnetPrefix
}
}
{
name: systemNodeSubnetName
properties: {
addressPrefix: systemNodeSubnetPrefix
}
}
]
}
}
output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output userNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, userNodeSubnetName)
output systemNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, systemNodeSubnetName)
Speichern Sie die Bicep Datei virtualNetwork.bicep auf Ihren lokalen Computer.
Von Bedeutung
Die Datei Bicep legt den vnetName Parameter auf aksAutomaticVnet, den addressPrefix Parameter auf 172.19.0.0/16 fest, den apiServerSubnetPrefix Parameter auf 172.19.0.0/28 und den apiServerSubnetPrefix Parameter auf 172.19.1.0/24. Wenn Sie unterschiedliche Werte verwenden möchten, müssen Sie die Zeichenfolgen auf Ihre bevorzugten Werte aktualisieren.
Stellen Sie die Bicep Datei mithilfe des Azure CLI bereit.
az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep
Der gesamte Datenverkehr innerhalb des virtuellen Netzwerks ist standardmäßig zulässig. Wenn Sie jedoch Regeln für die Netzwerksicherheitsgruppe (Network Security Group, NSG) zum Einschränken des Datenverkehrs zwischen verschiedenen Subnetzen hinzugefügt haben, stellen Sie sicher, dass die NSG-Sicherheitsregeln die folgenden Kommunikationstypen zulassen:
| Bestimmungsort | Quelle | Protokoll | Hafen | Verwendung |
|---|---|---|---|---|
| APIServer-Subnetz-CIDR | Subnetz des Benutzerknotens und Subnetz des Systemknotens | TCP | 443 und 4443 | Erforderlich, um die Kommunikation zwischen Knoten und dem API-Server zu aktivieren. |
| APIServer-Subnetz-CIDR | Azure Load Balancer | TCP | 9988 | Erforderlich, um die Kommunikation zwischen Azure Load Balancer und dem API-Server zu aktivieren. Sie können auch die gesamte Kommunikation zwischen dem Azure Load Balancer und dem API Server Subnet CIDR aktivieren. |
| Knoten-CIDR | Knoten-CIDR | Alle Protokolle | Alle Ports | Erforderlich, um die Kommunikation zwischen Knoten zu aktivieren. |
| Knoten-CIDR | Pod-CIDR | Alle Protokolle | Alle Ports | Erforderlich für das Dienstdatenverkehrsrouting. |
| Pod-CIDR | Pod-CIDR | Alle Protokolle | Alle Ports | Erforderlich für Pod-zu-Pod- und Pod-zu-Dienst-Datenverkehr, einschließlich DNS. |
Erstellen einer verwalteten Identität
Diese Bicep Datei definiert eine vom Benutzer zugewiesene verwaltete Identität.
param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: uamiName
location: location
}
output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId
Speichern Sie die Bicep Datei uami.bicep auf Ihren lokalen Computer.
Von Bedeutung
Die Bicep-Datei legt den uamiName-Parameter auf aksAutomaticUAMI fest. Wenn Sie einen anderen Identitätsnamen verwenden möchten, müssen Sie die Zeichenfolge auf Ihren bevorzugten Namen aktualisieren.
Stellen Sie die Bicep Datei mithilfe des Azure CLI bereit.
az deployment group create --resource-group <resource-group> --template-file uami.bicep
Zuweisen der Rolle „Netzwerkmitwirkender“ für das virtuelle Netzwerk
Diese Bicep Datei definiert Rollenzuweisungen über das virtuelle Netzwerk.
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string
// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
name: vnetName
}
// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
scope: virtualNetwork
properties: {
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
principalId: uamiPrincipalId
}
}
Speichern Sie die Bicep Datei roleAssignments.bicep auf Ihren lokalen Computer.
Von Bedeutung
Die datei Bicep legt den vnetName param auf aksAutomaticVnet fest. Wenn Sie einen anderen Namen für das virtuelle Netzwerk verwendet haben, müssen Sie diesen auf Ihren bevorzugten Netzwerknamen aktualisieren.
Stellen Sie die Bicep Datei mithilfe des Azure CLI bereit. Sie müssen die Prinzipal-ID der benutzerseitig zugewiesenen Identität angeben.
az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
Erstellen eines privaten AKS Automatic Cluster in einem benutzerdefinierten virtuellen Netzwerk
Diese Bicep-Datei definiert einen AKS Automatic-Cluster.
Hinweis
Sie können in der Dokumentation zu privaten Clustern weitere Optionen konfigurieren, z. B. das Deaktivieren des öffentlichen Cluster-FQDN und das Konfigurieren der privaten DNS-Zone.
@description('The name of the managed cluster resource.')
param clusterName string = 'aksPrivateAutomaticCluster'
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The resource ID of the API server subnet.')
param apiServerSubnetId string
@description('The resource ID of the user node subnet.')
param userNodeSubnetId string
@description('The resource ID of the system node subnet.')
param systemNodeSubnetId string
@description('The resource ID of the user assigned managed identity.')
param uamiId string
/// Create the private AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
name: clusterName
location: location
sku: {
name: 'Automatic'
}
properties: {
apiServerAccessProfile: {
subnetId: apiServerSubnetId
enablePrivateCluster: true
}
networkProfile: {
outboundType: 'loadBalancer'
}
hostedSystemProfile: {
systemNodeSubnetID: systemNodeSubnetId
nodeSubnetID: userNodeSubnetId
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${uamiId}': {}
}
}
}
Speichern Sie die Bicep Datei aks.bicep auf Ihren lokalen Computer.
Von Bedeutung
Die Bicep Datei legt den clusterName Param auf aksPrivateAutomaticCluster fest. Wenn Sie einen anderen Clusternamen verwenden möchten, müssen Sie die Zeichenfolge auf Ihren bevorzugten Clusternamen aktualisieren.
Stellen Sie die Bicep Datei mithilfe des Azure CLI bereit. Sie müssen die API-Server-Subnetzressourcen-ID, die Subnetzressourcen-ID des Benutzerknotens, die Subnetzressourcen-ID des Systemknotens und die vom Benutzer zugewiesene VERWALTETe Identitätsressourcen-ID angeben.
az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters nodeSubnetId=<user node subnet resource id> \
--parameters systemNodeSubnetId=<system node subnet resource id> \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
Herstellen einer Verbindung mit dem Cluster
Wenn ein automatischer AKS-Cluster als privater Cluster erstellt wird, hat der API-Serverendpunkt keine öffentliche IP-Adresse. Um den API-Server zu verwalten, z. B. über kubectl, müssen Sie eine Verbindung über einen Computer herstellen, der Zugriff auf das Azure virtuelle Netzwerk des Clusters hat. Es gibt mehrere Optionen zum Einrichten der Netzwerkkonnektivität mit dem privaten Cluster:
- Erstellen Sie einen virtuellen Computer im selben virtuellen Netzwerk wie der automatische AKS-Cluster mithilfe des
az vm createBefehls mit der--vnet-nameKennzeichnung. - Verwenden Sie einen virtuellen Computer in einem separaten virtuellen Netzwerk, und richten Sie peering für virtuelle Netzwerke ein.
- Verwenden Sie eine ExpressRoute- oder VPN-Verbindung.
- Verwenden Sie eine private Endpunktverbindung .
Das Erstellen eines virtuellen Computers im selben virtuellen Netzwerk wie der AKS-Cluster ist die einfachste Option. Express Route und VPNs fügen Kosten hinzu und erfordern mehr Netzwerkkomplexität. Beim Peering virtueller Netzwerke müssen Sie Ihre Netzwerk-CIDR-Bereiche planen, um sicherzustellen, dass es keine überlappenden Bereiche gibt. Weitere Informationen finden Sie unter "Optionen zum Herstellen einer Verbindung mit dem privaten Cluster".
Um einen Kubernetes-Cluster zu verwalten, verwenden Sie den Kubernetes-Befehlszeilenclient kubectl.
kubectl ist bereits installiert, wenn Sie Azure Cloud Shell verwenden. Führen Sie für die lokale Installation von kubectl den Befehl az aks install-cli aus. AKS Automatic-Cluster sind mit Microsoft Entra ID für Kubernetes rollenbasierte Zugriffskontrolle (RBAC) konfiguriert.
Von Bedeutung
Wenn Sie einen Cluster mit Bicep erstellen, müssen Sie eine der integrierten Rollen zuweisen wie Azure Kubernetes Service RBAC Reader, Azure Kubernetes Service RBAC Writer, Azure Kubernetes Service RBAC Admin oder Azure Kubernetes Service RBAC Cluster Admin für Ihre Benutzer, die auf den Cluster oder einen bestimmten Namespace ausgerichtet sind, z. B. mithilfe von az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --scope <AKS cluster resource id> --assignee user@contoso.com. Stellen Sie außerdem sicher, dass Ihre Benutzer die eingebaute Rolle Azure Kubernetes Service Cluster User haben, um az aks get-credentials ausführen zu können. Verwenden Sie dann den Befehl az aks get-credentials, um die Kubeconfig Ihres AKS-Clusters abzurufen.
Mit dem Befehl kubectl können Sie für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
Überprüfen Sie die Verbindung mit dem Cluster mithilfe des Befehls kubectl get. Dieser Befehl gibt eine Liste der Clusterknoten zurück.
kubectl get nodes
Die folgende Beispielausgabe zeigt, wie Sie aufgefordert werden, sich anzumelden.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
Nach der Anmeldung zeigt die folgende Beispielausgabe die verwalteten Systemknotenpools an. Stellen Sie sicher, dass der Knotenstatus Bereit lautet.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
Überprüfen Sie den Terraform-Code
Hinweis
Der Beispielcode für diesen Artikel befindet sich im Azure Terraform-GitHub-Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.
Sehen Sie weitere Artikel und Beispielcode, die zeigen, wie Terraform zur Verwaltung von Azure-Ressourcen verwendet wird.
Erstellen Sie ein Verzeichnis, um den Terraform-Beispielcode zu testen und als aktuelles Verzeichnis festzulegen.
Erstellen Sie eine Datei mit dem Namen
providers.tf, und fügen Sie den folgenden Code ein:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>5.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Erstellen Sie eine Datei mit dem Namen
main.tfund fügen Sie folgenden Code hinzu:# Create a random name for the resource group using random_pet resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } # Create a resource group using the generated random name resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create the custom virtual network that hosts the cluster resource "azurerm_virtual_network" "vnet" { name = var.virtual_network_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name address_space = var.virtual_network_address_space } # Create the subnet delegated to AKS for API Server VNet Integration resource "azurerm_subnet" "api_server" { name = "apiServerSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.api_server_subnet_address_prefixes delegation { name = "aks-delegation" service_delegation { name = "Microsoft.ContainerService/managedClusters" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] } } } # Create the subnet that hosts the user node pools resource "azurerm_subnet" "user_nodes" { name = "userNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.user_node_subnet_address_prefixes } # Create the subnet that hosts the managed system node pool resource "azurerm_subnet" "system_nodes" { name = "managedSystemNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.system_node_subnet_address_prefixes lifecycle { # AKS adds its own managed cluster delegation to this subnet after the # cluster is created. ignore_changes = [delegation] } } # Create the user-assigned managed identity used by the cluster resource "azurerm_user_assigned_identity" "aks" { name = var.identity_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Grant the cluster identity Network Contributor on the virtual network resource "azurerm_role_assignment" "network_contributor" { scope = azurerm_virtual_network.vnet.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id principal_type = "ServicePrincipal" } # Create a random name for the AKS Automatic cluster resource "random_pet" "cluster_name" { prefix = var.cluster_name_prefix } # Create the private AKS Automatic cluster in the custom virtual network resource "azurerm_kubernetes_automatic_cluster" "aks_automatic" { name = random_pet.cluster_name.id location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } api_server_access { subnet_id = azurerm_subnet.api_server.id } hosted_system { node_subnet_id = azurerm_subnet.user_nodes.id system_node_subnet_id = azurerm_subnet.system_nodes.id } # The private_cluster block gives the API server a private IP address in the # virtual network. Reaching it requires private connectivity and DNS # resolution of the private FQDN, which peering, a VPN, or ExpressRoute can # provide from outside this virtual network. private_cluster { public_fully_qualified_domain_name_enabled = var.public_fully_qualified_domain_name_enabled } depends_on = [azurerm_role_assignment.network_contributor] }Erstellen Sie eine Datei mit dem Namen
variables.tfund fügen Sie folgenden Code hinzu:variable "resource_group_location" { type = string default = "westus2" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "cluster_name_prefix" { type = string default = "aks-automatic" description = "Prefix of the AKS Automatic cluster name that's combined with a random ID so the name is unique in your Azure subscription." } variable "public_fully_qualified_domain_name_enabled" { type = bool default = false description = "Whether to provision a public FQDN for the private cluster." } variable "virtual_network_name" { type = string default = "aks-automatic-vnet" description = "Name of the custom virtual network that hosts the cluster." } variable "identity_name" { type = string default = "aks-automatic-identity" description = "Name of the user-assigned managed identity that the cluster uses." } variable "virtual_network_address_space" { type = list(string) default = ["172.19.0.0/16"] description = "Address space of the custom virtual network." } variable "api_server_subnet_address_prefixes" { type = list(string) default = ["172.19.0.0/28"] description = "Address prefixes of the subnet delegated to the cluster API server." } variable "user_node_subnet_address_prefixes" { type = list(string) default = ["172.19.1.0/24"] description = "Address prefixes of the subnet that hosts the user node pools." } variable "system_node_subnet_address_prefixes" { type = list(string) default = ["172.19.0.64/26"] description = "Address prefixes of the subnet that hosts the managed system node pool." }Erstellen Sie eine Datei mit dem Namen
outputs.tf, und fügen Sie den folgenden Code ein:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "cluster_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.name } output "cluster_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.id } output "node_resource_group_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.node_resource_group_id } output "virtual_network_name" { value = azurerm_virtual_network.vnet.name } output "private_fully_qualified_domain_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.private_fully_qualified_domain_name }
Terraform initialisieren
Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren. Mit diesem Befehl werden die Azure Anbieter heruntergeladen, die zum Verwalten Ihrer Azure Ressourcen erforderlich sind.
terraform init -upgrade
Terraform-Ausführungsplan erstellen
Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.
terraform plan -out main.tfplan
Wenden Sie einen Terraform-Ausführungsplan an
Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.
terraform apply main.tfplan
Das Erstellen eines automatischen AKS-Clusters dauert mehrere Minuten, bis der Vorgang abgeschlossen ist.
Überprüfen des Clusters
Rufen Sie den Azure Ressourcengruppennamen und den Clusternamen ab.
resource_group_name=$(terraform output -raw resource_group_name) cluster_name=$(terraform output -raw cluster_name)Führen Sie az aks show aus, um den Cluster anzuzeigen und zu bestätigen, dass er privat ist und die SKU
Automaticverwendet.az aks show --resource-group $resource_group_name --name $cluster_name --query "{name:name, sku:sku, provisioningState:provisioningState, privateCluster:apiServerAccessProfile.enablePrivateCluster}"
Herstellen einer Verbindung mit dem Cluster
Der private Cluster-API-Server verfügt über keine öffentliche IP-Adresse, sodass Sie sie von einem Computer verwalten, der Netzwerkzugriff auf das virtuelle Netzwerk des Clusters hat. Sie haben mehrere Optionen zum Einrichten dieser Konnektivität:
- Erstellen Sie einen virtuellen Computer im selben virtuellen Netzwerk wie der Cluster.
- Verwenden Sie einen virtuellen Computer in einem separaten virtuellen Netzwerk, und richten Sie peering für virtuelle Netzwerke ein.
- Verwenden Sie eine Azure ExpressRoute- oder VPN-Verbindung.
Weitere Informationen finden Sie unter "Optionen zum Herstellen einer Verbindung mit dem privaten Cluster".
Konfigurieren Sie kubectl auf einem Computer mit Verbindung zum virtuellen Netzwerk für die Verbindung mit Ihrem Kubernetes-Cluster mithilfe des Befehls az aks get-credentials. AKS Automatic-Cluster sind mit Microsoft Entra ID für Kubernetes rollenbasierte Zugriffskontrolle (RBAC) konfiguriert.
az aks get-credentials --resource-group $resource_group_name --name $cluster_name
Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls "kubectl get ".
kubectl get nodes
Stellen Sie die Anwendung bereit
Zum Bereitstellen der Anwendung verwenden Sie eine Manifestdatei, um alle Objekte zu erstellen, die zum Ausführen der AKS Store-Anwendung erforderlich sind. Eine Kubernetes-Manifestdatei definiert den gewünschten Zustand (Desired State) eines Clusters – also beispielsweise, welche Containerimages ausgeführt werden sollen. Das Manifest umfasst die folgenden Kubernetes-Bereitstellungen und -Dienste:
- Store Front: Webanwendung für Kund*innen zum Anzeigen von Produkten und Aufgeben von Bestellungen
- Produktservice: Zeigt Produktinformationen an.
- Bestellservice: Bestellungen aufgeben.
- Rabbit MQ: Nachrichtenwarteschlange für eine Auftragswarteschlange.
Hinweis
Zustandsbehaftete Container wie Rabbit MQ sollten nicht ohne persistenten Speicher in einer Produktionsumgebung ausgeführt werden. Diese Container werden hier zur Einfachheit verwendet, es wird jedoch empfohlen, verwaltete Dienste wie Azure Cosmos DB oder Azure Service Bus zu verwenden.
Erstellen Sie einen Namespace
aks-store-demo, in dem die Kubernetes-Ressourcen bereitgestellt werden.kubectl create ns aks-store-demoStellen Sie die Anwendung mit dem Befehl kubectl apply im Namespace
aks-store-demobereit. Die YAML-Datei, die die Bereitstellung definiert, befindet sich auf GitHub.kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yamlDie folgende Beispielausgabe zeigt die Bereitstellungen und Dienste:
statefulset.apps/rabbitmq created configmap/rabbitmq-enabled-plugins created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created ingress/store-front created
Testen der Anwendung
Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Dienst das Anwendungs-Front-End im Internet verfügbar. Dieser Vorgang kann einige Minuten dauern.
Sehen Sie sich den Status der bereitgestellten Pods mithilfe des Befehls kubectl get pods an. Stellen Sie sicher, dass alle Pods den Status
Runninghaben, bevor Sie fortfahren. Wenn dies der erste Workload ist, den Sie bereitstellen, kann es einige Minuten dauern, bis node auto provisioning einen Knoten-Pool erstellt hat, um die Pods auszuführen.kubectl get pods -n aks-store-demoSuchen Sie nach einer öffentlichen IP-Adresse für die Storefront-Anwendung. Verwenden Sie zum Überwachen des Fortschritts den Befehl kubectl get service mit dem Argument
--watch:kubectl get ingress store-front -n aks-store-demo --watchDie Ausgabe von ADDRESS für den
store-front-Dienst ist anfangs leer:NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 80 12mSobald ADDRESS von einem leeren in eine tatsächliche öffentliche IP-Adresse geändert wird, verwenden Sie
CTRL-C, um denkubectl-Beobachtungsprozess zu beenden.Die folgende Beispielausgabe zeigt eine gültige öffentliche IP-Adresse, die dem Dienst zugewiesen ist:
NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 4.255.22.196 80 12mÖffnen Sie einen Webbrowser mit der externen IP-Adresse Ihres Eingangs, um die Azure Store-App in Aktion zu sehen.
Löschen des Clusters
Wenn Sie nicht planen, das Lernprogramm AKS zu durchlaufen, bereinigen Sie unnötige Ressourcen, um Azure Gebühren zu vermeiden. Führen Sie den Befehl az group delete aus, um die Ressourcengruppe, den Containerdienst und alle dazugehörigen Ressourcen zu entfernen.
az group delete --name <resource-group> --yes --no-wait
Hinweis
Der AKS-Cluster wurde mit einer vom Benutzer zugewiesenen verwalteten Identität erstellt. Wenn Sie diese Identität nicht mehr benötigen, können Sie sie manuell entfernen.
Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie terraform Plan aus und geben Sie die destroy Flagge an.
terraform plan -destroy -out main.destroy.tfplan
Führen Sie den Befehl terraform apply aus, um den Ausführungsplan anzuwenden.
terraform apply main.destroy.tfplan
Nächste Schritte
In dieser Schnellstartanleitung haben Sie einen privaten Kubernetes-Cluster mit AKS Automatic in einem benutzerdefinierten virtuellen Netzwerk bereitgestellt und anschließend eine einfache Multicontaineranwendung dafür bereitgestellt. Diese Beispielanwendung dient nur zu Demozwecken und stellt nicht alle bewährten Methoden für Kubernetes-Anwendungen dar. Anleitungen zum Erstellen vollständiger Lösungen mit AKS für die Produktion finden Sie unter AKS-Lösungsleitfaden.
Da dieser Cluster privat ist, hat sein API-Server keine öffentliche IP-Adresse. Informationen zum Herstellen einer Verbindung mit dem Cluster und zum Verwalten des Clusters finden Sie unter "Optionen für die Verbindung mit dem privaten Cluster". Weitere Konfigurationsoptionen für private Cluster finden Sie in der Dokumentation zu privaten Clustern .
Weitere Informationen zu AKS Automatic finden Sie in der Einführung.