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 konfigurerarkubectl
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.
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 inaktiverasrun
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 formatetprivatelink.<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:
- Skapa en virtuell dator i samma virtuella nätverk som AKS-klustret med hjälp av kommandot
az vm create
med flaggan--vnet-name
. - 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.
- Konfigurera en Azure ExpressRoute eller VPN- för att ansluta till klustrets virtuella nätverk.
- Skapa en privat Azure-slutpunkt anslutning i ett annat virtuellt nätverk.
- 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 invoke
må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
, grep
och 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:
- Paolo Salvatori | Huvudtjänsttekniker
- Martin Gjoshevski | Senior Service Engineer
- Laura Nicolas | Senior Cloud Solution Architect
Övriga medarbetare:
- Chad Kittel | Huvudprogramtekniker
- Ed Price | Senior Content Program Manager
- Theano Petersen | Teknisk författare
Om du vill se icke-offentliga LinkedIn-profiler loggar du in på LinkedIn.
Nästa steg
- AKS för Amazon EKS-proffs
- Kubernetes-identitets- och åtkomsthantering
- Övervakning och loggning av Kubernetes
- Lagringsalternativ för ett Kubernetes-kluster
- Kostnadshantering för Kubernetes
- Hantering av Kubernetes-noder och nodpooler
- Klusterstyrning
Relaterade resurser
Följande referenser innehåller länkar till dokumentations- och automatiseringsexempel för att distribuera AKS-kluster med ett skyddat API:
- Skapa ett privat AKS-kluster med en offentlig DNS-zon
- Skapa ett privat Azure Kubernetes Service-kluster med Terraform och Azure DevOps
- Skapa ett offentligt eller privat Azure Kubernetes Service-kluster med Azure NAT Gateway och Azure Application Gateway
- Använda privata slutpunkter med ett privat AKS-kluster
- Introduktion till Azure Private Link
- Introduktion till säker nätverksinfrastruktur med Azure-nätverkssäkerhet