Hálózati forgalom korlátozása az Azure Firewall használatával az Azure Kubernetes Service-ben (AKS)
Megtudhatja, hogyan vezérelheti a kimenő forgalmat az AKS-fürtök kimenő hálózati és teljes tartománynév-szabályaival az Azure Firewall használatával az AKS-ben. A konfiguráció egyszerűsítése érdekében az Azure Firewall az Azure Kubernetes Service () Teljes tartománynév (AzureKubernetesService
FQDN) címkét biztosítja, amely korlátozza az AKS-fürt kimenő forgalmát. Ez a cikk bemutatja, hogyan konfigurálhatja az AKS-fürt forgalmi szabályait az Azure-tűzfalon keresztül.
Feljegyzés
Az FQDN-címke tartalmazza az AKS-fürtök kimenő hálózati és FQDN-szabályaiban felsorolt összes teljes tartománynevet, és automatikusan frissül.
Éles helyzetekben azt javasoljuk, hogy az SNAT-portok kimerülési problémáinak elkerülése érdekében legalább 20 előtérbeli IP-címet használjon az Azure Firewallon.
Az alábbi információk egy példaarchitektúrát nyújtanak az üzembe helyezéshez:
- A nyilvános bejövő forgalom tűzfalszűrőkön keresztül áramlik
- Az AKS-ügynökcsomópontok egy dedikált alhálózatban vannak elkülönítve
- Az Azure Firewall a saját alhálózatán van üzembe helyezve
- A DNST-szabály lefordítja a tűzfal nyilvános IP-címét a terheléselosztó előtérbeli IP-címére
- A kimenő kérések az ügynökcsomópontokról indulnak az Azure Firewall belső IP-címére egy felhasználó által megadott útvonal (UDR) használatával
- Az AKS-ügynökcsomópontoktól érkező kérések egy UDR-t követnek, amelyet az AKS-fürt azon alhálózatán helyeztek el, amelybe az AKS-fürtöt telepítették
- Az Azure Firewall egy nyilvános IP-címelőtérről lép ki a virtuális hálózatból
- A nyilvános internethez vagy más Azure-szolgáltatásokhoz való hozzáférés a tűzfal előtérbeli IP-címére és onnan áramlik
- Az AKS vezérlősíkhoz való hozzáférést api-kiszolgáló által engedélyezett IP-tartományok védhetik, beleértve a tűzfal nyilvános előtérbeli IP-címét is
- Belső forgalom
- Belső terheléselosztót használhat a belső forgalomhoz, amelyet elkülöníthet a saját alhálózatán a nyilvános terheléselosztó helyett vagy mellett
Környezeti változók konfigurálása
Az erőforrás-létrehozásokban használandó környezeti változók halmazának meghatározása.
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"
Több alhálózattal rendelkező virtuális hálózat létrehozása
Virtuális hálózat kiépítése két külön alhálózattal: egy a fürthöz és egy a tűzfalhoz. Igény szerint létrehozhat egyet a belső szolgáltatásbejárathoz.
Hozzon létre egy erőforráscsoportot a
az group create
paranccsal.az group create --name $RG --location $LOC
Hozzon létre egy virtuális hálózatot két alhálózattal az AKS-fürt és az Azure Firewall üzemeltetéséhez a parancsok és
az network vnet subnet create
aaz network vnet create
parancsok használatával.# 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
Azure Firewall létrehozása és beállítása
Konfigurálnia kell az Azure Firewall bejövő és kimenő szabályait. A tűzfal fő célja, hogy lehetővé tegye a szervezetek számára, hogy részletes bejövő és kimenő forgalmi szabályokat konfiguráljanak az AKS-fürtbe és onnan kifelé.
Fontos
Ha a fürt vagy alkalmazás nagy számú kimenő kapcsolatot hoz létre ugyanahhoz vagy a célhelyek egy kis részhalmazához, előfordulhat, hogy több tűzfalelőtéri IP-címre van szükség, hogy elkerülje a portok előtér-IP-címenkénti maximális számát.
További információ az Azure Firewall több IP-címmel való létrehozásáról: Azure Firewall létrehozása több nyilvános IP-címmel a Bicep használatával.
Hozzon létre egy szabványos nyilvános termékváltozatú IP-erőforrást a
az network public-ip create
paranccsal. Ezt az erőforrást fogja használni az Azure Firewall előtérbeli címeként.az network public-ip create --resource-group $RG -n $FWPUBLICIP_NAME --location $LOC --sku "Standard"
Regisztrálja az Azure Firewall CLI-bővítményt az Azure Firewall parancs használatával
az extension add
történő létrehozásához.az extension add --name azure-firewall
Hozzon létre egy Azure Firewall-t, és engedélyezze a DNS-proxyt a
az network firewall create
parancs használatával, és állítsa a--enable-dns-proxy
következőretrue
: .az network firewall create --resource-group $RG --name $FWNAME --location $LOC --enable-dns-proxy true
A nyilvános IP-cím Azure Firewallra való beállítása eltarthat néhány percig. Ha elkészült, a korábban létrehozott IP-cím hozzárendelhető a tűzfal előtéréhez.
Feljegyzés
A teljes tartománynév hálózati szabályokon való használatához engedélyezni kell a DNS-proxyt. Ha engedélyezve van a DNS-proxy, a tűzfal figyeli az 53-at, és továbbítja a DNS-kéréseket a fent megadott DNS-kiszolgálónak. Ez lehetővé teszi, hogy a tűzfal automatikusan lefordítsa a teljes tartománynevet.
Hozzon létre egy Azure Firewall IP-konfigurációt a
az network firewall ip-config create
paranccsal.az network firewall ip-config create --resource-group $RG --firewall-name $FWNAME --name $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Az előző parancs sikeres végrehajtása után mentse a tűzfal előtér-IP-címét később a konfigurációhoz.
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)
Feljegyzés
Ha biztonságos hozzáférést használ az engedélyezett IP-címtartományokkal rendelkező AKS API-kiszolgálóhoz, hozzá kell adnia a tűzfal nyilvános IP-címét az engedélyezett IP-címtartományhoz.
Útvonal létrehozása ugrással az Azure Firewallra
Az Azure automatikusan irányítja a forgalmat az Azure-alhálózatok, a virtuális hálózatok és a helyszíni hálózatok között. Ha módosítani szeretné az Azure egyik alapértelmezett útválasztását, létrehozhat egy útvonaltáblát.
Fontos
A kimenő UDR-típushoz (userDefinedRouting
) a 0.0.0.0/0 útvonalra és az NVA következő ugrási céljára van szükség az útvonaltáblában.
Az útvonaltáblának már van alapértelmezett 0.0.0.0/0 értéke az internetre. Ha az Azure nem rendelkezik nyilvános IP-címmel a forráshálózati címfordításhoz (SNAT), az útvonal hozzáadása nem biztosít kimenő internetkapcsolatot. Az AKS ellenőrzi, hogy nem az internetre mutató 0.0.0.0/0-s útvonalat hoz létre, hanem átjáróra, NVA-ra stb. Kimenő UDR-típus használatakor a rendszer nem hoz létre terheléselosztó nyilvános IP-címet a bejövő kérésekhez, hacsak nem konfigurál egy loadbalancer típusú szolgáltatást. Az AKS soha nem hoz létre nyilvános IP-címet a kimenő kérésekhez , ha kimenő típusú UDR-t állít be.
További információ: Az Azure Load Balancer kimenő szabályai.
Hozzon létre egy üres útvonaltáblát egy adott alhálózathoz a
az network route-table create
parancs használatával. Az útvonaltábla a következő ugrást a fent létrehozott Azure Firewallként határozza meg. Mindegyik alhálózattal nulla vagy egy útvonaltábla társítható.az network route-table create --resource-group $RG --location $LOC --name $FWROUTE_TABLE_NAME
Hozzon létre útvonalakat az alhálózatok útvonaltáblájában a
az network route-table route create
paranccsal.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
Az Azure alapértelmezett rendszerútvonalainak felülbírálásával vagy további útvonalak alhálózati útvonaltáblához való hozzáadásával kapcsolatos információkért tekintse meg a virtuális hálózat útvonaltáblájának dokumentációját.
Tűzfalszabályok hozzáadása
Feljegyzés
A kube-rendszeren vagy a gatekeeper-system névtéren kívüli alkalmazások esetében, amelyeknek az API-kiszolgálóval kell beszélni, egy további hálózati szabályra van szükség, amely lehetővé teszi a TCP-kommunikációt a 443-es porton az API-kiszolgáló IP-címéhez, valamint az fqdn-tag AzureKubernetesService
alkalmazásszabályának hozzáadásához.
Ez a szakasz három hálózati szabályt és egy, a tűzfalon konfigurálható alkalmazásszabályt ismerteti. Előfordulhat, hogy ezeket a szabályokat az üzembe helyezés alapján kell módosítania.
- Az első hálózati szabály lehetővé teszi a 9000-s port tcp-en keresztüli elérését.
- A második hálózati szabály lehetővé teszi az 1194- és 123-as port elérését UDP-en keresztül. Ha a 21Vianet által üzemeltetett Microsoft Azure-ban végzi az üzembe helyezést, tekintse meg a 21Vianet által előírt hálózati szabályok által üzemeltetett Azure-t. Mindkét szabály csak az Azure Region CIDR felé irányuló forgalmat engedélyezi ebben a cikkben, amely az USA keleti régiója.
- A harmadik hálózati szabály megnyitja a 123-es portot az
ntp.ubuntu.com
FQDN felé az UDP-n keresztül. A teljes tartománynév hálózati szabályként való hozzáadása az Azure Firewall egyik sajátos funkciója, ezért a saját beállításainak használatakor hozzá kell igazítania. - A negyedik és ötödik hálózati szabály lehetővé teszi a tárolók lekérését a GitHub Container Registryből (ghcr.io) és a Docker Hubból (docker.io).
Hozza létre a hálózati szabályokat a
az network firewall network-rule create
paranccsal.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'
Hozza létre az alkalmazásszabályt a
az network firewall application-rule create
paranccsal.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
Az Azure Firewallról további információt az Azure Firewall dokumentációjában talál.
Útvonaltábla társítása az AKS-hez
A fürt tűzfalhoz való társításához a fürt alhálózatához tartozó dedikált alhálózatnak hivatkoznia kell a fent létrehozott útvonaltáblára. az network vnet subnet update
A parancs használatával társíthatja az útvonaltáblát az AKS-hez.
az network vnet subnet update --resource-group $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME
A kimenő szabályokat követő AKS-fürt üzembe helyezése
Most üzembe helyezhet egy AKS-fürtöt a meglévő virtuális hálózaton. A kimenő típust userDefinedRouting
fogja használni, amely biztosítja, hogy a kimenő forgalom a tűzfalon keresztül legyen kényszerítve, és nem lesznek más kimenő útvonalak. A loadBalancer
kimenő típus is használható.
A üzembe helyezendő célalhálózatot a környezeti változó határozza meg. $SUBNETID
Állítsa be az alhálózat-azonosító értékét a következő paranccsal:
SUBNETID=$(az network vnet subnet show --resource-group $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)
Meg fogja határozni a kimenő típust az alhálózaton már létező UDR használatához. Ez a konfiguráció lehetővé teszi, hogy az AKS kihagyja a terheléselosztó beállítását és IP-kiépítését.
Tipp.
A fürt üzembe helyezéséhez további funkciókat is hozzáadhat, például privát fürtöket.
Hozzáadhatja az API-kiszolgáló által engedélyezett IP-tartományok AKS-funkcióját, hogy az API-kiszolgáló hozzáférése csak a tűzfal nyilvános végpontjára legyen korlátozva. Az engedélyezett IP-tartományok funkció a diagramban választhatóként van jelölve. Ha engedélyezi az engedélyezett IP-címtartomány-funkciót az API-kiszolgáló hozzáférésének korlátozásához, a fejlesztői eszközöknek a tűzfal virtuális hálózatából származó jumpboxot kell használniuk, vagy hozzá kell adnia az összes fejlesztői végpontot az engedélyezett IP-tartományhoz.
- AKS-fürt létrehozása rendszer által hozzárendelt identitásokkal
- AKS-fürt létrehozása felhasználó által hozzárendelt identitásokkal
Feljegyzés
Az AKS rendszer által hozzárendelt kubelet-identitást hoz létre a csomópont erőforráscsoportjában, ha nem adja meg a saját kubelet felügyelt identitását.
Felhasználó által definiált útválasztás esetén a rendszer által hozzárendelt identitás csak a CNI hálózati beépülő modult támogatja.
Hozzon létre egy AKS-fürtöt egy rendszer által hozzárendelt felügyelt identitással a CNI hálózati beépülő modullal a az aks create
parancs használatával.
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
Fejlesztői hozzáférés engedélyezése az API-kiszolgálóhoz
Ha az előző lépésben engedélyezett IP-tartományokat használt a fürthöz, hozzá kell adnia a fejlesztői eszköz IP-címeit a jóváhagyott IP-tartományok AKS-fürtlistájához, hogy onnan hozzáférjen az API-kiszolgálóhoz. A jumpboxot a tűzfal virtuális hálózatának egy külön alhálózatán belül is konfigurálhatja a szükséges eszközökkel.
Az IP-cím lekérése a következő paranccsal:
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
Adja hozzá az IP-címet a jóváhagyott tartományokhoz a
az aks update
paranccsal.az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32
Konfigurálja
kubectl
az AKS-fürthöz való csatlakozást aaz aks get-credentials
paranccsal.az aks get-credentials --resource-group $RG --name $AKSNAME
Közszolgáltatás üzembe helyezése az AKS-ben
Mostantól megkezdheti a szolgáltatások felfedését és az alkalmazások üzembe helyezését ebben a fürtben. Ebben a példában közzé fogunk tenni egy közszolgáltatást, de érdemes lehet egy belső szolgáltatást egy belső terheléselosztóval is elérhetővé tenni.
Tekintse át az AKS Áruház bemutatójának rövid útmutatóját , amely az összes létrehozandó erőforrás megtekintéséhez szükséges.
Telepítse a szolgáltatást a
kubectl apply
paranccsal.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-quickstart.yaml
Bejövő forgalom engedélyezése az Azure Firewallon keresztül
Fontos
Ha az Azure Firewall használatával korlátozza a kimenő forgalmat, és létrehoz egy UDR-t az összes kimenő forgalom kényszerítéséhez, győződjön meg arról, hogy megfelelő DNST-szabályt hoz létre az Azure Firewallban a bejövő forgalom megfelelő engedélyezéséhez. Az Azure Firewall UDR-vel való használata megszakítja a bejövő forgalom beállítását az aszimmetrikus útválasztás miatt. A probléma akkor fordul elő, ha az AKS-alhálózat alapértelmezett útvonala a tűzfal privát IP-címére kerül, de nyilvános terheléselosztót használ – bejövő vagy Kubernetes típusú szolgáltatást loadBalancer
. Ebben az esetben a bejövő terheléselosztó-forgalom a nyilvános IP-címén keresztül érkezik, de a visszatérési útvonal a tűzfal magánhálózati IP-címén halad át. Mivel a tűzfal állapotalapú, a visszaadott csomagot elveti, mert a tűzfal nem tud egy már létrehozott munkamenetről. Ha tudni szeretné, hogyan integrálhatja az Azure Firewallt a bejövő vagy szolgáltatás terheléselosztójával, olvassa el az Azure Firewall integrálása az Azure Standard Load Balancerrel című témakört.
A bejövő kapcsolatok konfigurálásához meg kell írnia egy DNST-szabályt az Azure Firewallba. A fürthöz való kapcsolódás teszteléséhez a tűzfal előtérbeli nyilvános IP-címére egy szabály van meghatározva, amely a belső szolgáltatás által közzétett belső IP-címre irányít. A célcím testre szabható. A lefordított címnek a belső terheléselosztó IP-címének kell lennie. A lefordított portnak a Kubernetes-szolgáltatás közzétett portjának kell lennie. Meg kell adnia a Kubernetes szolgáltatás által létrehozott terheléselosztóhoz rendelt belső IP-címet is.
Kérje le a terheléselosztóhoz rendelt belső IP-címet a
kubectl get services
paranccsal.kubectl get services
Az IP-cím megjelenik az
EXTERNAL-IP
oszlopban, ahogy az a következő példakimenetben is látható: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
Kérje le a szolgáltatás IP-címét a
kubectl get svc store-front
parancs használatával.SERVICE_IP=$(kubectl get svc store-front -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
Adja hozzá a NAT-szabályt a
az network firewall nat-rule create
paranccsal.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
A kapcsolat ellenőrzése
Lépjen az Azure Firewall előtérbeli IP-címére egy böngészőben a kapcsolat ellenőrzéséhez.
Meg kell jelennie az AKS áruházbeli alkalmazásnak. Ebben a példában a tűzfal nyilvános IP-címe volt 52.253.228.132
.
Ezen az oldalon megtekintheti a termékeket, hozzáadhatja őket a kosárhoz, majd megrendelheti őket.
Az erőforrások eltávolítása
Az Azure-erőforrások törléséhez törölje az AKS-erőforráscsoportot a az group delete
paranccsal.
az group delete --name $RG
Következő lépések
Ebben a cikkben megtanulta, hogyan védheti meg a kimenő forgalmat az Azure Firewall használatával. Szükség esetén általánosíthatja a fenti lépéseket, hogy a forgalmat a kimenő típus userDefinedRoute
dokumentációját követve továbbítsa az előnyben részesített kimenő megoldásnak.
Azure Kubernetes Service