Řízení příchozího přenosu dat pro uzly clusteru v Azure Kubernetes Service (AKS)

Tento článek obsahuje nezbytné podrobnosti, které vám umožní zabezpečit odchozí provoz z vaší Azure Kubernetes Service (AKS). Obsahuje požadavky na cluster pro základní nasazení AKS a další požadavky na volitelné doplňky a funkce. Na konci najdete příklad konfiguracetěchto požadavků pomocí Azure Firewall . Tyto informace ale můžete použít pro libovolnou metodu odchozího omezení nebo zařízení.

Pozadí

Clustery AKS se nasadí ve virtuální síti. Tuto síť je možné spravovat (vytvořená službou AKS) nebo vlastní (předem nakonfigurovaná uživatelem). V obou případech má cluster odchozí závislosti na službách mimo virtuální síť (služba nemá žádné příchozí závislosti).

Pro účely správy a provozu musí uzly v clusteru AKS přistupovat k určitým portům a plně kvalifikovaným názvům domén (FQDN). Tyto koncové body jsou potřeba ke komunikaci uzlů se serverem rozhraní API nebo ke stažení a instalaci základních komponent clusteru Kubernetes a aktualizací zabezpečení uzlu. Cluster například potřebuje vyžádat image základního kontejneru systému z Microsoft Container Registry (MCR).

Odchozí závislosti AKS jsou téměř zcela definované pomocí plně kvalifikovaných název domény, které nemají statické adresy. Absence statických adres znamená, že skupiny zabezpečení sítě není možné použít k uzamčení odchozího provozu z clusteru AKS.

Ve výchozím nastavení mají clustery AKS neomezený odchozí (výchozí) přístup k internetu. Tato úroveň síťového přístupu umožňuje uzlům a službám, které spustíte, přistupovat k externím prostředkům podle potřeby. Pokud chcete omezit odchozí provoz, musí být dostupný omezený počet portů a adres, aby se zachovaly úlohy údržby clusteru, které jsou v pořádku. Nejjednodušším řešením zabezpečení odchozích adres je použití zařízení brány firewall, které dokáže řídit odchozí provoz na základě názvů domén. Azure Firewall můžete například omezit odchozí provoz HTTP a HTTPS na základě plně kvalifikovaných názvu domény cíle. Můžete také nakonfigurovat upřednostňovaná pravidla brány firewall a zabezpečení, která povolí tyto požadované porty a adresy.

Důležité

Tento dokument popisuje pouze to, jak uzamknout provoz opouštějící podsíť AKS. AKS nemá ve výchozím nastavení žádné požadavky na příchozí přenos dat. Blokování provozu interní podsítě pomocí skupin zabezpečení sítě (NSG) a bran firewall se nepodporuje. Pokud chcete řídit a blokovat provoz v rámci clusteru, použijte zásady sítě.

Požadovaná pravidla odchozí sítě a FQDN pro clustery AKS

Pro cluster AKS se vyžaduje následující pravidla sítě a plně kvalifikovaných název domény nebo aplikací. Můžete je použít, pokud chcete nakonfigurovat jiné řešení než Azure Firewall.

  • Závislosti IP adres jsou pro přenosy jiné než HTTP/S (provoz TCP i UDP).
  • Plně kvalifikovaný název domény koncové body HTTP/HTTPS je možné umístit do zařízení brány firewall.
  • Koncové body HTTP/HTTPS se zástupnými znaky jsou závislosti, které se můžou v clusteru AKS lišit na základě počtu kvalifikátorů.
  • AKS používá kontroler přístupu k vložení plně kvalifikovaných názvů domény jako proměnné prostředí do všech nasazení v rámci kube-system a gatekeeper-system, který zajišťuje, že veškerá systémová komunikace mezi uzly a serverem rozhraní API používá plně kvalifikovaný název domény serveru rozhraní API, a ne IP adresu serveru rozhraní API.
  • Pokud máte aplikaci nebo řešení, které potřebuje komunikaci se serverem rozhraní API, musíte přidat další pravidlo sítě, které umožní komunikaci protokolu TCP s portem 443 IP adresy vašeho serveru rozhraní API.
  • Ve výjimečných případech může v případě operace údržby dojít ke změně IP adresy serveru rozhraní API. Operace plánované údržby, které mohou změnit IP adresu serveru rozhraní API, se vždy sdělí předem.

Globální požadovaná pravidla sítě v Azure

Požadovaná pravidla sítě a závislosti IP adres:

Cílový koncový bod Protokol Port Použití
*:1194
Nebo
ServiceTag - AzureCloud.<Region>:1194
Nebo
Regionální CIDR - RegionCIDRs:1194
Nebo
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení. To se u privátních clusterů nevyžaduje.
*:9000
Nebo
ServiceTag - AzureCloud.<Region>:9000
Nebo
Regionální CIDR - RegionCIDRs:9000
Nebo
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení. To se u privátních clusterů nevyžaduje.
*:123 nebo ntp.ubuntu.com:123 (pokud používáte Azure Firewall pravidla sítě) UDP 123 Vyžaduje se pro synchronizaci času protokolu NTP (Network Time Protocol) na uzlech Linuxu.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Pokud používáte vlastní servery DNS, musíte zajistit, aby byly přístupné pro uzly clusteru.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 Vyžaduje se, pokud se pody nebo nasazení, která přistupuje k serveru rozhraní API, používají tyto pody nebo nasazení IP adresu rozhraní API. To se u privátních clusterů nevyžaduje.

Globální požadovaný plně kvalifikovaný název domény / pravidla aplikace Azure

Vyžaduje se následující plně kvalifikovaný název domény nebo pravidla aplikace:

Cílový plně kvalifikovaný název domény Port Použití
*.hcp.<location>.azmk8s.io HTTPS:443 Vyžaduje se pro komunikaci <-> rozhraní API node. Nahraďte <location> oblastí, ve které je váš cluster AKS nasazený.
mcr.microsoft.com HTTPS:443 Vyžaduje se pro přístup k imagí Microsoft Container Registry (MCR). Tento registr obsahuje image/grafy třetích stran (například coreDNS atd.). Tyto image jsou potřeba ke správnému vytvoření a fungování clusteru, včetně operací škálování a upgradu.
*.data.mcr.microsoft.com HTTPS:443 Vyžaduje se MCR úložiště zálohované sítí pro doručování obsahu Azure (CDN).
management.azure.com HTTPS:443 Vyžaduje se pro operace Kubernetes s rozhraním Azure API.
login.microsoftonline.com HTTPS:443 Vyžaduje se pro Azure Active Directory ověřování.
packages.microsoft.com HTTPS:443 Tato adresa je úložiště balíčků Microsoftu, které se používá pro operace apt-get uložené v mezipaměti. Mezi příklady balíčků patří Moby, PowerShell a Azure CLI.
acs-mirror.azureedge.net HTTPS:443 Tato adresa je potřebná pro úložiště potřebné ke stažení a instalaci požadovaných binárních souborů, jako jsou kubenet a Azure CNI.

Azure China 21Vianet požadovaná pravidla sítě

Požadovaná pravidla sítě a závislosti IP adres:

Cílový koncový bod Protokol Port Použití
*:1194
Nebo
ServiceTag - AzureCloud.Region:1194
Nebo
Regionální CIDR - RegionCIDRs:1194
Nebo
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení.
*:9000
Nebo
ServiceTag - AzureCloud.<Region>:9000
Nebo
Regionální CIDR - RegionCIDRs:9000
Nebo
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení.
*:22
Nebo
ServiceTag - AzureCloud.<Region>:22
Nebo
Regionální CIDR - RegionCIDRs:22
Nebo
APIServerPublicIP:22 (only known after cluster creation)
TCP 22 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení.
*:123 nebo ntp.ubuntu.com:123 (pokud používáte Azure Firewall pravidla sítě) UDP 123 Vyžaduje se pro synchronizaci času protokolu NTP (Network Time Protocol) na uzlech Linuxu.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Pokud používáte vlastní servery DNS, musíte zajistit, aby byly přístupné pro uzly clusteru.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 Vyžaduje se, pokud jsou spuštěné pody nebo nasazení, která přistupuje k serveru rozhraní API, tyto pody nebo nasazení používají IP adresu rozhraní API.

Azure China 21Vianet požadovaný plně kvalifikovaný název domény / pravidla aplikace

Vyžaduje se následující plně kvalifikovaný název domény nebo pravidla aplikace:

Cílový plně kvalifikovaný název domény Port Použití
*.hcp.<location>.cx.prod.service.azk8s.cn HTTPS:443 Vyžaduje se pro komunikaci <-> rozhraní API node. Nahraďte <location> oblastí, ve které je váš cluster AKS nasazený.
*.tun.<location>.cx.prod.service.azk8s.cn HTTPS:443 Vyžaduje se pro komunikaci <-> rozhraní API node. Nahraďte <location> oblastí, ve které je váš cluster AKS nasazený.
mcr.microsoft.com HTTPS:443 Vyžaduje se pro přístup k imagí Microsoft Container Registry (MCR). Tento registr obsahuje image/grafy třetích stran (například coreDNS atd.). Tyto image jsou potřeba ke správnému vytvoření a fungování clusteru, včetně operací škálování a upgradu.
.data.mcr.microsoft.com HTTPS:443 Vyžaduje se MCR úložiště zálohované službou Azure Content Delivery Network (CDN).
management.chinacloudapi.cn HTTPS:443 Vyžaduje se pro operace Kubernetes s rozhraním Azure API.
login.chinacloudapi.cn HTTPS:443 Vyžaduje se pro Azure Active Directory ověřování.
packages.microsoft.com HTTPS:443 Tato adresa je úložiště balíčků Microsoftu, které se používá pro operace apt-get uložené v mezipaměti. Mezi příklady balíčků patří Moby, PowerShell a Azure CLI.
*.azk8s.cn HTTPS:443 Tato adresa je potřebná pro úložiště potřebné ke stažení a instalaci požadovaných binárních souborů, jako jsou kubenet a Azure CNI.

Vyžaduje se síťová pravidla pro Azure US Government.

Požadovaná pravidla sítě a závislosti IP adres:

Cílový koncový bod Protokol Port Použití
*:1194
Nebo
ServiceTag - AzureCloud.<Region>:1194
Nebo
Regionální CIDR - RegionCIDRs:1194
Nebo
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení.
*:9000
Nebo
ServiceTag - AzureCloud.<Region>:9000
Nebo
Regionální CIDR - RegionCIDRs:9000
Nebo
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Pro zabezpečenou komunikaci mezi uzly a řídicí rovinou pomocí tunelového propojení.
*:123 nebo ntp.ubuntu.com:123 (pokud používáte Azure Firewall pravidla sítě) UDP 123 Vyžaduje se pro synchronizaci času protokolu NTP (Network Time Protocol) na uzlech Linuxu.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Pokud používáte vlastní servery DNS, musíte zajistit, aby byly přístupné pro uzly clusteru.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 Vyžaduje se, pokud se pody nebo nasazení, která přistupuje k serveru rozhraní API, používají tyto pody nebo nasazení IP adresu rozhraní API.

Azure US Government vyžaduje plně kvalifikovaný název domény / pravidla aplikace

Vyžaduje se následující plně kvalifikovaný název domény nebo pravidla aplikace:

Cílový plně kvalifikovaný název domény Port Použití
*.hcp.<location>.cx.aks.containerservice.azure.us HTTPS:443 Vyžaduje se pro komunikaci <-> rozhraní API node. Nahraďte <location> oblastí, ve které je váš cluster AKS nasazený.
mcr.microsoft.com HTTPS:443 Vyžaduje se pro přístup k imagí Microsoft Container Registry (MCR). Tento registr obsahuje image/grafy třetích stran (například coreDNS atd.). Tyto image jsou potřeba ke správnému vytvoření a fungování clusteru, včetně operací škálování a upgradu.
*.data.mcr.microsoft.com HTTPS:443 Vyžaduje se MCR úložiště zálohované sítí pro doručování obsahu Azure (CDN).
management.usgovcloudapi.net HTTPS:443 Vyžaduje se pro operace Kubernetes s rozhraním Azure API.
login.microsoftonline.us HTTPS:443 Vyžaduje se pro Azure Active Directory ověřování.
packages.microsoft.com HTTPS:443 Tato adresa je úložiště balíčků Microsoftu, které se používá pro operace apt-get uložené v mezipaměti. Mezi příklady balíčků patří Moby, PowerShell a Azure CLI.
acs-mirror.azureedge.net HTTPS:443 Tato adresa je potřebná pro úložiště potřebné k instalaci požadovaných binárních souborů, jako jsou kubenet a Azure CNI.

Následující pravidla plně kvalifikovaných názvu domény nebo aplikací jsou volitelná, ale doporučuje se pro clustery AKS:

Cílový plně kvalifikovaný název domény Port Použití
security.ubuntu.com, azure.archive.ubuntu.com, changelogs.ubuntu.com HTTP:80 Tato adresa umožňuje uzlům clusteru s Linuxem stáhnout požadované opravy a aktualizace zabezpečení.

Pokud se rozhodnete tyto FQDN blokovat nebo nepovolit, uzly obdrží aktualizace operačního systému jenom při upgradu image uzlu nebo upgradu clusteru.

Clustery AKS s podporou GPU

Požadovaný plně kvalifikovaný název domény / pravidla aplikace

Pro clustery AKS s povoleným GPU se vyžaduje následující pravidla plně kvalifikovaných názvu domény nebo aplikací:

Cílový plně kvalifikovaný název domény Port Použití
nvidia.github.io HTTPS:443 Tato adresa se používá ke správné instalaci ovladačů a provozu na uzlech založených na GPU.
us.download.nvidia.com HTTPS:443 Tato adresa se používá ke správné instalaci ovladačů a provozu na uzlech založených na GPU.
apt.dockerproject.org HTTPS:443 Tato adresa se používá ke správné instalaci ovladačů a provozu na uzlech založených na GPU.

Windows uzlů založených na serveru

Požadovaný plně kvalifikovaný název domény / pravidla aplikace

Pro použití fondů uzlů založených na Windows Server se vyžaduje následující pravidla plně kvalifikovaných názvů domény nebo aplikací:

Cílový plně kvalifikovaný název domény Port Použití
onegetcdn.azureedge.net, go.microsoft.com HTTPS:443 Instalace binárních souborů souvisejících s Windows
*.mp.microsoft.com, www.msftconnecttest.com, ctldl.windowsupdate.com HTTP:80 Instalace binárních souborů souvisejících s Windows

Doplňky a integrace AKS

Azure Monitor pro kontejnery

Existují dvě možnosti, jak poskytnout přístup k Azure Monitor pro kontejnery. Můžete povolit Azure Monitor ServiceTag nebo poskytnout přístup k požadovanému plně kvalifikovaným názvu domény nebo pravidlům aplikace.

Požadovaná pravidla sítě

Vyžaduje se následující plně kvalifikovaný název domény nebo pravidla aplikace:

Cílový koncový bod Protokol Port Použití
ServiceTag - AzureMonitor:443 TCP 443 Tento koncový bod slouží k odesílání dat a protokolů metrik do Azure Monitor a Log Analytics.

Požadovaný plně kvalifikovaný název domény / pravidla aplikace

Pro clustery AKS, které mají povolené Azure Monitor pro kontejnery, se vyžaduje následující pravidla plně kvalifikovaných Azure Monitor aplikací:

FQDN Port Použití
dc.services.visualstudio.com HTTPS:443 Tento koncový bod se používá pro metriky a monitorování telemetrie pomocí Azure Monitor.
*.ods.opinsights.azure.com HTTPS:443 Tento koncový bod používá Azure Monitor pro ingestování dat Log Analytics.
*.oms.opinsights.azure.com HTTPS:443 Tento koncový bod používá omsagent, který se používá k ověřování služby Log Analytics.
*.monitoring.azure.com HTTPS:443 Tento koncový bod slouží k odesílání dat metrik do Azure Monitor.

Azure Policy

Požadovaný plně kvalifikovaný název domény / pravidla aplikace

Pro clustery AKS s povoleným plně kvalifikovaným název domény nebo pravidly aplikací se Azure Policy domény.

FQDN Port Použití
data.policy.core.windows.net HTTPS:443 Tato adresa se používá k natažení zásad Kubernetes a hlášení stavu dodržování předpisů clusteru službě zásad.
store.policy.core.windows.net HTTPS:443 Tato adresa se používá k vyžadování artefaktů Gatekeeperu z předdefinových zásad.
dc.services.visualstudio.com HTTPS:443 Azure Policy, který odesílá telemetrická data do koncového bodu služby Applications Insights.

Azure China 21Vianet požadovaný plně kvalifikovaný název domény / pravidla aplikace

Pro clustery AKS s povoleným plně kvalifikovaným název domény nebo pravidly aplikací se Azure Policy domény.

FQDN Port Použití
data.policy.azure.cn HTTPS:443 Tato adresa se používá k natažení zásad Kubernetes a hlášení stavu dodržování předpisů clusteru službě zásad.
store.policy.azure.cn HTTPS:443 Tato adresa se používá k vyžadování artefaktů Gatekeeperu z předdefinových zásad.

Požadovaný plně kvalifikovaný název domény nebo pravidla aplikace pro Azure US Government

Pro clustery AKS s povoleným plně kvalifikovaným název domény nebo pravidly aplikací se Azure Policy domény.

FQDN Port Použití
data.policy.azure.us HTTPS:443 Tato adresa se používá k natažení zásad Kubernetes a hlášení stavu dodržování předpisů clusteru službě zásad.
store.policy.azure.us HTTPS:443 Tato adresa se používá k vyžadování artefaktů Gatekeeperu z předdefinových zásad.

Rozšíření clusteru

Požadovaný plně kvalifikovaný název domény / pravidla aplikace

Pro používání rozšíření clusteru v clusterech AKS se vyžaduje následující pravidla plně kvalifikovaných názvů domény nebo aplikací.

FQDN Port Použití
<region>.dp.kubernetesconfiguration.azure.com HTTPS:443 Tato adresa se používá k načtení informací o konfiguraci ze služby Rozšíření clusteru a hlášení stavu rozšíření službě.
mcr.microsoft.com, *.data.mcr.microsoft.com HTTPS:443 Tato adresa je nutná k vyžadování imagí kontejnerů pro instalaci agentů rozšíření clusteru v clusteru AKS.

Požadovaný plně kvalifikovaný název domény nebo pravidla aplikace pro Azure US Government

Pro používání rozšíření clusteru v clusterech AKS se vyžaduje následující pravidla plně kvalifikovaných názvů domény nebo aplikací.

FQDN Port Použití
<region>.dp.kubernetesconfiguration.azure.us HTTPS:443 Tato adresa se používá k načtení informací o konfiguraci ze služby Rozšíření clusteru a hlášení stavu rozšíření službě.
mcr.microsoft.com, *.data.mcr.microsoft.com HTTPS:443 Tato adresa je nutná k vyžadování imagí kontejnerů pro instalaci agentů rozšíření clusteru v clusteru AKS.

Omezení odchozího provozu pomocí služby Azure Firewall

Azure Firewall tuto konfiguraci zjednodušuje Azure Kubernetes Service ( ) značky plně kvalifikovaných název AzureKubernetesService domény.

Poznámka

Značka plně kvalifikovaných název domény obsahuje všechny výše uvedené plně kvalifikovaný název domény a je automaticky aktuální.

Pro produkční scénáře doporučujeme mít minimálně 20 front-endových IP Azure Firewall, abyste se vyhnuli problémům s vyčerpání portů SNAT.

Níže je příklad architektury nasazení:

Uzamknutá topologie

  • Veřejný příchozí přenos dat je nucen procházet filtry brány firewall.
    • Uzly agentů AKS jsou izolované ve vyhrazené podsíti.
    • Azure Firewall se nasazovat ve vlastní podsíti.
    • Pravidlo DNAT přeloží veřejnou IP adresu brány FW na IP adresu front-endu lb.
  • Odchozí požadavky začínají z uzlů agentů do Azure Firewall IP adresy pomocí trasy definované uživatelem.
    • Požadavky z uzlů agenta AKS se budou řídit UDR, která byla umístěna v podsíti, do které byl cluster AKS nasazen.
    • Azure Firewall z virtuální sítě z front-endu veřejné IP adresy
    • Přístup k veřejnému internetu nebo jiným službám Azure se toky do a z IP adresy front-endu brány firewall
    • Volitelně je přístup k řídicí rovině AKS chráněný autorizovanými rozsahy IP adres serveru rozhraní API,které zahrnují veřejnou front-endovou IP adresu brány firewall.
  • Interní provoz
    • Volitelně můžete pro interní provoz použít interní Load Balancer nebo navíc k veřejnému virtuálnímu počítači Load Balancer který můžete izolovat také ve vlastní podsíti.

Následující kroky využívají značku plně Azure Firewall k omezení odchozího provozu z clusteru AKS a poskytují příklad konfigurace veřejného příchozího provozu AzureKubernetesService přes bránu firewall.

Nastavení konfigurace prostřednictvím proměnných prostředí

Definujte sadu proměnných prostředí, které se mají použít při vytváření prostředků.

PREFIX="aks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
PLUGIN=azure
AKSNAME="${PREFIX}"
VNET_NAME="${PREFIX}-vnet"
AKSSUBNET_NAME="aks-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_TABLE_NAME="${PREFIX}-fwrt"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"

Vytvoření virtuální sítě s několika podsítěmi

Zřídit virtuální síť se dvěma samostatnými podsítěmi, jednu pro cluster, jednu pro bránu firewall. Volitelně můžete také vytvořit jednu pro příchozí příchozí provoz služby.

Prázdná topologie sítě

Vytvořte skupinu prostředků pro uložení všech prostředků.

# Create Resource Group

az group create --name $RG --location $LOC

Vytvořte virtuální síť se dvěma podsítěmi pro hostování clusteru AKS a Azure Firewall. Každá z nich bude mít vlastní podsíť. Pojďme začít používat AKS síť.

# Dedicated virtual network with AKS subnet

az network vnet create \
    --resource-group $RG \
    --name $VNET_NAME \
    --location $LOC \
    --address-prefixes 10.42.0.0/16 \
    --subnet-name $AKSSUBNET_NAME \
    --subnet-prefix 10.42.1.0/24

# Dedicated subnet for Azure Firewall (Firewall name cannot be changed)

az network vnet subnet create \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $FWSUBNET_NAME \
    --address-prefix 10.42.2.0/24

Vytvoření a nastavení Azure Firewall s UDR

Musí být nakonfigurovaná pravidla příchozího a odchozího Azure Firewall. Hlavním účelem brány firewall je umožnit organizacím konfigurovat podrobná pravidla příchozího provozu a odchozí přenos dat do clusteru AKS a z něj.

Brána firewall a UDR

Důležité

Pokud váš cluster nebo aplikace vytvoří velký počet odchozích připojení směrovaných na stejnou nebo malou podmnožinu cílů, budete možná potřebovat víc IP adres front-endu, abyste se vyhnuli maxingům portů na front-endu. Další informace o tom, jak vytvořit bránu firewall Azure s více IP adresami, najdete tady .

Vytvořte prostředek veřejné IP adresy standardní SKU, který bude použit jako Azure Firewall adresa front-endu.

az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"

Zaregistrujte verzi Preview rozhraní příkazového řádku pro vytvoření Azure Firewall.

# Install Azure Firewall preview CLI extension

az extension add --name azure-firewall

# Deploy Azure Firewall

az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true

IP adresa, kterou jste vytvořili dříve, se teď dá přiřadit ke front-endu brány firewall.

Poznámka

Nastavení veřejné IP adresy na Azure Firewall může trvat několik minut. Aby bylo možné využít plně kvalifikovaný název domény u pravidel sítě, potřebujeme povolený proxy server DNS, pokud je povolená brána firewall, bude naslouchat na portu 53 a předává požadavky DNS na výše uvedený server DNS. To umožní bráně firewall automaticky přeložit tento plně kvalifikovaný název domény.

# Configure Firewall IP Config

az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME

Po úspěšném dokončení předchozího příkazu uložte IP adresu front-endu firewallu pro pozdější konfiguraci.

# Capture Firewall IP Address for Later Use

FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv)
FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIpAddress" -o tsv)

Poznámka

Pokud používáte zabezpečený přístup k serveru rozhraní AKS API s povolenými rozsahy IP adres, musíte přidat veřejnou IP adresu brány firewall do povoleného rozsahu IP adres.

Vytvoření UDR s segmentem směrování na Azure Firewall

Azure automaticky směruje provoz mezi podsítěmi Azure, virtuálními sítěmi a místními sítěmi. Pokud chcete změnit některý z výchozích směrování Azure, provedete to tak, že vytvoříte směrovací tabulku.

Vytvořte prázdnou směrovací tabulku, kterou chcete přidružit k dané podsíti. Směrovací tabulka bude definovat další segment směrování, jak Azure Firewall vytvořili výše. Každá podsíť může mít přidruženou žádnou nebo jednu směrovací tabulku.

# Create UDR and add a route for Azure Firewall

az network route-table create -g $RG -l $LOC --name $FWROUTE_TABLE_NAME
az network route-table route create -g $RG --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP
az network route-table route create -g $RG --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet

Informace o tom, jak můžete přepsat výchozí systémové trasy Azure nebo přidat další trasy do směrovací tabulky podsítě, najdete v dokumentaci k tabulce směrování virtuální sítě .

Přidávání pravidel brány firewall

Níže jsou uvedená tři Síťová pravidla, která můžete použít ke konfiguraci brány firewall, možná budete muset tato pravidla přizpůsobit v závislosti na vašem nasazení. První pravidlo umožňuje přístup k portu 9000 přes protokol TCP. Druhé pravidlo umožňuje přístup k portům 1194 a 123 přes protokol UDP (Pokud provádíte nasazení do Azure Čína 21Vianet, budete možná potřebovat Další). Obě tato pravidla budou umožňovat jenom provoz směřující do oblasti Azure s CIDR, kterou používáme, v tomto případě Východní USA. Nakonec přidáme třetí pravidlo sítě, ve kterém se otevírají porty 123 až do ntp.ubuntu.com plně kvalifikovaného názvu domény přes UDP (přidání plně kvalifikovaného názvu domény jako pravidlo sítě je jednou z konkrétních funkcí Azure firewall a budete je muset při použití vlastních možností přizpůsobit).

Po nastavení síťových pravidel přidáme také pravidlo aplikace pomocí nástroje AzureKubernetesService , které pokrývá všechny potřebné plně kvalifikované názvy domén, které jsou přístupné prostřednictvím portu TCP 443 a portu 80.

# Add FW Network Rules

az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123

# Add FW Application Rules

az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100

Další informace o službě Azure Firewall najdete v dokumentaci k Azure firewall .

Přidružení směrovací tabulky k AKS

K přidružení clusteru k bráně firewall musí vyhrazená podsíť pro podsíť clusteru odkazovat na tabulku směrování vytvořenou výše. Přidružení se dá udělat vyvoláním příkazu do virtuální sítě, která drží cluster i bránu firewall k aktualizaci směrovací tabulky podsítě clusteru.

# Associate route table with next hop to Firewall to the AKS subnet

az network vnet subnet update -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME

Nasazení AKS s odchozím typem UDR do existující sítě

Cluster AKS se teď dá nasadit do existující virtuální sítě. Použijeme také odchozí typ userDefinedRouting . Tato funkce zajišťuje, že veškerý odchozí provoz bude vynucený přes bránu firewall a nebudou existovat žádné další výstupní cesty (ve výchozím nastavení se dá použít Load Balancer odchozího typu).

AKS – nasazení

Vytvoření instančního objektu s přístupem ke zřízení v existující virtuální síti

Identitu clusteru (spravovanou identitu nebo instanční objekt) používá AKS k vytváření prostředků clusteru. instanční objekt, který se předává v čase vytvoření, se používá k vytvoření základních prostředků AKS, jako jsou Storage prostředky, ip adresy a nástroje pro vyrovnávání zatížení používané v AKS (místo toho můžete také použít spravovanou identitu ). Pokud nejsou níže udělená příslušná oprávnění, nebudete moct zřídit cluster AKS.

# Create SP and Assign Permission to Virtual Network

az ad sp create-for-rbac -n "${PREFIX}sp"

Nyní nahraďte APPID a PASSWORD níže objektem AppID a heslo instančního objektu, které jsou automaticky generovány předchozím výstupem příkazu. Odkaz na ID prostředku virtuální sítě vám poskytne oprávnění k instančnímu objektu, aby AKS mohli do něj nasadit prostředky.

APPID="<SERVICE_PRINCIPAL_APPID_GOES_HERE>"
PASSWORD="<SERVICEPRINCIPAL_PASSWORD_GOES_HERE>"
VNETID=$(az network vnet show -g $RG --name $VNET_NAME --query id -o tsv)

# Assign SP Permission to VNET

az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor"

Tadymůžete ověřit podrobná oprávnění, která jsou potřeba.

Poznámka

Pokud používáte modul plug-in kubenet Network, budete muset pro předem vytvořenou směrovací tabulku přidělit oprávnění instančního objektu AKS nebo spravovaná identita, protože kubenet vyžaduje, aby tabulka směrování přidala pravidla směrování nezbytné.

RTID=$(az network route-table show -g $RG -n $FWROUTE_TABLE_NAME --query id -o tsv)
az role assignment create --assignee $APPID --scope $RTID --role "Network Contributor"

Nasazení AKS

Cluster AKS se nakonec dá nasadit do existující podsítě, kterou jsme pro cluster vyhrazujeme. Cílová podsíť, do které se má nasadit, je definována s proměnnou prostředí $SUBNETID . V předchozích krocích jsme nedefinovali $SUBNETID proměnnou. Chcete-li nastavit hodnotu ID podsítě, můžete použít následující příkaz:

SUBNETID=$(az network vnet subnet show -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)

Budete definovat typ odchozího připojení pro použití UDR, který již v podsíti existuje. Tato konfigurace umožní AKS přeskočit nastavení a zřizování IP adres pro nástroj pro vyrovnávání zatížení.

Důležité

Další informace o odchozím typu UDR, včetně omezení, najdete v tématu odchozí výstupní typ udr.

Tip

Do nasazení clusteru, jako je například soukromý cluster, lze přidat další funkce.

Funkci AKS pro rozsahy IP adres autorizovaných serverem API lze přidat k omezení přístupu serveru rozhraní API pouze k veřejnému koncovému bodu brány firewall. Funkce povolených rozsahů IP adres je v diagramu označena jako volitelná. Když povolíte funkci schváleného rozsahu IP adres pro omezení přístupu k serveru rozhraní API, nástroje pro vývojáře musí použít JumpBox z virtuální sítě brány firewall nebo musíte přidat všechny koncové body pro vývojáře do povoleného rozsahu IP adres.

az aks create -g $RG -n $AKSNAME -l $LOC \
  --node-count 3 --generate-ssh-keys \
  --network-plugin $PLUGIN \
  --outbound-type userDefinedRouting \
  --service-cidr 10.41.0.0/16 \
  --dns-service-ip 10.41.0.10 \
  --docker-bridge-address 172.17.0.1/16 \
  --vnet-subnet-id $SUBNETID \
  --service-principal $APPID \
  --client-secret $PASSWORD \
  --api-server-authorized-ip-ranges $FWPUBLIC_IP

Povolení přístupu pro vývojáře k serveru rozhraní API

Pokud jste v předchozím kroku použili schválené rozsahy IP adres pro cluster, musíte přidat IP adresy vývojářských nástrojů do seznamu clusterů AKS schválených rozsahů IP adres, abyste z něj mohli získat přístup k serveru rozhraní API. Další možností je nakonfigurovat JumpBox s potřebnými nástroji v samostatné podsíti ve virtuální síti brány firewall.

Pomocí následujícího příkazu přidejte do schválených rozsahů další IP adresu.

# Retrieve your IP address
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)

# Add to AKS approved list
az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32

K nakonfigurování kubectl připojení k nově vytvořenému clusteru Kubernetes použijte příkaz [az AKS Get-Credentials] [az-AKS-Get-Credentials].

az aks get-credentials -g $RG -n $AKSNAME

Nasazení veřejné služby

Teď můžete začít vystavovat služby a nasazovat aplikace do tohoto clusteru. V tomto příkladu vystavíme veřejnou službu, ale můžete se také rozhodnout vystavit interní službu prostřednictvím interního nástroje pro vyrovnávání zatížení.

DNAT veřejné služby

Nasaďte aplikaci hlasovací aplikace v Azure zkopírováním níže uvedeného YAML do souboru s názvem example.yaml .

# voting-storage-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-storage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: voting-storage
  template:
    metadata:
      labels:
        app: voting-storage
    spec:
      containers:
      - name: voting-storage
        image: mcr.microsoft.com/aks/samples/voting/storage:2.0
        args: ["--ignore-db-dir=lost+found"]
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_ROOT_PASSWORD
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_DATABASE
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
# voting-storage-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: voting-storage-secret
type: Opaque
data:
  MYSQL_USER: ZGJ1c2Vy
  MYSQL_PASSWORD: UGFzc3dvcmQxMg==
  MYSQL_DATABASE: YXp1cmV2b3Rl
  MYSQL_ROOT_PASSWORD: UGFzc3dvcmQxMg==
---
# voting-storage-pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
# voting-storage-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: voting-storage
  labels: 
    app: voting-storage
spec:
  ports:
  - port: 3306
    name: mysql
  selector:
    app: voting-storage
---
# voting-app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: voting-app
  template:
    metadata:
      labels:
        app: voting-app
    spec:
      containers:
      - name: voting-app
        image: mcr.microsoft.com/aks/samples/voting/app:2.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: http
        env:
        - name: MYSQL_HOST
          value: "voting-storage"
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_DATABASE
        - name: ANALYTICS_HOST
          value: "voting-analytics"
---
# voting-app-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: voting-app
  labels: 
    app: voting-app
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
    name: http
  selector:
    app: voting-app
---
# voting-analytics-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-analytics
spec:
  replicas: 1
  selector:
    matchLabels:
      app: voting-analytics
      version: "2.0"
  template:
    metadata:
      labels:
        app: voting-analytics
        version: "2.0"
    spec:
      containers:
      - name: voting-analytics
        image: mcr.microsoft.com/aks/samples/voting/analytics:2.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: http
        env:
        - name: MYSQL_HOST
          value: "voting-storage"
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_DATABASE
---
# voting-analytics-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: voting-analytics
  labels: 
    app: voting-analytics
spec:
  ports:
  - port: 8080
    name: http
  selector:
    app: voting-analytics

Nasaďte službu spuštěním:

kubectl apply -f example.yaml

Přidat pravidlo DNAT do Azure Firewall

Důležité

Když použijete Azure Firewall k omezení odchozího provozu a vytvoření trasy definované uživatelem (UDR) k vynucení veškerého odchozího provozu, ujistěte se, že jste v bráně firewall vytvořili příslušné pravidlo DNAT pro správné povolení provozu příchozího přenosu dat. Použití Azure Firewall s UDR v důsledku asymetrického směrování narušuje nastavení příchozího přenosu dat. (K tomuto problému dochází, pokud má podsíť AKS výchozí trasu, která přechází na soukromou IP adresu brány firewall, ale používáte veřejný Nástroj pro vyrovnávání zatížení – příchozí nebo Kubernetes služba typu: Vyrovnávání zatížení sítě). V tomto případě se příchozí provoz nástroje pro vyrovnávání zatížení přijímá prostřednictvím veřejné IP adresy, ale návratová cesta prochází přes privátní IP adresu brány firewall. Vzhledem k tomu, že brána firewall je stavová, dojde k vrácení vráceného paketu, protože brána firewall neví o zavedené relaci. Informace o tom, jak integrovat Azure Firewall s vaším nástrojem pro vyrovnávání zatížení pro příchozí přenosy nebo služby, najdete v tématu věnovaném integraci Azure firewall s Azure Standard Load Balancer.

Aby bylo možné konfigurovat příchozí připojení, musí být do Azure Firewall zapsáno pravidlo DNAT. Pro otestování připojení ke clusteru je definováno pravidlo pro veřejnou IP adresu front-endu firewall pro směrování do interní IP adresy vystavené interní službou.

Cílovou adresu lze přizpůsobit, protože se jedná o port brány firewall, pro který má být k dispozici. Přeložená adresa musí být IP adresa interního nástroje pro vyrovnávání zatížení. Přeložený port musí být vystavený port pro vaši službu Kubernetes.

Budete muset zadat interní IP adresu přiřazenou k nástroji pro vyrovnávání zatížení, který vytvořila služba Kubernetes. Načtěte adresu spuštěním:

kubectl get services

Požadovaná IP adresa bude uvedena ve sloupci EXTERNAL-IP, podobně jako v následujícím příkladu.

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP      10.41.0.1       <none>        443/TCP        10h
voting-analytics   ClusterIP      10.41.88.129    <none>        8080/TCP       9m
voting-app         LoadBalancer   10.41.185.82    20.39.18.6    80:32718/TCP   9m
voting-storage     ClusterIP      10.41.221.201   <none>        3306/TCP       9m

Získejte IP adresu služby spuštěním:

SERVICE_IP=$(kubectl get svc voting-app -o jsonpath='{.status.loadBalancer.ingress[*].ip}')

Přidejte pravidlo překladu adres (NAT) tak, že spustíte:

az network firewall nat-rule create --collection-name exampleset --destination-addresses $FWPUBLIC_IP --destination-ports 80 --firewall-name $FWNAME --name inboundrule --protocols Any --resource-group $RG --source-addresses '*' --translated-port 80 --action Dnat --priority 100 --translated-address $SERVICE_IP

Ověření možností připojení

V prohlížeči přejděte na IP adresu front-endu Azure Firewall a ověřte připojení.

Měla by se zobrazit hlasovací aplikace AKS. V tomto příkladu byla veřejná IP adresa brány firewall 52.253.228.132 .

Snímek obrazovky zobrazuje hlasovací aplikaci A K S s tlačítky pro kočky, psy a Reset a součty.

Vyčištění prostředků

Pokud chcete vyčistit prostředky Azure, odstraňte skupinu prostředků AKS.

az group delete -g $RG

Další kroky

V tomto článku jste zjistili, jaké porty a adresy je možné povolit, pokud chcete omezit odchozí provoz pro cluster. Také jste zjistili, jak zabezpečit odchozí provoz pomocí Azure Firewall.

V případě potřeby můžete výše uvedené kroky zobecnit a předat provoz do vašeho upřednostňovaného řešení pro odchozí přenosy podle dokumentace k typu userDefinedRoute odchozích přenosů.

Pokud chcete omezit způsob, jakým pody mezi sebou komunikují, a East-West provozu v rámci clusteru najdete v tématu Zabezpečení provozu mezi pody pomocí zásad sítě v AKS.