HTTP-proxystöd i Azure Kubernetes Service (AKS)
I den här artikeln får du lära dig hur du konfigurerar AKS-kluster (Azure Kubernetes Service) för att använda en HTTP-proxy för utgående Internetåtkomst.
AKS-kluster som distribueras till hanterade eller anpassade virtuella nätverk har vissa utgående beroenden som är nödvändiga för att fungera korrekt, vilket skapade problem i miljöer som kräver att Internetåtkomst dirigeras via HTTP-proxyservrar. Noder hade inget sätt att starta konfigurationen, miljövariabler och certifikat som krävs för att få åtkomst till Internettjänster.
HTTP-proxyfunktionen lägger till HTTP-proxystöd till AKS-kluster, vilket exponerar ett enkelt gränssnitt som du kan använda för att skydda AKS-nödvändig nätverkstrafik i proxyberoende miljöer. Med den här funktionen konfigureras både AKS-noder och poddar för att använda HTTP-proxyn. Funktionen möjliggör även installation av en betrodd certifikatutfärdare på noderna som en del av start av ett kluster. Mer komplexa lösningar kan kräva att du skapar en förtroendekedja för att upprätta säker kommunikation i nätverket.
Begränsningar och överväganden
Följande scenarier stöds inte :
- Olika proxykonfigurationer per nodpool
- Användar-/lösenordsautentisering
- Anpassade certifikatutfärdare (CA) för API-serverkommunikation
- Det går inte att konfigurera befintliga AKS-kluster med en HTTP-proxy. HTTP-proxyfunktionen måste vara aktiverad när klustret skapas.
- Windows-baserade kluster
- Nodpooler med hjälp av VMAS (Virtual Machine Availability Sets)
- Använda * som jokertecken kopplat till ett domänsuffix för noProxy
httpProxy
, httpsProxy
och trustedCa
har inget värde som standard. Poddar matas in med följande miljövariabler:
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
NO_PROXY
no_proxy
Om du vill inaktivera inmatningen av proxymiljövariablerna måste du kommentera podden med "kubernetes.azure.com/no-http-proxy-vars":"true"
.
Innan du börjar
- Du behöver den senaste versionen av Azure CLI. Kör
az --version
för att hitta versionen och köraz upgrade
för att uppgradera versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. - Kontrollera om det finns tillgängliga AKS-klusteruppgraderingar för att se till att du kör den senaste versionen av AKS. Om du behöver uppgradera kan du läsa Uppgradera ett AKS-kluster.
- Os-filerna som krävs för proxykonfigurationsuppdateringar kan bara uppdateras under nodavbildningsuppgraderingsprocessen. När du har konfigurerat proxyn måste du uppgradera nodbilden för att tillämpa ändringarna. Mer information finns i Uppgradera AKS-nodbilder.
Konfigurera en HTTP-proxy med hjälp av Azure CLI
Du kan konfigurera ett AKS-kluster med en HTTP-proxy när klustret skapas med hjälp av az aks create
kommandot och skicka in konfigurationen som en JSON-fil.
Schemat för konfigurationsfilen ser ut så här:
{
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
httpProxy
: En proxy-URL som ska användas för att skapa HTTP-anslutningar utanför klustret. URL-schemat måste varahttp
.httpsProxy
: En proxy-URL som ska användas för att skapa HTTPS-anslutningar utanför klustret. Om det inte anges används dethttpProxy
för både HTTP- och HTTPS-anslutningar.noProxy
: En lista över måldomännamn, domäner, IP-adresser eller andra nätverks-CIDR:er för att undanta proxying.trustedCa
: En sträng som innehåller detbase64 encoded
alternativa CA-certifikatinnehållet. För närvarande stöds endastPEM
formatet.
Viktigt!
För kompatibilitet med Go-baserade komponenter som ingår i Kubernetes-systemet måste certifikatet ha stöd Subject Alternative Names(SANs)
i stället för de inaktuella certifikaten för vanliga namn.
Det finns skillnader i program om hur du följer miljövariabeln http_proxy
, https_proxy
och no_proxy
. Curl och Python stöder inte CIDR i no_proxy
, men Ruby gör det.
Exempel på indata:
Kommentar
CA-certifikatet ska vara den base64-kodade strängen för PEM-formatcertifikatinnehållet.
{
"httpProxy": "http://myproxy.server.com:8080/",
"httpsProxy": "https://myproxy.server.com:8080/",
"noProxy": [
"localhost",
"127.0.0.1"
],
"trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}
Skapa en fil och ange värden för httpProxy
, httpsProxy
och noProxy
. Om din miljö kräver det anger du ett värde för trustedCa
. Sedan kan du distribuera klustret med kommandot az aks create
med parametern --http-proxy-config
inställd på filen du skapade. Klustret bör initieras med HTTP-proxyn konfigurerad på noderna.
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--http-proxy-config aks-proxy-config.json \
--generate-ssh-keys
Konfigurera en HTTP-proxy med hjälp av en ARM-mall (Azure Resource Manager)
Du kan distribuera ett AKS-kluster med en HTTP-proxy med hjälp av en ARM-mall. Samma schema som används för CLI-distribution finns i Microsoft.ContainerService/managedClusters
definitionen under "properties"
, som du ser i följande exempel:
"properties": {
...,
"httpProxyConfig": {
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
}
I mallen anger du värden för httpProxy
, httpsProxy
och noProxy
. Om det behövs anger du ett värde för trustedCa
. Sedan kan du distribuera mallen. Klustret bör initieras med http-proxyn konfigurerad på noderna.
Http-proxy för Istio-tillägg för externa tjänster
Om du använder det Istio-baserade tjänstnättillägget för AKS måste du skapa en tjänstpost för att dina program i nätet ska få åtkomst till icke-kluster eller externa resurser via HTTP-proxyn. Till exempel:
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
Skapa en fil och ange värden för PROXY_IP
och PROXY_PORT
. Du kan distribuera tjänstposten med hjälp av
kubectl apply -f service_proxy.yaml
Uppdatera proxykonfiguration
Kommentar
Om du byter till en ny proxyserver måste den nya proxyn redan finnas för att uppdateringen ska lyckas. När uppgraderingen är klar kan du ta bort den gamla proxyn.
Du kan uppdatera proxykonfigurationen i klustret med az aks update
kommandot med parametern --http-proxy-config
inställd på en ny JSON-fil med uppdaterade värden för httpProxy
, httpsProxy
, noProxy
och trustedCa
vid behov. Uppdateringen matar in nya miljövariabler i poddar med de nya httpProxy
värdena , httpsProxy
eller noProxy
. Poddar måste roteras för att apparna ska kunna hämta dem, eftersom miljövariabelvärdena matas in av en muterande webhook för antagning. För komponenter under Kubernetes, som containerd och själva noden, börjar detta inte gälla förrän en nodavbildningsuppgradering har utförts.
Anta till exempel att du har skapat en ny fil med den base64-kodade strängen i det nya CA-certifikatet med namnet aks-proxy-config-2.json. Du kan uppdatera proxykonfigurationen i klustret med följande kommando:
az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
Uppgradera AKS-nodbilder
När du har konfigurerat proxyn måste du uppgradera nodbilden för att tillämpa ändringarna. Uppgraderingsprocessen för nodavbildningen är det enda sättet att uppdatera de OS-filer som krävs för proxykonfigurationsuppdateringar. Uppgraderingsprocessen för nodavbildningen är en löpande uppgradering som uppdaterar OS-avbildningen på varje nod i nodpoolen. AKS-kontrollplanet hanterar uppgraderingsprocessen, som inte är avbrottskänslig för program som körs.
Information om hur du uppgraderar AKS-nodbilder finns i Uppgradera AKS-nodbilder (Azure Kubernetes Service).
Övervaka tilläggskonfiguration
HTTP-proxy med övervakningstillägget stöder följande konfigurationer:
- Utgående proxy utan autentisering
- Utgående proxy med autentisering med användarnamn och lösenord
- Utgående proxy med betrott certifikat för Log Analytics-slutpunkt
Följande konfigurationer stöds inte:
- Anpassade mått och rekommenderade aviseringar när du använder en proxy med betrodda certifikat
Nästa steg
Mer information om nätverkskraven för AKS-kluster finns i Kontrollera utgående trafik för klusternoder i AKS.
Azure Kubernetes Service