Omezení síťového provozu pomocí služby Azure Firewall ve službě Azure Kubernetes Service (AKS)
Naučte se používat pravidla odchozí sítě a plně kvalifikovaného názvu domény pro clustery AKS k řízení odchozího provozu pomocí služby Azure Firewall v AKS. Kvůli zjednodušení této konfigurace poskytuje Azure Firewall značku plně kvalifikovaného názvu domény (AzureKubernetesService
FQDN) služby Azure Kubernetes Service, která omezuje odchozí provoz z clusteru AKS. Tento článek ukazuje, jak nakonfigurovat pravidla provozu clusteru AKS prostřednictvím brány firewall Azure.
Poznámka:
Značka plně kvalifikovaného názvu domény obsahuje všechny plně kvalifikované názvy domén uvedené v pravidlech odchozí sítě a plně kvalifikovaného názvu domény pro clustery AKS a automaticky se aktualizuje.
V produkčních scénářích doporučujeme mít minimálně 20 IP adres front-endu ve službě Azure Firewall, abyste se vyhnuli problémům s vyčerpáním portů SNAT.
Následující informace poskytují ukázkovou architekturu nasazení:
- Veřejný příchozí přenos dat je vynucený k toku přes filtry brány firewall.
- Uzly agenta AKS jsou izolované ve vyhrazené podsíti.
- Azure Firewall je nasazený ve vlastní podsíti.
- Pravidlo DNAT přeloží veřejnou IP adresu brány firewall do front-endové IP adresy nástroje pro vyrovnávání zatížení.
- Odchozí požadavky začínají z uzlů agenta na interní IP adresu služby Azure Firewall pomocí trasy definované uživatelem (UDR).
- Požadavky z uzlů agenta AKS se řídí trasou definovanou uživatelem umístěnou v podsíti, do které byl cluster AKS nasazen.
- Výchozí přenos dat služby Azure Firewall z front-endu veřejné IP adresy
- Přístup k veřejnému internetu nebo jiným službám Azure proudí do a z IP adresy front-endu brány firewall.
- Přístup k řídicí rovině AKS může být chráněný rozsahy IP adres autorizovaných serverem rozhraní API, včetně veřejné IP adresy front-endu brány firewall.
- Interní provoz
- Pro interní provoz můžete použít interní nástroj pro vyrovnávání zatížení, který byste mohli izolovat ve vlastní podsíti místo veřejného nástroje pro vyrovnávání zatížení nebo vedle něj.
Konfigurace 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řiďte virtuální síť se dvěma samostatnými podsítěmi: jednu pro cluster a druhou pro bránu firewall. Volitelně můžete vytvořit interní příchozí přenos dat služby.
Pomocí příkazu vytvořte skupinu
az group create
prostředků.az group create --name $RG --location $LOC
Vytvořte virtuální síť se dvěma podsítěmi pro hostování clusteru AKS a brány Azure Firewall pomocí
az network vnet create
příkazů aaz network vnet subnet create
příkazů.# 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 can't 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í služby Azure Firewall
Musíte nakonfigurovat příchozí a odchozí pravidla služby Azure Firewall. Hlavním účelem brány firewall je umožnit organizacím konfigurovat podrobná pravidla příchozího a výchozího přenosu dat do clusteru AKS a z clusteru AKS.
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ů, můžete vyžadovat další IP adresy front-endu brány firewall, abyste se vyhnuli maximálnímu počtu portů na ip adresu front-endu.
Další informace o tom, jak vytvořit bránu Azure Firewall s více IP adresami, najdete v tématu Vytvoření brány Azure Firewall s několika veřejnými IP adresami pomocí bicep.
Pomocí příkazu vytvořte standardní prostředek veřejné IP adresy skladové
az network public-ip create
položky. Tento prostředek se použije jako front-endová adresa služby Azure Firewall.az network public-ip create --resource-group $RG -n $FWPUBLICIP_NAME --location $LOC --sku "Standard"
Zaregistrujte rozšíření Rozhraní příkazového řádku služby Azure Firewall, abyste pomocí příkazu vytvořili bránu
az extension add
Azure Firewall.az extension add --name azure-firewall
Vytvořte bránu Azure Firewall a povolte proxy DNS pomocí
az network firewall create
příkazu a nastavte hodnotu .< a1true
/--enable-dns-proxy
>.az network firewall create --resource-group $RG --name $FWNAME --location $LOC --enable-dns-proxy true
Nastavení veřejné IP adresy pro službu Azure Firewall může trvat několik minut. Jakmile bude ip adresa vytvořená dříve, můžete ji přiřadit front-endu brány firewall.
Poznámka:
K využití plně kvalifikovaného názvu domény v pravidlech sítě potřebujeme povolený proxy server DNS. Pokud je povolený proxy server DNS, brána firewall naslouchá na portu 53 a předává požadavky DNS na server DNS uvedený výše. To umožňuje bráně firewall automaticky přeložit plně kvalifikovaný název domény.
Pomocí příkazu vytvořte konfiguraci
az network firewall ip-config create
PROTOKOLU IP služby Azure Firewall.az network firewall ip-config create --resource-group $RG --firewall-name $FWNAME --name $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Jakmile předchozí příkaz proběhne úspěšně, uložte ip adresu front-endu brány firewall pro pozdější konfiguraci.
FWPUBLIC_IP=$(az network public-ip show --resource-group $RG --name $FWPUBLICIP_NAME --query "ipAddress" -o tsv) FWPRIVATE_IP=$(az network firewall show --resource-group $RG --name $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
Poznámka:
Pokud používáte zabezpečený přístup k serveru rozhraní API AKS s autorizovanými rozsahy IP adres, musíte přidat veřejnou IP adresu brány firewall do autorizovaného rozsahu IP adres.
Vytvoření trasy s segmentem směrování do služby 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 výchozí směrování Azure, můžete vytvořit směrovací tabulku.
Důležité
Odchozí typ trasy definované uživatelem (userDefinedRouting
) vyžaduje trasu pro směrovací tabulku 0.0.0.0/0 a cíl dalšího segmentu směrování síťového virtuálního zařízení.
Směrovací tabulka už má výchozí hodnotu 0.0.0.0/0 na internet. Bez veřejné IP adresy, kterou Má Azure používat pro překlad zdrojových síťových adres (SNAT), jednoduše přidáním této trasy nebudete poskytovat odchozí připojení k internetu. AKS ověří, že nevytvoříte trasu 0.0.0.0/0 směřující na internet, ale místo brány, síťového virtuálního zařízení atd. Pokud používáte odchozí typ trasy definované uživatelem, veřejná IP adresa nástroje pro vyrovnávání zatížení pro příchozí požadavky se nevytvořila, pokud nenakonfigurujete službu nástroje pro vyrovnávání zatížení typu. AKS nikdy nevytváří veřejnou IP adresu pro odchozí požadavky , pokud nastavíte odchozí typ trasy definované uživatelem.
Další informace najdete v tématu Odchozí pravidla pro Azure Load Balancer.
Pomocí příkazu vytvořte prázdnou směrovací tabulku, která se má přidružit k dané podsíti
az network route-table create
. Směrovací tabulka definuje další segment směrování jako výše vytvořenou bránu Azure Firewall. Každá podsíť může mít přidruženou žádnou nebo jednu směrovací tabulku.az network route-table create --resource-group $RG --location $LOC --name $FWROUTE_TABLE_NAME
Pomocí příkazu vytvořte trasy v směrovací tabulce pro podsítě
az network route-table route create
.az network route-table route create --resource-group $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 --resource-group $RG --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet
Informace o přepsání výchozích systémových tras Azure nebo přidání dalších tras do směrovací tabulky podsítě najdete v dokumentaci ke směrovací tabulce virtuální sítě.
Přidání pravidel brány firewall
Poznámka:
Pro aplikace mimo obory názvů kube-system nebo gatekeeper-system, které potřebují komunikovat se serverem rozhraní API, je vyžadováno další pravidlo sítě, které povoluje komunikaci TCP na port 443 pro IP adresu serveru rozhraní API, kromě přidání pravidla aplikace pro fqdn-tag AzureKubernetesService
.
Tato část se věnuje třem síťovým pravidlům a pravidlu aplikace, které můžete použít ke konfiguraci brány firewall. Tato pravidla možná budete muset přizpůsobit na základě nasazení.
- První pravidlo sítě umožňuje přístup k portu 9000 přes protokol TCP.
- Druhé pravidlo sítě umožňuje přístup k portu 1194 a 123 přes UDP. Pokud nasazujete do Microsoft Azure provozovaného společností 21Vianet, podívejte se na pravidla sítě provozované společností 21Vianet. Obě tato pravidla umožní provoz určený pouze do CIDR oblasti Azure v tomto článku, což je USA – východ.
- Třetí síťové pravidlo otevře port 123 pro
ntp.ubuntu.com
plně kvalifikovaný název domény přes UDP. Přidání plně kvalifikovaného názvu domény jako pravidla sítě je jednou z konkrétních funkcí služby Azure Firewall, takže ho budete muset přizpůsobit při používání vlastních možností. - Čtvrtá a pátá pravidla sítě umožňují přístup k vyžádání kontejnerů z GitHub Container Registry (ghcr.io) a Docker Hubu (docker.io).
Vytvořte pravidla sítě pomocí
az network firewall network-rule create
příkazu.az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'ghcr' --protocols 'TCP' --source-addresses '*' --destination-fqdns ghcr.io pkg-containers.githubusercontent.com --destination-ports '443' az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'docker' --protocols 'TCP' --source-addresses '*' --destination-fqdns docker.io registry-1.docker.io production.cloudflare.docker.com --destination-ports '443'
Vytvořte pravidlo aplikace pomocí
az network firewall application-rule create
příkazu.az network firewall application-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwar' --name '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 ke službě Azure Firewall.
Přidružení směrovací tabulky k AKS
Pokud chcete cluster přidružit k bráně firewall, musí vyhrazená podsíť pro podsíť clusteru odkazovat na směrovací tabulku vytvořenou výše. az network vnet subnet update
Pomocí příkazu přidružte směrovací tabulku k AKS.
az network vnet subnet update --resource-group $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME
Nasazení clusteru AKS, který se řídí vašimi odchozími pravidly
Teď můžete nasadit cluster AKS do existující virtuální sítě. Použijete odchozí typ, který zajistí, že veškerý odchozí provoz bude vynucen přes bránu userDefinedRouting
firewall a nebudou existovat žádné jiné cesty pro odchozí přenosy. Typ loadBalancer
odchozích přenosů lze použít také.
Cílová podsíť, do které se má nasadit, je definována s proměnnou prostředí . $SUBNETID
Pomocí následujícího příkazu nastavte hodnotu ID podsítě:
SUBNETID=$(az network vnet subnet show --resource-group $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)
Definujete odchozí typ pro použití trasy definované uživatelem, který už 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í.
Tip
Do nasazení clusteru můžete přidat další funkce, například privátní clustery.
Můžete přidat funkci AKS pro rozsahy IP adres autorizovaných serverem rozhraní API, abyste omezili přístup k serveru API jenom na veřejný koncový bod brány firewall. Funkce autorizovaných rozsahů IP adres je v diagramu označená jako volitelná. Když povolíte funkci autorizovaného rozsahu IP adres k omezení přístupu k serveru API, musí vývojářské nástroje používat jumpbox z virtuální sítě brány firewall nebo musíte přidat všechny koncové body pro vývojáře do autorizovaného rozsahu IP adres.
- Vytvoření clusteru AKS s identitami přiřazenými systémem
- Vytvoření clusteru AKS s identitami přiřazenými uživatelem
Poznámka:
AKS vytvoří identitu kubeletu přiřazenou systémem ve skupině prostředků uzlu, pokud nezadáte vlastní spravovanou identitu kubeletu.
Pro uživatelem definované směrování podporuje identita přiřazená systémem pouze síťový modul plug-in CNI.
Pomocí příkazu vytvořte cluster AKS pomocí spravované identity přiřazené systémem pomocí síťového modulu plug-in az aks create
CNI.
az aks create --resource-group $RG --name $AKSNAME --location $LOC \
--node-count 3 \
--network-plugin azure \
--outbound-type userDefinedRouting \
--vnet-subnet-id $SUBNETID \
--api-server-authorized-ip-ranges $FWPUBLIC_IP \
--generate-ssh-keys
Povolení přístupu pro vývojáře k serveru rozhraní API
Pokud jste v předchozím kroku použili autorizované rozsahy IP adres pro váš cluster, musíte přidat IP adresy nástrojů pro vývojáře do seznamu schválených rozsahů IP adres clusteru AKS, abyste odtud měli přístup k serveru rozhraní API. Můžete také nakonfigurovat jumpbox s potřebnými nástroji uvnitř samostatné podsítě ve virtuální síti brány firewall.
Pomocí následujícího příkazu načtěte svoji IP adresu:
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
Přidejte IP adresu do schválených rozsahů pomocí
az aks update
příkazu.az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32
Nakonfigurujte
kubectl
připojení ke clusteru AKS pomocíaz aks get-credentials
příkazu.az aks get-credentials --resource-group $RG --name $AKSNAME
Nasazení veřejné služby v AKS
Teď můžete začít vytvářet služby a nasazovat aplikace do tohoto clusteru. V tomto příkladu zveřejníme veřejnou službu, ale můžete také chtít zpřístupnit interní službu pomocí interního nástroje pro vyrovnávání zatížení.
Projděte si manifest rychlého startu pro AKS Store a podívejte se na všechny prostředky, které se vytvoří.
Nasaďte službu pomocí
kubectl apply
příkazu.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-quickstart.yaml
Povolení příchozího provozu přes Azure Firewall
Důležité
Pokud pomocí služby Azure Firewall omezíte odchozí provoz a vytvoříte trasu definovanou uživatelem, která vynutí veškerý odchozí provoz, ujistěte se, že ve službě Azure Firewall vytvoříte odpovídající pravidlo DNAT, které správně povolí příchozí přenos dat. Použití služby Azure Firewall s trasou definovanou uživatelem přeruší nastavení příchozího přenosu dat kvůli asymetrickému směrování. K tomuto problému dochází, pokud má podsíť AKS výchozí trasu, která přejde na privátní IP adresu brány firewall, ale používáte veřejný nástroj pro vyrovnávání zatížení – příchozí přenos dat nebo službu Kubernetes typu loadBalancer
. V tomto případě se příchozí provoz nástroje pro vyrovnávání zatížení přijímá prostřednictvím své veřejné IP adresy, ale zpáteční cesta prochází privátní IP adresou brány firewall. Vzhledem k tomu, že je brána firewall stavová, zahodí vrácený paket, protože brána firewall neví o vytvořené relaci. Informace o integraci služby Azure Firewall s příchozím přenosem dat nebo nástrojem pro vyrovnávání zatížení služby najdete v tématu Integrace služby Azure Firewall se službou Azure Standard Load Balancer.
Pokud chcete nakonfigurovat příchozí připojení, musíte napsat pravidlo DNAT do služby Azure Firewall. K otestování připojení ke clusteru se definuje pravidlo pro front-endovou veřejnou IP adresu brány firewall, která bude směrovat na interní IP adresu vystavenou interní službou. Cílovou adresu je možné přizpůsobit. 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. Musíte také zadat interní IP adresu přiřazenou nástroji pro vyrovnávání zatížení vytvořené službou Kubernetes.
Pomocí příkazu získejte interní IP adresu přiřazenou nástroji pro vyrovnávání
kubectl get services
zatížení.kubectl get services
IP adresa bude uvedená ve
EXTERNAL-IP
sloupci, jak je znázorněno v následujícím příkladu výstupu:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 9m10s order-service ClusterIP 10.0.104.144 <none> 3000/TCP 11s product-service ClusterIP 10.0.237.60 <none> 3002/TCP 10s rabbitmq ClusterIP 10.0.161.128 <none> 5672/TCP,15672/TCP 11s store-front LoadBalancer 10.0.89.139 20.39.18.6 80:32271/TCP 10s
Pomocí příkazu získejte IP
kubectl get svc store-front
adresu služby.SERVICE_IP=$(kubectl get svc store-front -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
Přidejte pravidlo překladu adres (NAT)
az network firewall nat-rule create
pomocí příkazu.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 front-endovou IP adresu služby Azure Firewall a ověřte připojení.
Měla by se zobrazit aplikace AKS Store. V tomto příkladu byla 52.253.228.132
veřejná IP adresa brány firewall .
Na této stránce můžete zobrazit produkty, přidat je do košíku a pak zadat objednávku.
Vyčištění prostředků
Pokud chcete vyčistit prostředky Azure, odstraňte skupinu prostředků AKS pomocí az group delete
příkazu.
az group delete --name $RG
Další kroky
V tomto článku jste zjistili, jak zabezpečit odchozí provoz pomocí služby Azure Firewall. V případě potřeby můžete výše uvedené kroky zobecnit a směrovat provoz do upřednostňovaného řešení odchozího přenosu dat podle dokumentace k userDefinedRoute
typu odchozích přenosů.
Azure Kubernetes Service