Udostępnij przez


Połącz się z klastrem integracji API Server z siecią VNet przy użyciu usługi Azure Private Link

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)

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

Dalsze kroki