Podpora proxy serveru HTTP v Azure Kubernetes Service (AKS)

V tomto článku se dozvíte, jak nakonfigurovat Azure Kubernetes Service (AKS) clustery tak, aby používaly proxy server HTTP pro odchozí přístup k internetu.

Klastry AKS nasazené do spravovaných nebo vlastních virtuálních sítí mají určité závislosti na odchozích připojeních, které jsou nezbytné pro správnou funkci. To způsobilo problémy v prostředích, kde je přístup k internetu směrován přes HTTP proxy servery. Uzly neměly žádný způsob, jak inicializovat konfiguraci, proměnné prostředí a certifikáty potřebné pro přístup k internetovým službám.

Funkce HTTP proxy přidává podporu HTTP proxy klastrům AKS a odhaluje jednoduché rozhraní, které můžete použít k zabezpečení sítě vyžadované AKS v prostředích závislých na proxy. Díky této funkci jsou jak AKS uzly, tak i pody nakonfigurovány tak, aby používaly HTTP proxy. Funkce také umožňuje instalaci důvěryhodné certifikační autority na uzly jako součást inicializace clusteru. Komplexnější řešení mohou vyžadovat vytvoření řetězce důvěry pro zajištění bezpečné komunikace v celé síti.

Omezení a úvahy

Následující scénáře nejsou podporovány:

  • Různé konfigurace proxy pro jednotlivé fondy uzlů
  • Autentizace uživatele/hesla
  • Vlastní certifikační autority (CA) pro komunikaci se serverem API
  • Není možné zadat více než 20 certifikátů důvěryhodné certifikační autority.
  • Clustery AKS s uzlovými fondy Windows
  • Pooly uzlů používající sady dostupnosti virtuálních strojů (VMAS)
  • Použití * jako zástupného znaku připojeného k příponě domény pro noProxy
  • Hostitelé noProxy musí být kompatibilní se standardem RFC 1123.

httpProxy, httpsProxy a trustedCa nemají ve výchozím nastavení žádnou hodnotu. Podům jsou přidány následující proměnné prostředí:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

Pro zakázání injektování proměnných prostředí proxy musíte anotovat Pod pomocí "kubernetes.azure.com/no-http-proxy-vars":"true".

Než začnete

  • Zakázání proxy serveru HTTP vyžaduje minimální verzi rozhraní příkazového řádku 2.85.0.

Vytvoření konfiguračního souboru s hodnotami proxy serveru HTTP

Vytvořte soubor a zadejte hodnoty pro httpProxy, httpsProxy, a noProxy. Pokud to vaše prostředí vyžaduje, zadejte hodnotu pro trustedCa.

Schéma konfiguračního souboru vypadá takto:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}

Zkontrolujte požadavky pro každý parametr:

  • httpProxy: Proxy URL, který se používá k vytváření HTTP připojení mimo cluster. Schéma URL musí být http.
  • httpsProxy: Proxy URL k použití pro vytváření HTTPS připojení mimo clusteru. Pokud není uvedeno jinak, pak je httpProxy použit pro obě připojení HTTP a HTTPS.
  • noProxy: Seznam cílových doménových jmen, domén, IP adres nebo jiných síťových CIDR, které se mají vyloučit z proxy.
  • trustedCa: Řetězec obsahující alternativní obsah certifikátu CA base64 encoded. Aktuálně je podporován pouze formát PEM. Limit 20 certifikátů

Důležité

Pro zajištění kompatibility s komponentami založenými na Go, které jsou součástí systému Kubernetes, musí certifikát podporovat namísto zastaralých certifikátů "Common Name".

V aplikacích existují rozdíly v tom, jak plnit podmínky proměnné prostředí http_proxy, https_proxy a no_proxy. Curl a Python nepodporují CIDR v no_proxy, ale Ruby to dělá.

Příklad vstupu:

{
  "httpProxy": "http://myproxy.server.com:8080", 
  "httpsProxy": "https://myproxy.server.com:8080", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
    "trustedCa": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...S0tLS0="
}

Vytvoření clusteru s konfigurací proxy serveru HTTP pomocí Azure CLI

Během vytváření clusteru můžete nakonfigurovat cluster AKS s konfigurací proxy serveru HTTP.

  1. az aks create Použijte příkaz a předejte konfiguraci jako soubor JSON.

    az aks create \
        --name $clusterName \
        --resource-group $resourceGroup \
        --http-proxy-config aks-proxy-config.json \
        --generate-ssh-keys
    

    Váš cluster by měl být inicializován s konfigurací HTTP proxy na uzlech.

  2. Ověřte, že konfigurace proxy serveru HTTP je na podech a uzlech. Zkontrolujte, jestli proměnné prostředí obsahují odpovídající hodnoty pro http_proxy, https_proxya no_proxy pomocí kubectl describe pod příkazu.

    kubectl describe {any pod} -n kube-system
    

    Pokud chcete ověřit, že jsou proxy proměnné nastaveny v podech, můžete zkontrolovat proměnné prostředí, které se nacházejí na uzlech.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Aktualizace konfigurace proxy serveru HTTP

Konfigurace proxy serveru HTTP můžete aktualizovat v existujících clusterech, včetně následujících:

  • Aktualizace existujícího clusteru za účelem povolení proxy serveru HTTP a přidání nové konfigurace proxy serveru HTTP
  • Aktualizace existujícího clusteru za účelem změny konfigurace proxy serveru HTTP

Důležité informace o aktualizaci proxy serveru HTTP

Parametr --http-proxy-config by měl být nastaven na nový soubor JSON s aktualizovanými hodnotami pro httpProxy, httpsProxynoProxya trustedCa v případě potřeby. Aktualizace vkládá nové proměnné prostředí do kontejnerů s novými hodnotami httpProxy, httpsProxy nebo noProxy. Pody musí být restartovány, aby to aplikace zachytily, protože hodnoty proměnných prostředí jsou vloženy pomocí mutujícího přijímacího webhooku.

Poznámka

Pokud dochází k přepnutí na nový proxy server, nový proxy server musí již existovat, aby aktualizace byla úspěšná. Po dokončení upgradu můžete smazat starý proxy server.

Aktualizace clusteru pro aktualizaci nebo povolení proxy serveru HTTP

  1. Pomocí příkazu povolte nebo aktualizujte konfigurace proxy serveru HTTP v existujícím clusteru az aks update .

    Například řekněme, že jste vytvořili nový soubor se základním 64 kódovaným řetězcem nového certifikátu CA nazvaný aks-proxy-config-2.json. Můžete aktualizovat konfiguraci proxy ve vašem clusteru pomocí následujícího příkazu:

    az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
    

Upozornění

AKS automaticky znovu vytvoří všechny fondy uzlů v clusteru, když v něm provádíte aktualizaci konfigurace proxy serveru pomocí příkazu az aks update. Rozpočty přerušení podů (PDB) můžete použít k ochraně kritických podů před narušením během přeinstalování.

  1. Ověřte, že konfigurace proxy serveru HTTP je na podech a uzlech. Zkontrolujte, jestli proměnné prostředí obsahují odpovídající hodnoty pro http_proxy, https_proxya no_proxy pomocí kubectl describe pod příkazu.

    kubectl describe {any pod} -n kube-system
    

    Pokud chcete ověřit, že jsou proxy proměnné nastaveny v podech, můžete zkontrolovat proměnné prostředí, které se nacházejí na uzlech.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Zakázání proxy serveru HTTP v existujícím clusteru

Aktualizace clusteru pro zakázání proxy serveru HTTP

  1. Aktualizujte cluster a zakažte proxy server HTTP pomocí příkazu s příznakem az aks update--disable-http-proxy .

    az aks update --name $clusterName --resource-group $resourceGroup --disable-http-proxy
    

Upozornění

AKS automaticky znovu vytvoří všechny fondy uzlů v clusteru, když v něm provádíte aktualizaci konfigurace proxy serveru pomocí příkazu az aks update. Rozpočty přerušení podů (PDB) můžete použít k ochraně kritických podů před narušením během přeinstalování.

  1. Ověřte, že je HTTP proxy zakázán tak, že zkontrolujete, zda konfigurace HTTP proxy není nastavená na podech a uzlech pomocí příkazu kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Chcete-li ověřit, že proměnné proxy nejsou nastaveny na podech, můžete zkontrolovat proměnné prostředí, které jsou na uzlech.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Opětovné povolení proxy serveru HTTP v existujícím clusteru

Při vytváření clusteru je ve výchozím nastavení povolený proxy server HTTP. Po zakázání proxy serveru HTTP v clusteru se konfigurace proxy serveru uloží do databáze, ale proměnné proxy serveru se z podů a uzlů odeberou.

Pokud chcete znovu povolit proxy server HTTP v existujícím clusteru, použijte az aks update příkaz s příznakem --enable-http-proxy .

az aks update --name $clusterName --resource-group $resourceGroup --enable-http-proxy

Upozornění

AKS automaticky znovu vytvoří všechny fondy uzlů v clusteru, když v něm provádíte aktualizaci konfigurace proxy serveru pomocí příkazu az aks update. Rozpočty přerušení podů (PDB) můžete použít k ochraně kritických podů před narušením během přeinstalování.

Důležité

Pokud jste před zakázáním clusteru měli konfiguraci proxy serveru HTTP, použije se stávající konfigurace proxy serveru HTTP automaticky při opětovném povolení proxy serveru HTTP v daném clusteru. Než budete pokračovat, doporučujeme ověřit konfiguraci, abyste měli jistotu, že splňuje vaše aktuální požadavky. Pokud chcete po opětovném povolení proxy serveru HTTP změnit konfiguraci proxy serveru HTTP, postupujte podle pokynů k aktualizaci konfigurace proxy serveru HTTP v existujícím clusteru.

Konfigurace konfigurace proxy serveru HTTP pomocí šablony Azure Resource Manager (ARM)

Můžete nasadit klastr AKS s HTTP proxy pomocí šablony ARM.

  1. Zkontrolujte požadavky pro každý parametr:

    • httpProxy: Proxy URL, který se používá k vytváření HTTP připojení mimo cluster. Schéma URL musí být http.
    • httpsProxy: Proxy URL k použití pro vytváření HTTPS připojení mimo clusteru. Pokud není uvedeno jinak, pak je httpProxy použit pro obě připojení HTTP a HTTPS.
    • noProxy: Seznam cílových doménových jmen, domén, IP adres nebo jiných síťových CIDR, které se mají vyloučit z proxy.
    • trustedCa: Řetězec obsahující alternativní obsah certifikátu CA base64 encoded. Aktuálně je podporován pouze formát PEM.

    Důležité

    Pro zajištění kompatibility s komponentami založenými na Go, které jsou součástí systému Kubernetes, musí certifikát podporovat namísto zastaralých certifikátů "Common Name".

    V aplikacích existují rozdíly v tom, jak plnit podmínky proměnné prostředí http_proxy, https_proxy a no_proxy. Curl a Python nepodporují CIDR v no_proxy, ale Ruby to dělá.

  2. Vytvořte šablonu s parametry proxy serveru HTTP. V šabloně zadejte hodnoty pro httpProxy, httpsProxya noProxy. V případě potřeby zadejte hodnotu pro trustedCa. Stejné schéma použité pro nasazení rozhraní příkazového řádku existuje v definici Microsoft.ContainerService/managedClusters v "properties", jak je znázorněno v následujícím příkladu:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. Nasaďte šablonu ARM s konfigurací proxy serveru HTTP. Cluster by se měl inicializovat pomocí proxy serveru HTTP nakonfigurovaného na uzlech.

Aktualizace konfigurace proxy serveru HTTP

Konfigurace proxy serveru HTTP můžete aktualizovat v existujících clusterech, včetně následujících:

  • Aktualizace existujícího clusteru za účelem povolení proxy serveru HTTP a přidání nové konfigurace proxy serveru HTTP
  • Aktualizace existujícího clusteru za účelem změny konfigurace proxy serveru HTTP

Důležité informace o aktualizaci proxy serveru HTTP

Parametr --http-proxy-config by měl být nastaven na nový soubor JSON s aktualizovanými hodnotami pro httpProxy, httpsProxynoProxya trustedCa v případě potřeby. Aktualizace vkládá nové proměnné prostředí do kontejnerů s novými hodnotami httpProxy, httpsProxy nebo noProxy. Pody musí být restartovány, aby to aplikace zachytily, protože hodnoty proměnných prostředí jsou vloženy pomocí mutujícího přijímacího webhooku.

Poznámka

Pokud dochází k přepnutí na nový proxy server, nový proxy server musí již existovat, aby aktualizace byla úspěšná. Po dokončení upgradu můžete smazat starý proxy server.

Aktualizace šablony ARM pro konfiguraci proxy serveru HTTP

  1. V šabloně zadejte nové hodnoty pro httpProxy, httpsProxya noProxy. V případě potřeby zadejte hodnotu pro trustedCa.

    Stejné schéma použité pro nasazení rozhraní příkazového řádku existuje v definici Microsoft.ContainerService/managedClusters v "properties", jak je znázorněno v následujícím příkladu:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Nasaďte šablonu ARM s aktualizovanou konfigurací proxy serveru HTTP.

Upozornění

AKS automaticky znovu vytvoří všechny fondy uzlů v clusteru, když v něm provádíte aktualizaci konfigurace proxy serveru pomocí příkazu az aks update. Rozpočty přerušení podů (PDB) můžete použít k ochraně kritických podů před narušením během přeinstalování.

  1. Ověřte, že konfigurace proxy serveru HTTP je na podech a uzlech. Zkontrolujte, jestli proměnné prostředí obsahují odpovídající hodnoty pro http_proxy, https_proxya no_proxy pomocí kubectl describe pod příkazu.

    kubectl describe {any pod} -n kube-system
    

    Pokud chcete ověřit, že jsou proxy proměnné nastaveny v podech, můžete zkontrolovat proměnné prostředí, které se nacházejí na uzlech.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Zakázání proxy serveru HTTP v existujícím clusteru pomocí šablony ARM

Aktualizace clusteru pro zakázání proxy serveru HTTP

  1. Aktualizujte šablonu ARM clusteru tak, aby zakázala proxy server HTTP nastavením enabled na false. Stejné schéma použité pro nasazení rozhraní příkazového řádku existuje v definici Microsoft.ContainerService/managedClusters v "properties", jak je znázorněno v následujícím příkladu:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Nasaďte šablonu ARM se zakázaným proxy serverem HTTP.

Upozornění

AKS automaticky znovu vytvoří všechny fondy uzlů v clusteru, když v něm provádíte aktualizaci konfigurace proxy serveru pomocí příkazu az aks update. Rozpočty přerušení podů (PDB) můžete použít k ochraně kritických podů před narušením během přeinstalování.

  1. Ověřte, že proxy server HTTP je zakázaný ověřením, že konfigurace proxy serveru HTTP není nastavená na podech a uzlech pomocí kubectl describe pod příkazu.

    kubectl describe {any pod} -n kube-system
    

    Chcete-li ověřit, že proměnné proxy nejsou nastaveny na podech, můžete zkontrolovat proměnné prostředí, které jsou na uzlech.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Opětovné povolení proxy serveru HTTP v existujícím clusteru

Při vytváření clusteru je ve výchozím nastavení povolený proxy server HTTP. Jakmile v clusteru zakážete proxy server HTTP, už do daného clusteru nemůžete přidat konfigurace proxy serveru HTTP.

Pokud chcete znovu povolit proxy server HTTP, postupujte podle pokynů k aktualizaci konfigurace proxy serveru HTTP pomocí šablony ARM.


Doplněk Istio pro externí služby – proxy server HTTP

Pokud používáte doplněk Sítě služby Istio pro AKS, musíte vytvořit Service Entry, která umožní aplikacím v síti přístup k neclusterovým nebo externím prostředkům prostřednictvím proxy serveru HTTP.

Například:

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
  1. Vytvořte soubor a zadejte hodnoty pro PROXY_IP a PROXY_PORT.

  2. Položku služby můžete nasadit pomocí:

    kubectl apply -f service_proxy.yaml
    

Monitorování konfigurace doplňku

Proxy server HTTP s doplňkem pro monitorování podporuje následující konfigurace:

  • Odchozí proxy bez autentizace
  • Odchozí proxy server s důvěryhodným certifikátem pro koncový bod Log Analytics

Následující konfigurace není podporovaná:

  • Vlastní metriky a doporučená upozornění při použití proxy s důvěryhodnými certifikáty

Další kroky

Pro více informací o síťových požadavcích klastrů AKS, viz Řízení odchozího provozu pro uzly klastrů v AKS.