HTTP-proxyondersteuning in Azure Kubernetes Service (AKS)
In dit artikel leert u hoe u AKS-clusters (Azure Kubernetes Service) configureert voor het gebruik van een HTTP-proxy voor uitgaande internettoegang.
AKS-clusters die zijn geïmplementeerd in beheerde of aangepaste virtuele netwerken, hebben bepaalde uitgaande afhankelijkheden die nodig zijn om goed te functioneren, waardoor problemen zijn ontstaan in omgevingen waarvoor internettoegang moet worden gerouteerd via HTTP-proxy's. Knooppunten hadden geen manier om de configuratie, omgevingsvariabelen en certificaten op te starten die nodig zijn voor toegang tot internetservices.
De functie HTTP-proxy voegt HTTP-proxyondersteuning toe aan AKS-clusters, waardoor een eenvoudige interface beschikbaar is die u kunt gebruiken om AKS-vereist netwerkverkeer in proxyafhankelijke omgevingen te beveiligen. Met deze functie worden zowel AKS-knooppunten als pods geconfigureerd voor het gebruik van de HTTP-proxy. Met deze functie kunt u ook een vertrouwde certificeringsinstantie installeren op de knooppunten als onderdeel van het opstarten van een cluster. Complexere oplossingen vereisen mogelijk een vertrouwensketen om beveiligde communicatie in het netwerk tot stand te brengen.
Beperkingen en overwegingen
De volgende scenario's worden niet ondersteund:
- Verschillende proxyconfiguraties per knooppuntgroep
- Gebruikers-/wachtwoordverificatie
- Aangepaste certificeringsinstanties (CA's) voor communicatie tussen API-servers
- Het configureren van bestaande AKS-clusters met een HTTP-proxy wordt niet ondersteund; de HTTP-proxyfunctie moet zijn ingeschakeld tijdens het maken van het cluster.
- Windows-clusters
- Knooppuntgroepen met beschikbaarheidssets voor virtuele machines (VMAS)
- * gebruiken als jokerteken dat is gekoppeld aan een domeinachtervoegsel voor noProxy
httpProxy
, httpsProxy
en trustedCa
standaard geen waarde hebben. Pods worden geïnjecteerd met de volgende omgevingsvariabelen:
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
NO_PROXY
no_proxy
Als u de injectie van de proxyomgevingsvariabelen wilt uitschakelen, moet u aantekeningen toevoegen aan de Pod met "kubernetes.azure.com/no-http-proxy-vars":"true"
.
Voordat u begint
- U hebt de nieuwste versie van de Azure CLI nodig. Voer
az --version
deze uit om de versie te vinden en voer deze uitaz upgrade
om de versie te upgraden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. - Controleer op beschikbare AKS-clusterupgrades om ervoor te zorgen dat u de nieuwste versie van AKS uitvoert. Zie Een AKS-cluster upgraden als u een upgrade wilt uitvoeren.
- De besturingssysteembestanden die vereist zijn voor proxyconfiguratie-updates kunnen alleen worden bijgewerkt tijdens het upgradeproces van de knooppuntinstallatiekopieën. Nadat u de proxy hebt geconfigureerd, moet u de knooppuntinstallatiekopieën upgraden om de wijzigingen toe te passen. Zie AKS-knooppuntinstallatiekopieën upgraden voor meer informatie.
Een HTTP-proxy configureren met behulp van de Azure CLI
U kunt een AKS-cluster configureren met een HTTP-proxy tijdens het maken van het cluster met behulp van de az aks create
opdracht en de configuratie doorgeven als een JSON-bestand.
Het schema voor het configuratiebestand ziet er als volgt uit:
{
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
httpProxy
: Een proxy-URL die moet worden gebruikt voor het maken van HTTP-verbindingen buiten het cluster. Het URL-schema moet zijnhttp
.httpsProxy
: Een proxy-URL die moet worden gebruikt voor het maken van HTTPS-verbindingen buiten het cluster. Als dit niet is opgegeven, wordt dezehttpProxy
gebruikt voor zowel HTTP- als HTTPS-verbindingen.noProxy
: Een lijst met doeldomeinnamen, domeinen, IP-adressen of andere netwerk-CIDR's om proxying uit te sluiten.trustedCa
: Een tekenreeks die de inhoud van hetbase64 encoded
alternatieve CA-certificaat bevat. Momenteel wordt alleen dePEM
indeling ondersteund.
Belangrijk
Voor compatibiliteit met op Go gebaseerde onderdelen die deel uitmaken van het Kubernetes-systeem, moet het certificaat ondersteuning bieden Subject Alternative Names(SANs)
in plaats van de afgeschafte algemene naamcertificaten.
Er zijn verschillen in toepassingen over het voldoen aan de omgevingsvariabele http_proxy
, https_proxy
en no_proxy
. Curl en Python bieden geen ondersteuning voor CIDR in no_proxy
, maar Ruby wel.
Voorbeeldinvoer:
Notitie
Het CA-certificaat moet de base64-gecodeerde tekenreeks van de certificaatinhoud van de PEM-indeling zijn.
{
"httpProxy": "http://myproxy.server.com:8080/",
"httpsProxy": "https://myproxy.server.com:8080/",
"noProxy": [
"localhost",
"127.0.0.1"
],
"trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}
Maak een bestand en geef waarden op voor httpProxy
, httpsProxy
en noProxy
. Als uw omgeving dit vereist, geeft u een waarde op voor trustedCa
. Vervolgens kunt u het cluster implementeren met behulp van de az aks create
opdracht met de --http-proxy-config
parameter die is ingesteld op het bestand dat u hebt gemaakt. Uw cluster moet worden geïnitialiseerd met de HTTP-proxy die is geconfigureerd op de knooppunten.
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--http-proxy-config aks-proxy-config.json \
--generate-ssh-keys
Een HTTP-proxy configureren met behulp van een ARM-sjabloon (Azure Resource Manager)
U kunt een AKS-cluster implementeren met een HTTP-proxy met behulp van een ARM-sjabloon. Hetzelfde schema dat wordt gebruikt voor CLI-implementatie, bestaat in de Microsoft.ContainerService/managedClusters
definitie onder "properties"
, zoals wordt weergegeven in het volgende voorbeeld:
"properties": {
...,
"httpProxyConfig": {
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
}
Geef in uw sjabloon waarden op voor httpProxy
, httpsProxy
en noProxy
. Geef indien nodig een waarde op voor trustedCa
. Vervolgens kunt u de sjabloon implementeren. Uw cluster moet worden geïnitialiseerd met uw HTTP-proxy die is geconfigureerd op de knooppunten.
Istio-invoegtoepassing HTTP-proxy voor externe services
Als u de op Istio gebaseerde service-mesh-invoegtoepassing voor AKS gebruikt, moet u een servicevermelding maken om uw toepassingen in de mesh toegang te geven tot niet-cluster- of externe resources via de HTTP-proxy. Voorbeeld:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: proxy
spec:
hosts:
- my-company-proxy.com # ignored
addresses:
- $PROXY_IP/32
ports:
- number: $PROXY_PORT
name: tcp
protocol: TCP
location: MESH_EXTERNAL
Maak een bestand en geef waarden op voor PROXY_IP
en PROXY_PORT
. U kunt de servicevermelding implementeren met behulp van
kubectl apply -f service_proxy.yaml
Proxyconfiguratie bijwerken
Notitie
Als u overschakelt naar een nieuwe proxy, moet de nieuwe proxy al bestaan om de update te laten slagen. Nadat de upgrade is voltooid, kunt u de oude proxy verwijderen.
U kunt de proxyconfiguratie op uw cluster bijwerken met behulp van de az aks update
opdracht waarbij de --http-proxy-config
parameter is ingesteld op een nieuw JSON-bestand met bijgewerkte waarden voorhttpProxy
, httpsProxy
noProxy
en trustedCa
indien nodig. De update injecteert nieuwe omgevingsvariabelen in pods met de nieuwe httpProxy
, httpsProxy
of noProxy
waarden. Pods moeten worden geroteerd om de apps op te halen, omdat de omgevingsvariabelewaarden worden geïnjecteerd door een muterende toegangswebhook. Voor onderdelen onder Kubernetes, zoals container en het knooppunt zelf, wordt dit pas van kracht nadat een upgrade van de knooppuntinstallatiekopieën is uitgevoerd.
Stel dat u een nieuw bestand hebt gemaakt met de base64-gecodeerde tekenreeks van het nieuwe CA-certificaat met de naam aks-proxy-config-2.json. U kunt de proxyconfiguratie op uw cluster bijwerken met de volgende opdracht:
az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
AKS-knooppuntinstallatiekopieën upgraden
Nadat u de proxy hebt geconfigureerd, moet u de knooppuntinstallatiekopieën upgraden om de wijzigingen toe te passen. Het upgradeproces voor knooppuntinstallatiekopieën is de enige manier om de besturingssysteembestanden bij te werken die nodig zijn voor proxyconfiguratie-updates. Het upgradeproces voor knooppuntinstallatiekopieën is een rolling upgrade waarmee de installatiekopieën van het besturingssysteem op elk knooppunt in de knooppuntgroep worden bijgewerkt. Het AKS-besturingsvlak verwerkt het upgradeproces, dat niet kan worden uitgevoerd voor het uitvoeren van toepassingen.
Zie AKS-knooppuntinstallatiekopieën upgraden om AKS-knooppuntinstallatiekopieën (Azure Kubernetes Service) bij te werken.
Configuratie van invoegtoepassing bewaken
HTTP-proxy met de bewakingsinvoegtoepassing ondersteunt de volgende configuraties:
- Uitgaande proxy zonder verificatie
- Uitgaande proxy met gebruikersnaam en wachtwoordverificatie
- Uitgaande proxy met vertrouwd certificaat voor Log Analytics-eindpunt
De volgende configuraties worden niet ondersteund:
- Functies voor aangepaste metrische gegevens en aanbevolen waarschuwingen bij het gebruik van een proxy met vertrouwde certificaten
Volgende stappen
Zie Uitgaand verkeer voor clusterknooppunten in AKS beheren voor meer informatie over de netwerkvereisten van AKS-clusters.
Azure Kubernetes Service