Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Integracja z siecią wirtualną serwera API umożliwia umieszczenie adresu IP płaszczyzny sterowania wewnątrz własnej sieci wirtualnej. Wzorzec opisany tutaj rozszerza tę możliwość na więcej sieci wirtualnych poprzez łączenie usługi Private Link. Jest to przydatne w przypadku topologii piasty i szprych, dedykowanych sieci kompilacji lub sieci wirtualnych typu jump-host, które muszą administrować klastrami produkcyjnymi bez otwierania serwera interfejsu API do publicznego Internetu.
Ten artykuł dotyczy tylko klastrów utworzonych za pomocą integracji z siecią wirtualną serwera API Server i pokazano, jak wykonać następujące działania:
- Wdróż prywatny klaster AKS z integracją z siecią VNet serwera API.
- Uwidaczniaj serwer interfejsu API za pośrednictwem usługi Private Link (PLS) w sieci wirtualnej klastra.
- Utwórz prywatny punkt końcowy (PE) w innej sieci wirtualnej.
- Skonfiguruj prywatną usługę DNS , aby narzędzia Kubernetes rozpoznawały prywatną nazwę FQDN klastra w sieci zdalnej.
W przypadku klastrów prywatnych, które nie korzystają z integracji z siecią wirtualną serwera API, zobacz Tworzenie prywatnego klastra usługi AKS.
Dostępność regionu
Integracja z VNet API Server jest obecnie dostępna w podzbiórze regionów Azure i podlega ograniczeniom pojemności regionalnej. Przed rozpoczęciem upewnij się, że region docelowy jest obsługiwany. Aby uzyskać więcej informacji, zobacz Api Server VNet Integration (Integracja z siecią wirtualną serwera api).
Wymagania wstępne
| Wymaganie | Minimalna wartość |
|---|---|
| Interfejs wiersza polecenia platformy Azure | 2.73.0 |
| Uprawnienia | Współautor i współautor sieci w obu subskrypcjach |
Jeśli używasz niestandardowych serwerów DNS, dodaj wirtualny adres IP platformy Azure 168.63.129.16 jako usługę przesyłania dalej nadrzędnego.
Ustawianie zmiennych środowiskowych
Ustaw następujące zmienne środowiskowe do użycia w tym artykule. Możesz swobodnie zastąpić wartości symboli zastępczych własnymi.
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"
Tworzenie grup zasobów
# 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
Wdrażanie klastra prywatnego z integracją serwera API z siecią wirtualną VNet
Ważne
Integracja z siecią wirtualną serwera API wymaga własnej podsieci. Jeśli nie podasz go, usługa AKS automatycznie utworzy go w grupie zasobów węzła.
az aks create \
--name $AKS_CLUSTER \
--resource-group $AKS_RG \
--location $LOCATION \
--enable-private-cluster \
--enable-apiserver-vnet-integration
Po zakończeniu aprowizacji klastra zanotuj automatycznie wygenerowaną grupę zasobów węzła, nazwę sieci wirtualnej klastra i etykietę prywatnej nazwy FQDN.
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)
Utwórz usługę Private Link (PLS) w sieci wirtualnej klastra AKS
Dodaj dedykowaną podsieć dla usługi PLS i wyłącz zasady sieciowe, które nie są obsługiwane w podsieciach usługi Private Link.
Utwórz usługę PLS i wskaż ją na wewnętrzny moduł równoważenia obciążenia kube-apiserver utworzony przez usługę AKS dla warstwy sterującej.
# 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
Tworzenie prywatnego punktu końcowego (PE) w zdalnej sieci wirtualnej
# 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
Po zakończeniu aprowizacji prywatnego punktu końcowego zanotuj identyfikator interfejsu sieciowego, aby można było pobrać przydzielony prywatny adres IP.
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)
Konfigurowanie prywatnego systemu 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
Testowanie połączenia
Jeśli spróbujesz przetestować połączenie lokalnie, może wystąpić błąd, ponieważ strefa DNS nie jest połączona z siecią lokalną.
az aks get-credentials --resource-group $AKS_RG --name $AKS_CLUSTER
kubectl get nodes
Wdrażanie testowej maszyny wirtualnej w zdalnej sieci wirtualnej
Aby potwierdzić ścieżkę prywatnego punktu końcowego, wdróż testową maszynę wirtualną w zdalnej sieci wirtualnej i użyj jej do nawiązania połączenia z klastrem usługi AKS.
# 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)
Nawiązywanie połączenia z maszyną wirtualną i testowanie połączenia
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
Uprzątnij zasoby
Aby uniknąć bieżących opłat za platformę Azure, usuń grupy zasobów przy użyciu az group delete polecenia .
az group delete --name $AKS_RG --yes --no-wait
az group delete --name $REMOTE_RG --yes --no-wait