Säker nätverksåtkomst till Kubernetes

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

Den här artikeln jämför 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 offentliga nätverk.

Anteckning

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

Amazon EKS-nätverkslägen

Med Amazon Virtual Private Cloud (Amazon VPC) kan du starta AWS-resurser (Amazon Web Services) i ett virtuellt nätverk som består av offentliga och privata undernät eller IP-adressintervall 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 klient-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 konfigureras 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 plankommunikationen, 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 Internet-gateway, 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. 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.

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 säkerställer att nätverkstrafiken mellan API-servern och nodpoolerna finns kvar i det virtuella nätverket. I ett privat AKS-kluster har kontrollplanet eller 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 i samma virtuella nätverk kan kommunicera privat med kontrollplanet via den privata slutpunkten. Kontrollplanet eller API-servern finns i den Azure-hanterade prenumerationen, medan AKS-klustret och dess nodpooler finns i kundens prenumeration.

Följande diagram illustrerar en konfiguration av ett privat kluster.

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 kvalificerat domännamn (FQDN) för nodresursgruppen i en privat DNS-zon. Om du vill kan AKS också skapa ett offentligt fullständigt domännamn med en motsvarande adresspost (A) i den offentliga DNS-zonen i Azure. 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 GitHub Actions lokalt installerad löpare, finnas i samma virtuella nätverk som är värd för klustret, eller i ett nätverk som är anslutet via peering för virtuella nätverk eller plats-till-plats-VPN.

För ett privat AKS-kluster inaktiverar du det offentliga FQDN 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 FQDN för API-servern till ip-adressen för den privata slutpunkten 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 att distribuera ett privat AKS-kluster:

Privat DNS zonalternativ enablePrivateClusterPublicFQDN: true enablePrivateClusterPublicFQDN: false
System Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller ett 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 ett 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.
Ingen 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 privata resurs-ID för DNS-zonen> Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller ett 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 FQDN för API-servern.
Agentnoder och andra virtuella datorer i aks-klustrets virtuella nätverk eller ett 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

Det finns flera alternativ för att upprätta nätverksanslutning till det privata klustret.

Du kan hantera ett privat AKS-kluster med hjälp av kommandoradsverktyget kubectl från en virtuell hanteringsdator i samma virtuella nätverk eller ett peer-kopplat virtuellt nätverk.

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 jumpbox-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 RDP (Remote Desktop Protocol) 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 inte någon offentlig IP-adress, agent eller särskild klientprogramvara.

Du kan också använda kommandot az aks invoke för att köra kubectl kommandon eller helm på ditt privata AKS-kluster utan att behöva ansluta till en virtuell jumpbox-dator.

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 exponeras API-servern fortfarande offentligt, men åtkomsten är begränsad. Mer information finns i Säker åtkomst till API-servern med 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

Anslutningsöverväganden för AKS

  • Ett privat AKS-kluster ger högre säkerhet och isolering än auktoriserade IP-adresser. Du kan dock inte konvertera ett befintligt offentligt AKS-kluster till ett privat kluster. Du kan aktivera auktoriserade IP-adresser för alla befintliga AKS-kluster.

  • Du kan inte tillämpa auktoriserade IP-intervall på en privat API-serverslutpunkt. Auktoriserade IP-adresser gäller endast för den offentliga API-servern.

  • Privata kluster stöder inte Azure DevOps-värdbaserade agenter. Överväg att använda lokalt installerade agenter.

  • Om du vill göra det möjligt för Azure Container Registry att arbeta med ett privat AKS-kluster konfigurerar du en privat länk för containerregistret i klustrets virtuella nätverk. Eller konfigurera peering mellan det virtuella containerregistrets virtuella nätverk och det privata klustrets virtuella nätverk.

  • Azure Private Link tjänstbegränsningar gäller för privata kluster.

  • Om du tar bort eller ändrar den privata slutpunkten i kundundernätet för ett privat kluster slutar klustret att fungera.

Deltagare

Den här artikeln underhålls av Microsoft. Den skrevs ursprungligen av följande deltagare.

Huvudförfattare:

Andra deltagare:

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

Nästa steg

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