Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med API Server VNet-integrering kan du placera kontrollplanets IP-adress i ditt eget virtuella nätverk. Mönstret som beskrivs här utökar funktionen till fler virtuella nätverk genom att länka Private Link. Det är användbart för hub-and-spoke-topologier, dedikerade byggnätverk eller virtuella jump-host-nätverk som måste administrera produktionskluster utan att öppna API-servern till det offentliga Internet.
Den här artikeln gäller endast för kluster som skapas med API Server VNet-integrering och visar hur du:
- Distribuera ett privat AKS-kluster med API Server VNet-integrering.
- Exponera API-servern via en Private Link Service (PLS) i klustrets virtuella nätverk.
- Skapa en privat slutpunkt (PE) i ett annat virtuellt nätverk.
- Konfigurera privat DNS så att Kubernetes-verktyg löser klustrets privata fullständiga domännamn i fjärrnätverket.
Information om privata kluster som inte använder API Server VNet-integrering finns i Skapa ett privat AKS-kluster.
Tillgänglighet i regionen
API Server VNet-integrering är för närvarande tillgänglig i en delmängd av Azure-regioner och omfattas av regionala kapacitetsgränser. Innan du börjar kontrollerar du att målregionen stöds. Mer information finns i API Server VNet-integrering.
Förutsättningar
| Krav | Minimi |
|---|---|
| Azure CLI (kommandoradsgränssnittet för Azure) | 2.73.0 |
| Behörigheter | Deltagare + nätverksdeltagare i båda prenumerationerna |
Om du använder anpassade DNS-servrar lägger du till Azures virtuella IP 168.63.129.16 som en överordnad vidarebefordrare.
Ange miljövariabler
Ange följande miljövariabler för användning i hela den här artikeln. Känn dig fri att ersätta platshållarvärdena med dina egna.
LOCATION="westus3"
# Resource groups
AKS_RG="aks-demo-rg"
REMOTE_RG="client-demo-rg"
# AKS cluster
AKS_CLUSTER="aks-private"
AKS_SUBNET="aks-subnet"
# Private Link Service
PLS_NAME="apiserver-pls"
PLS_SUBNET="pls-subnet"
PLS_PREFIX="10.225.0.0/24"
# Remote VNet
REMOTE_VNET="client-vnet"
REMOTE_SUBNET="client-subnet"
REMOTE_VNET_PREFIX="192.168.0.0/16"
REMOTE_SUBNET_PREFIX="192.168.1.0/24"
PE_NAME="aks-pe"
PE_CONN_NAME="aks-pe-conn"
# DNS
DNS_ZONE="private.${LOCATION}.azmk8s.io"
DNS_LINK="dns-link"
Skapa resursgrupper
# Create resource groups for the AKS cluster
az group create --name $AKS_RG --location $LOCATION
# Create a resource group for the remote VNet
az group create --name $REMOTE_RG --location $LOCATION
Distribuera ett privat kluster med API Server VNet-integrering
Viktigt!
API Server VNet-integrering kräver ett eget undernät. Om du inte anger något skapar AKS det automatiskt i nodresursgruppen.
az aks create \
--name $AKS_CLUSTER \
--resource-group $AKS_RG \
--location $LOCATION \
--enable-private-cluster \
--enable-apiserver-vnet-integration
När klustret har slutfört etableringen samlar du in den autogenererade nodresursgruppen, klustrets VNet-namn och den privata FQDN-etiketten:
AKS_NODE_RG=$(az aks show -g $AKS_RG -n $AKS_CLUSTER --query nodeResourceGroup -o tsv)
AKS_VNET=$(az network vnet list --resource-group $AKS_NODE_RG --query '[0].name' -o tsv)
DNS_RECORD=$(az aks show -g $AKS_RG -n $AKS_CLUSTER --query privateFqdn -o tsv | cut -d'.' -f1,2)
FRONTEND_IP_CONFIG_ID=$(az network lb show \
--name kube-apiserver \
--resource-group $AKS_NODE_RG \
--query "frontendIPConfigurations[0].id" \
-o tsv)
Skapa en Private Link-tjänst (PLS) i aks-klustrets virtuella nätverk
Lägg till ett dedikerat undernät för PLS och inaktivera nätverksprinciper som inte stöds i Private Link-undernät.
Skapa PLS och peka den till den interna kube-apiserver-lastbalanseraren som AKS skapade för kontrollplanet.
# Subnet for the PLS
az network vnet subnet create \
--name $PLS_SUBNET \
--vnet-name $AKS_VNET \
--resource-group $AKS_NODE_RG \
--address-prefixes $PLS_PREFIX \
--disable-private-link-service-network-policies
# PLS pointing to the API‑server ILB
az network private-link-service create \
--name $PLS_NAME \
--resource-group $AKS_NODE_RG \
--vnet-name $AKS_VNET \
--subnet $PLS_SUBNET \
--lb-frontend-ip-configs $FRONTEND_IP_CONFIG_ID \
--location $LOCATION
Skapa en PrivateEndpoint (PE) i det fjärranslutna virtuella nätverket
# Remote VNet and subnet
az network vnet create \
--name $REMOTE_VNET \
--resource-group $REMOTE_RG \
--location $LOCATION \
--address-prefixes $REMOTE_VNET_PREFIX
az network vnet subnet create \
--name $REMOTE_SUBNET \
--vnet-name $REMOTE_VNET \
--resource-group $REMOTE_RG \
--address-prefixes $REMOTE_SUBNET_PREFIX
# Private Endpoint
PLS_ID=$(az network private-link-service show \
--name $PLS_NAME \
--resource-group $AKS_NODE_RG \
--query id -o tsv)
az network private-endpoint create \
--name $PE_NAME \
--resource-group $REMOTE_RG \
--vnet-name $REMOTE_VNET \
--subnet $REMOTE_SUBNET \
--private-connection-resource-id $PLS_ID \
--connection-name $PE_CONN_NAME \
--location $LOCATION
När den privata slutpunkten har slutfört etableringen noterar du dess nätverksgränssnitts-ID (NIC) så att du kan hämta den allokerade privata IP-adressen.
PE_NIC_ID=$(az network private-endpoint show \
--name $PE_NAME \
--resource-group $REMOTE_RG \
--query 'networkInterfaces[0].id' \
--output tsv)
# Capture the IP from the NIC
PE_IP=$(az network nic show \
--ids $PE_NIC_ID \
--query 'ipConfigurations[0].privateIPAddress' \
--output tsv)
Konfigurera privat DNS
# Create or reuse the regional DNS zone
az network private-dns zone create \
--name $DNS_ZONE \
--resource-group $REMOTE_RG
az network private-dns record-set a create \
--name $DNS_RECORD \
--zone-name $DNS_ZONE \
--resource-group $REMOTE_RG
az network private-dns record-set a add-record \
--record-set-name $DNS_RECORD \
--zone-name $DNS_ZONE \
--resource-group $REMOTE_RG \
--ipv4-address $PE_IP
# Link zone to the remote VNet
REMOTE_VNET_ID=$(az network vnet show \
--name $REMOTE_VNET \
--resource-group $REMOTE_RG \
--query id -o tsv)
az network private-dns link vnet create \
--name $DNS_LINK \
--zone-name $DNS_ZONE \
--resource-group $REMOTE_RG \
--virtual-network $REMOTE_VNET_ID \
--registration-enabled false
Testa anslutningen
Om du försöker testa anslutningen lokalt kan det uppstå ett fel eftersom DNS-zonen inte är länkad till det lokala nätverket.
az aks get-credentials --resource-group $AKS_RG --name $AKS_CLUSTER
kubectl get nodes
Distribuera en virtuell testdator i det fjärranslutna virtuella nätverket
Om du vill bekräfta sökvägen för den privata slutpunkten distribuerar du en virtuell testdator i det fjärranslutna virtuella nätverket och använder den för att ansluta till AKS-klustret.
# Create Network Security Group that allows inbound SSH (TCP 22)
az network nsg create \
--name "${REMOTE_VNET}-nsg" \
--resource-group $REMOTE_RG \
--location $LOCATION
az network nsg rule create \
--nsg-name "${REMOTE_VNET}-nsg" \
--resource-group $REMOTE_RG \
--name allow-ssh \
--priority 100 \
--access Allow \
--protocol Tcp \
--direction Inbound \
--source-address-prefixes '*' \
--destination-port-ranges 22
# Associate the NSG with the remote subnet
az network vnet subnet update \
--name $REMOTE_SUBNET \
--vnet-name $REMOTE_VNET \
--resource-group $REMOTE_RG \
--network-security-group "${REMOTE_VNET}-nsg"
# Create a small Ubuntu VM in that subnet (with a public IP for quick SSH)
az vm create \
--resource-group $REMOTE_RG \
--name test-vm \
--image Ubuntu2204 \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--vnet-name $REMOTE_VNET \
--subnet $REMOTE_SUBNET \
--public-ip-sku Standard
# Capture the public IP address
VM_PUBLIC_IP=$(az vm show -d -g $REMOTE_RG -n test-vm --query publicIps -o tsv)
Anslut till den virtuella datorn och testa anslutningen
ssh -i ~/.ssh/id_rsa azureuser@$VM_PUBLIC_IP
# Inside the VM
# Install Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Install kubectl
sudo az aks install-cli
# re-export the aks variables
export AKS_RG="aks-demo-rg"
export AKS_CLUSTER="aks-private"
# login to Azure. Follow the instructions to authenticate
az login
# Get the AKS credentials
az aks get-credentials --resource-group $AKS_RG --name $AKS_CLUSTER
# Test the connection
kubectl get nodes
# You should see the AKS nodes
# Exit the VM
exit
Rensa resurser
Om du vill undvika löpande Azure-avgifter tar du bort resursgrupperna med hjälp av az group delete kommandot .
az group delete --name $AKS_RG --yes --no-wait
az group delete --name $REMOTE_RG --yes --no-wait
Nästa steg
Azure Kubernetes Service