Redigera

Dela via


Säker nätverksåtkomst till Kubernetes

Azure Bastion
Azure DNS
Azure Kubernetes Service (AKS)
Azure Private Link
Azure Virtual Network

I den här artikeln jämförs nätverkslägen för Azure Kubernetes Service (AKS) och Amazon Elastic Kubernetes Service (Amazon EKS). Artikeln beskriver hur du förbättrar anslutningssäkerheten till den hanterade API-servern i ett AKS-kluster och de olika alternativen för att begränsa åtkomsten till det offentliga nätverket.

Kommentar

Den här artikeln är en del av en serie artiklar som hjälper proffs som är bekanta med Amazon EKS att förstå Azure Kubernetes Service (AKS).

Amazon EKS-nätverkslägen

Med Amazon Virtual Private Cloud (Amazon VPC) kan du starta AWS-resurser (Amazon Web Services) till ett virtuellt nätverk som består av offentliga och privata undernät eller intervall med IP-adresser i VPC. Ett offentligt undernät är värd för resurser som måste vara anslutna till Internet och ett privat undernät är värd för resurser som inte är anslutna till det offentliga Internet. Amazon EKS kan etablera hanterade nodgrupper i både offentliga och privata undernät.

Med åtkomstkontroll för slutpunkter kan du konfigurera om API Server-slutpunkten kan nås från det offentliga Internet eller via VPC. EKS tillhandahåller flera sätt att styra åtkomsten till klusterslutpunkten. Du kan aktivera den offentliga standardslutpunkten, en privat slutpunkt eller båda slutpunkterna samtidigt. När du aktiverar den offentliga slutpunkten kan du lägga till CIDR-begränsningar (Classless Inter-Domain Routing) för att begränsa klientens IP-adresser som kan ansluta till den offentliga slutpunkten.

Hur Amazon EKS-noder ansluter till det hanterade Kubernetes-kontrollplanet bestäms av vilken slutpunktsinställning som har konfigurerats för klustret. Du kan ändra slutpunktsinställningarna när som helst via Amazon EKS-konsolen eller API:et. Mer information finns i Åtkomstkontroll för Amazon EKS-klusterslutpunkt.

Endast offentlig slutpunkt

Att exponera kontrollplanet via en offentlig slutpunkt är standardläget för nya Amazon EKS-kluster. När endast den offentliga slutpunkten för klustret är aktiverad lämnar Kubernetes API-begäranden som kommer från Amazon VPC, till exempel arbetsnoden för att styra flygplanskommunikationen, VPC:n men lämnar inte Amazons nätverk. För att noder ska kunna ansluta till kontrollplanet måste de använda en offentlig IP-adress och en väg till en internetgateway, eller en väg till en NAT-gateway (Network Address Translation) där de kan använda NAT-gatewayens offentliga IP-adress.

Offentliga och privata slutpunkter

När både de offentliga och privata slutpunkterna är aktiverade kommunicerar Kubernetes API-begäranden inifrån VPC till kontrollplanet via Amazon EKS-hanterade Elastic Network Interfaces (ENIs) i VPC.When both the public and private endpoints are enabled, Kubernetes API requests from the VPC communicate to the control plane via the Amazon EKS-managed Elastic Network Interfaces (ENIs) in the VPC. Kluster-API-servern är tillgänglig från Internet.

Endast privat slutpunkt

När endast den privata slutpunkten är aktiverad måste all trafik till klustrets API-server, till exempel kubectl eller helm kommandon, komma inifrån klustrets VPC eller ett anslutet nätverk. Offentlig åtkomst till API-servern från Internet är inaktiverad. Du kan implementera det här åtkomstläget med hjälp av AWS Virtual Private Network (AWS VPN) eller AWS DirectConnect till VPC. Om du vill begränsa åtkomsten till slutpunkten utan AWS VPN eller DirectConnect kan du lägga till CIDR-begränsningar till den offentliga slutpunkten för att begränsa anslutningar utan att konfigurera fler nätverk.

Om du har inaktiverat offentlig åtkomst för klustrets Kubernetes API-serverslutpunkt kan du komma åt Kubernetes API-serverslutpunkten på något av följande sätt:

  • Anslutet nätverk: Anslut nätverket till VPC med en AWS-överföringsgateway eller andra anslutningsalternativ och använd sedan en dator i det anslutna nätverket. Du måste se till att amazon EKS-kontrollplanets säkerhetsgrupp innehåller regler för att tillåta inkommande trafik på port 443 från ditt anslutna nätverk.
  • Amazon EC2 Bastion-värd: Du kan starta en Amazon EC2-instans i ett offentligt undernät i klustrets VPC och sedan logga in via SSH i den instansen för att köra kubectl kommandon. Mer information finns i Linux Bastion-värdar på AWS. Du måste se till att amazon EKS-kontrollplanets säkerhetsgrupp innehåller regler för att tillåta inkommande trafik på port 443 från bastionsvärden. Mer information finns i Visa krav för Amazon EKS-säkerhetsgrupper för kluster. När du konfigurerar kubectl för bastionsvärden ska du använda AWS-autentiseringsuppgifter som redan är mappade till ditt klusters RBAC-konfiguration eller lägga till IAM-huvudnamn som bastionen använder i RBAC-konfigurationen innan du tar bort offentlig åtkomst för slutpunkten. Mer information finns i Bevilja IAM-användare och roller åtkomst till Kubernetes-API:er och Obehörig eller åtkomst nekad (kubectl).
  • AWS Cloud9 IDE: AWS Cloud9 är en molnbaserad integrerad utvecklingsmiljö (IDE) som gör att du kan skriva, köra och felsöka koden med bara en webbläsare. Du kan skapa en AWS Cloud9 IDE i klustrets VPC och använda IDE för att kommunicera med klustret. Mer information finns i Skapa en miljö i AWS Cloud9. Du måste se till att amazon EKS-kontrollplanets säkerhetsgrupp innehåller regler för att tillåta inkommande trafik på port 443 från din IDE-säkerhetsgrupp. Mer information finns i Visa krav för Amazon EKS-säkerhetsgrupper för kluster. När du konfigurerar kubectl för AWS Cloud9 IDE ska du använda AWS-autentiseringsuppgifter som redan har mappats till ditt klusters RBAC-konfiguration eller lägga till det IAM-huvudnamn som din IDE ska använda i RBAC-konfigurationen innan du tar bort offentlig åtkomst för slutpunkten. Mer information finns i Bevilja IAM-användare och roller åtkomst till Kubernetes-API:er och Obehörig eller åtkomst nekad (kubectl).

Mer information om anslutningsalternativ finns i Accessing a Private Only API Server (Åtkomst till en API-server med endast privat).

AKS-nätverksåtkomst till API-servern

Det finns två alternativ för att skydda nätverksåtkomsten till Kubernetes API i AKS, ett privat AKS-kluster eller auktoriserade IP-intervall.

Privat AKS-kluster

Ett privat AKS-kluster ser till att nätverkstrafiken mellan API-servern och agentnoderna förblir inom det virtuella nätverket. I ett privat AKS-kluster har kontrollplanet eller API-servern interna IP-adresser som definieras i dokumentet RFC1918 – Adressallokering för privat Internet. Genom att använda ett privat kluster kan du se till att nätverkstrafik mellan DIN API-server och dina nodpooler endast finns kvar i det privata nätverket.

I ett privat AKS-kluster har API-servern en intern IP-adress som endast är tillgänglig via en privat Azure-slutpunkt som finns i samma virtuella nätverk. Alla virtuella datorer (VM) i samma virtuella nätverk kan kommunicera privat med kontrollplanet via den här privata slutpunkten. Kontrollplanet eller API-servern finns i den Azure-hanterade prenumerationen, medan AKS-klustret och dess nodpooler finns i kundens prenumeration.

När du etablerar ett privat AKS-kluster skapar AKS som standard ett privat FQDN med en privat DNS-zon och ytterligare ett offentligt FQDN med motsvarande A post i Azures offentliga DNS. Agentnoderna fortsätter att använda posten A i den privata DNS-zonen för att matcha den privata IP-adressen för den privata slutpunkten för kommunikation till API-servern.

Följande diagram illustrerar en privat AKS-klusterkonfiguration.

Diagram som visar ett privat AKS-kluster.

Ladda ned en Visio-fil med den här arkitekturen.

För att etablera ett privat AKS-kluster skapar AKS-resursprovidern ett privat fullständigt domännamn (FQDN) för nodresursgruppen i en privat DNS-zon. Om du vill kan AKS också skapa ett offentligt FQDN med en motsvarande adresspost (A) i Azures offentliga DNS-zon. Agentnoderna använder A posten i den privata DNS-zonen för att matcha IP-adressen för den privata slutpunkten för kommunikation till API-servern.

AKS-resursprovidern kan skapa den privata DNS-zonen i nodresursgruppen, eller så kan du skapa den privata DNS-zonen och skicka dess resurs-ID till etableringssystemet. Du kan skapa ett privat kluster när du använder Terraform med Azure, Bicep, ARM-mallar, Azure CLI, Azure PowerShell-modulen eller Azure REST API för att skapa klustret.

Du kan aktivera ett offentligt FQDN för API-servern under etableringen eller genom att använda kommandot az aks update med parametern --enable-public-fqdn på befintliga kluster. Om du aktiverar det offentliga fullständiga domännamnet måste alla virtuella datorer som har åtkomst till servern, till exempel en lokalt installerad Azure DevOps-agent eller en självhanterad GitHub Actions-löpare, finnas i samma virtuella nätverk som är värd för klustret eller i ett nätverk som är anslutet via virtuell nätverkspeering eller plats-till-plats-VPN.

För ett privat AKS-kluster inaktiverar du det offentliga fullständiga domännamnet för API-servern. För att kunna kommunicera med det privata kontrollplanet måste en virtuell dator finnas i samma virtuella nätverk eller i ett peer-kopplat virtuellt nätverk med en virtuell nätverkslänk till den privata DNS-zonen. Posten A i den privata DNS-zonen löser det fullständiga domännamnet för API-servern till den privata slutpunkts-IP-adressen som kommunicerar med det underliggande kontrollplanet. Mer information finns i Skapa ett privat Azure Kubernetes Service-kluster.

Distributionsalternativ för privata kluster

AKS-resursprovidern exponerar följande parametrar för att anpassa distributionen av privata AKS-kluster:

  • authorizedIpRanges (sträng) anger tillåtna IP-intervall i CIDR-format.
  • disableRunCommand (Booleskt) anger om kommandot för klustret ska inaktiveras run eller inte.
  • enablePrivateCluster (Booleskt) anger om klustret ska skapas som privat eller inte.
  • enablePrivateClusterPublicFQDN (Booleskt) anger om du vill skapa ett annat offentligt FQDN för det privata klustret eller inte.
  • privateDnsZone (sträng) anger en privat DNS-zon i nodresursgruppen. Om du inte anger något värde skapar resursprovidern zonen. Du kan ange följande värden:
    • System är standardvärdet.
    • None standardvärdet är offentlig DNS, så AKS skapar inte en privat DNS-zon.
    • <Your own private DNS zone resource ID> använder en privat DNS-zon som du skapar i formatet privatelink.<region>.azmk8s.io eller <subzone>.privatelink.<region>.azmk8s.io.

I följande tabell visas DNS-konfigurationsalternativen för distribution av ett privat AKS-kluster:

Privat DNS zonalternativ enablePrivateClusterPublicFQDN: true enablePrivateClusterPublicFQDN: false
System Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller något virtuellt nätverk som är anslutet till den privata DNS-zonen använder den privata DNS-zonposten A för att matcha den privata IP-adressen för den privata slutpunkten.

Alla andra virtuella datorer använder det offentliga fullständiga domännamnet för API-servern.
Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller något virtuellt nätverk som är anslutet till den privata DNS-zonen använder den privata DNS-zonposten A för att matcha den privata IP-adressen för den privata slutpunkten.

Det finns inget offentligt API-server-FQDN tillgängligt.
None Alla virtuella datorer, inklusive agentnoder, använder det offentliga fullständiga domännamnet för API-servern som är tillgängligt via en A post i en Azure-hanterad offentlig DNS-zon. Fel konfiguration. Det privata AKS-klustret behöver minst en offentlig eller en privat DNS-zon för api-serverns namnmatchning.
Ditt eget resurs-ID för din privata DNS-zon Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller något virtuellt nätverk som är anslutet till den privata DNS-zonen använder den privata DNS-zonposten A för att matcha den privata IP-adressen för den privata slutpunkten.

Andra virtuella datorer använder det offentliga fullständiga domännamnet för API-servern.
Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller något virtuellt nätverk som är anslutet till den privata DNS-zonen använder den privata DNS-zonposten A för att matcha den privata IP-adressen för den privata slutpunkten.

Det finns inget offentligt API-server-FQDN tillgängligt.

Anslutning och hantering av privata kluster

I ett privat AKS-kluster har API-serverslutpunkten ingen offentlig IP-adress. Det finns flera alternativ för att upprätta nätverksanslutning till det privata klustret:

  1. Skapa en virtuell dator i samma virtuella nätverk som AKS-klustret med hjälp av kommandot az vm create med flaggan --vnet-name.
  2. Använd en virtuell dator i ett separat virtuellt nätverk och konfigurera peering för virtuella nätverk med det virtuella AKS-klustrets virtuella nätverk.
  3. Konfigurera en Azure ExpressRoute eller VPN- för att ansluta till klustrets virtuella nätverk.
  4. Skapa en privat Azure-slutpunkt anslutning i ett annat virtuellt nätverk.
  5. Använd en Cloud Shell--instans som distribuerats till ett undernät som är anslutet till API-servern för klustret.

Med hjälp av Azure CLI kan du använda kommandot az aks invoke för att komma åt privata kluster utan att behöva konfigurera en VPN- eller Express Route. Med det här kommandot kan du fjärranropa kommandon, till exempel kubectl och helm, i ditt privata kluster via Azure-API:et, utan att behöva ansluta direkt till klustret. Om du vill använda command invokemåste du ha de behörigheter som krävs för åtgärderna Microsoft.ContainerService/managedClusters/runcommand/action och Microsoft.ContainerService/managedclusters/commandResults/read.

I Azure-portalen kan du använda funktionen Run command för att köra kommandon i ditt privata kluster. Den här funktionen använder faktiskt command invoke funktioner för att köra kommandon i klustret. Podden som skapats av funktionen Run command innehåller kubectl och helm verktyg för att hantera klustret. Dessutom har den stöd för Bash med verktyg som jq, xargs, grepoch awk tillgängliga.

Du kan använda Azure Bastion- i samma virtuella nätverk eller ett peer-kopplat virtuellt nätverk för att ansluta till en virtuell jump box-hanteringsdator. Azure Bastion är en fullständigt hanterad plattform som en tjänst (PaaS) som gör att du kan ansluta till en virtuell dator med hjälp av webbläsaren och Azure Portal. Azure Bastion tillhandahåller säker och sömlös ANSLUTNING för fjärrskrivbordsprotokoll (RDP) eller SSH(Secure Shell) via TLS (Transport Layer Security) direkt från Azure Portal. När virtuella datorer ansluter via Azure Bastion behöver de ingen offentlig IP-adress, agent eller särskild klientprogramvara.

API Server VNet-integrering

Ett AkS-kluster (Azure Kubernetes Service) som konfigurerats med API Server VNet-integrering projicerar API-serverslutpunkten direkt till ett delegerat undernät i det virtuella nätverk där AKS distribueras. Api Server VNet-integrering möjliggör nätverkskommunikation mellan API-servern och klusternoderna utan att en privat länk eller tunnel krävs. API-servern är tillgänglig bakom en intern lastbalanserares VIP i det delegerade undernätet, som noderna är konfigurerade att använda. Genom att använda API Server VNet-integrering kan du se till att nätverkstrafiken mellan DIN API-server och dina nodpooler endast finns kvar i det privata nätverket.

Kontrollplanet eller API-servern finns i en AKS-hanterad Azure-prenumeration. Klustret eller nodpoolen finns i din Azure-prenumeration. Servern och de virtuella datorer som utgör klusternoderna kan kommunicera med varandra via API-serverns VIP- och podd-IP-adresser som projiceras i det delegerade undernätet.

API Server VNet-integrering stöds för offentliga eller privata kluster. Du kan lägga till eller ta bort offentlig åtkomst efter klusteretablering. Till skillnad från icke-VNet-integrerade kluster kommunicerar agentnoderna alltid direkt med den privata IP-adressen för IP-adressen för API-serverns interna lastbalanserare (ILB) utan att använda DNS. All nod till API-servertrafik behålls i privata nätverk och ingen tunnel krävs för API-server till nodanslutning. Out-of-cluster-klienter som behöver kommunicera med API-servern kan göra det normalt om offentlig nätverksåtkomst är aktiverad. Om åtkomst till offentligt nätverk är inaktiverat bör du följa samma privata DNS-konfigurationsmetod som standard privata kluster. Mer information finns i Skapa ett Azure Kubernetes Service-kluster med API Server VNet-integrering.

Auktoriserade IP-intervall

Det andra alternativet för att förbättra klustersäkerheten och minimera attacker mot API-servern är att använda auktoriserade IP-intervall. Auktoriserade IP-adresser begränsar åtkomsten till kontrollplanet för ett offentligt AKS-kluster till en känd lista över IP-adresser och CIDR:er. När du använder det här alternativet är API-servern fortfarande offentligt exponerad, men åtkomsten är begränsad. Mer information finns i Säker åtkomst till API-servern med hjälp av auktoriserade IP-adressintervall i Azure Kubernetes Service (AKS).

Följande az aks update Azure CLI-kommando auktoriserar IP-intervall:

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --api-server-authorized-ip-ranges  73.140.245.0/24

Överväganden för AKS-anslutning

När du överväger AKS-anslutning finns det flera viktiga saker att tänka på. Här är några viktiga punkter att vara medveten om:

  • Ett privat AKS-kluster erbjuder förbättrad säkerhet och isolering jämfört med auktoriserade IP-adresser. Det går dock inte att konvertera ett befintligt offentligt AKS-kluster till ett privat kluster. I stället kan auktoriserade IP-adresser aktiveras för alla befintliga AKS-kluster.
  • Auktoriserade IP-intervall kan inte tillämpas på en privat API-serverslutpunkt. De gäller endast för den offentliga API-servern.
  • Privata kluster stöder inte Azure DevOps-värdbaserade agenter. Vi rekommenderar att du använder lokalt installerade agenter i stället.
  • För att Azure Container Registry ska fungera med ett privat AKS-kluster måste en privat länk konfigureras för containerregistret i det virtuella klustrets nätverk. Du kan också upprätta peering mellan det virtuella containerregistrets virtuella nätverk och det privata klustrets virtuella nätverk.
  • Begränsningarna för Azure Private Link-tjänsten gäller för privata kluster.
  • Om den privata slutpunkten i kundens undernät för ett privat kluster tas bort eller ändras upphör klustret att fungera.

Deltagare

Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.

Huvudsakliga författare:

Övriga medarbetare:

Om du vill se icke-offentliga LinkedIn-profiler loggar du in på LinkedIn.

Nästa steg

Följande referenser innehåller länkar till dokumentations- och automatiseringsexempel för att distribuera AKS-kluster med ett skyddat API: