Dela via


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, httpsProxyoch 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ör az 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 vara http.
  • httpsProxy: En proxy-URL som ska användas för att skapa HTTPS-anslutningar utanför klustret. Om det inte anges används det httpProxy 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 det base64 encoded alternativa CA-certifikatinnehållet. För närvarande stöds endast PEM 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_proxyoch 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, httpsProxyoch 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, httpsProxyoch 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, noProxyoch trustedCa vid behov. Uppdateringen matar in nya miljövariabler i poddar med de nya httpProxyvärdena , httpsProxyeller 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.