Condividi tramite


Supporto di proxy HTTP nel servizio Azure Kubernetes

Questo articolo illustra come configurare i cluster del servizio Azure Kubernetes per l'utilizzo di un proxy HTTP per l'accesso a Internet in uscita.

I cluster del servizio Azure Kubernetes distribuiti in reti virtuali gestite o personalizzate hanno determinate dipendenze in uscita necessarie per funzionare correttamente, creando problemi negli ambienti che richiedono l'indirizzamento dell'accesso a Internet tramite proxy HTTP. Non era possibile per i nodi eseguire il bootstrap della configurazione, delle variabili di ambiente e dei certificati necessari per accedere ai servizi Internet.

Questa funzionalità proxy HTTP aggiunge il supporto del proxy HTTP ai cluster AKS, fornendo un'interfaccia semplice con cui è possibile assicurare il traffico di rete richiesto da AKS in ambienti dipendenti da proxy. Con questa funzionalità, sia i nodi del servizio Azure Kubernetes che i pod sono configurati per l'uso del proxy HTTP. La funzionalità abilita anche l'installazione di un'autorità di certificazione attendibile nei nodi come parte del bootstrap di un cluster. Soluzioni più complesse potrebbero richiedere la creazione di una catena di certificati volta a stabilire comunicazioni sicure nella rete.

Limitazioni e considerazioni

Non sono supportati gli scenari seguenti:

  • Diverse configurazioni proxy per pool di nodi
  • Autenticazione Utente/Password
  • Autorità di certificazione personalizzate (CA) per la comunicazione del server API
  • Cluster del servizio Azure Kubernetes con pool di nodi Windows
  • Pool di nodi che usano set di disponibilità per macchine virtuali (VMAS)
  • Uso di * come carattere jolly collegato a un’estensione di dominio per noProxy

httpProxy, httpsProxy e trustedCa non hanno alcun valore per impostazione predefinita. I pod vengono inseriti con le seguenti variabili di ambiente:

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

Per disabilitare l'inserimento delle variabili di ambiente proxy, è necessario annotare il pod con "kubernetes.azure.com/no-http-proxy-vars":"true".

Operazioni preliminari

Creare un file di configurazione con valori proxy HTTP

Creare un file e specificare i valori per httpProxy, httpsProxy e noProxy. Se l'ambiente lo richiede, specificare un valore per trustedCa.

Lo schema per il file di configurazione è simile al seguente:

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

Esaminare i requisiti per ogni parametro:

  • httpProxy: URL proxy da usare per la creazione di connessioni HTTP all'esterno del cluster. Lo schema URL deve essere http.
  • httpsProxy: URL proxy da usare per la creazione di connessioni HTTPS all'esterno del cluster. Se non è specificato, httpProxy è usato sia per connessioni HTTP che HTTPS.
  • noProxy: elenco di nomi di dominio di destinazione, domini, indirizzi IP o altri CIDR di rete per escludere i proxy.
  • trustedCa: stringa che include il contenuto alternativo del certificato della CA base64 encoded. Attualmente, solo il formato PEM è supportato.

Importante

Per garantire la compatibilità con i componenti basati su Go che fanno parte del sistema Kubernetes, il certificato deve supportare Subject Alternative Names(SANs) anziché i certificati Common Name deprecati.

Le applicazioni differiscono su come rispettare le variabili di ambiente http_proxy, https_proxy e no_proxy. Curl e Python non supportano CIDR in no_proxy, mentre Ruby lo supporta.

Input di esempio:

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

Creare un cluster con una configurazione proxy HTTP usando l'interfaccia della riga di comando di Azure

È possibile configurare un cluster AKS con una configurazione proxy HTTP durante la creazione del cluster.

  1. Usare il comando az aks create e passare la configurazione sotto forma di file JSON.

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

    Il cluster deve inizializzarsi con il proxy HTTP configurato nei nodi.

  2. Verificare che la configurazione del proxy HTTP si trova nei pod e nei nodi controllando che le variabili di ambiente contengano i valori appropriati per http_proxy, https_proxye no_proxy usando il kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Per verificare che le variabili proxy siano impostate nei pod, è possibile controllare le variabili di ambiente presenti nei nodi.

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

Aggiornare una configurazione proxy HTTP

È possibile aggiornare le configurazioni proxy HTTP nei cluster esistenti, tra cui:

  • Aggiornamento di un cluster esistente per abilitare il proxy HTTP e aggiungere una nuova configurazione proxy HTTP.
  • Aggiornamento di un cluster esistente per modificare una configurazione proxy HTTP.

Considerazioni sull'aggiornamento del proxy HTTP

Il --http-proxy-config parametro deve essere impostato su un nuovo file JSON con valori aggiornati per httpProxy, httpsProxy, noProxye trustedCa , se necessario. L'aggiornamento inserisce nuove variabili di ambiente nei pod con i nuovi valori httpProxy, httpsProxy o noProxy. Affinché le app rilevino l'aggiornamento, i pod devono essere ruotati, poiché i valori delle variabili di ambiente vengono inseriti da un webhook di ammissione mutevole.

Nota

Se si passa a un nuovo proxy, è necessario che il nuovo proxy sia già esistente affinché l'aggiornamento venga completato correttamente. Al termine dell'aggiornamento, è possibile eliminare il proxy precedente.

Aggiornare un cluster per aggiornare o abilitare il proxy HTTP

  1. Abilitare o aggiornare le configurazioni proxy HTTP in un cluster esistente usando il az aks update comando .

    Si supponga, ad esempio, di aver creato un nuovo file con la stringa con codifica base64 del nuovo certificato CA denominato aks-proxy-config-2.json. È possibile aggiornare la configurazione del proxy nel cluster con il comando seguente:

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

Attenzione

AKS ricrea automaticamente l'immagine di tutti i pool di nodi nel cluster quando si aggiorna la configurazione del proxy nel cluster utilizzando il comando az aks update. È possibile usare Budget per l’interruzione dei pod (PDB) per proteggere le interruzioni dei pod critici durante la ricreazione dell'immagine.

  1. Verificare che la configurazione del proxy HTTP si trova nei pod e nei nodi controllando che le variabili di ambiente contengano i valori appropriati per http_proxy, https_proxye no_proxy usando il kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Per verificare che le variabili proxy siano impostate nei pod, è possibile controllare le variabili di ambiente presenti nei nodi.

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

Disabilitare il proxy HTTP in un cluster esistente (anteprima)

Installare l'estensione aks-preview

  1. Installare l'estensione CLI di Azure utilizzando il comando aks-preview.

    Importante

    Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

    az extension add --name aks-preview
    
  2. Eseguire l'aggiornamento alla versione più recente dell'estensione usando il comando az extension update. La disabilitazione del proxy HTTP richiede almeno 18.0.0b13.

    az extension update --name aks-preview
    

Registrare il flag di funzionalità DisableHTTPProxyPreview

  1. Registrare il flag della funzionalità DisableHTTPProxyPreview usando il comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Verificare lo stato della registrazione usando il comando az feature show. Sono necessari alcuni minuti per visualizzare lo stato Registered.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Quando lo stato riflette Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Aggiornare il cluster per disabilitare il proxy HTTP (anteprima)

  1. Aggiorna il tuo cluster per disabilitare il proxy HTTP utilizzando il comando az aks update con il flag --disable-http-proxy.

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

Attenzione

AKS ricrea automaticamente l'immagine di tutti i pool di nodi nel cluster quando si aggiorna la configurazione del proxy nel cluster utilizzando il comando az aks update. È possibile usare Budget per l’interruzione dei pod (PDB) per proteggere le interruzioni dei pod critici durante la ricreazione dell'immagine.

  1. Verificare che il proxy HTTP sia disabilitato convalidando che la configurazione del proxy HTTP non sia impostata nei pod e nei nodi usando il kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Per verificare che le variabili proxy non siano impostate nei pod, è possibile controllare le variabili di ambiente presenti nei nodi.

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

Riabilitare il proxy HTTP in un cluster esistente

Quando si crea un cluster, il proxy HTTP è abilitato per impostazione predefinita. Dopo aver disabilitato il proxy HTTP in un cluster, la configurazione del proxy viene salvata nel database, ma le variabili proxy vengono rimosse dai pod e dai nodi.

Per riabilitare il proxy HTTP in un cluster esistente, usare il az aks update comando con il --enable-http-proxy flag .

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

Attenzione

AKS ricrea automaticamente l'immagine di tutti i pool di nodi nel cluster quando si aggiorna la configurazione del proxy nel cluster utilizzando il comando az aks update. È possibile usare Budget per l’interruzione dei pod (PDB) per proteggere le interruzioni dei pod critici durante la ricreazione dell'immagine.

Importante

Se si dispone di una configurazione proxy HTTP nel cluster prima di disabilitare, la configurazione del proxy HTTP esistente viene applicata automaticamente quando si riabilita il proxy HTTP in tale cluster. È consigliabile verificare la configurazione per assicurarsi che soddisfi i requisiti correnti prima di procedere. Se si vuole modificare la configurazione del proxy HTTP dopo aver riabilitare il proxy HTTP, seguire la procedura per aggiornare la configurazione del proxy HTTP in un cluster esistente.

Configurare una configurazione proxy HTTP usando un modello di Azure Resource Manager (ARM)

È possibile distribuire un cluster del servizio Azure Kubernetes con un proxy HTTP usando un modello di Resource Manager.

  1. Esaminare i requisiti per ogni parametro:

    • httpProxy: URL proxy da usare per la creazione di connessioni HTTP all'esterno del cluster. Lo schema URL deve essere http.
    • httpsProxy: URL proxy da usare per la creazione di connessioni HTTPS all'esterno del cluster. Se non è specificato, httpProxy è usato sia per connessioni HTTP che HTTPS.
    • noProxy: elenco di nomi di dominio di destinazione, domini, indirizzi IP o altri CIDR di rete per escludere i proxy.
    • trustedCa: stringa che include il contenuto alternativo del certificato della CA base64 encoded. Attualmente, solo il formato PEM è supportato.

    Importante

    Per garantire la compatibilità con i componenti basati su Go che fanno parte del sistema Kubernetes, il certificato deve supportare Subject Alternative Names (SANs) anziché i certificati Common Name deprecati.

    Le applicazioni differiscono su come rispettare le variabili di ambiente http_proxy, https_proxy e no_proxy. Curl e Python non supportano CIDR in no_proxy, mentre Ruby lo supporta.

  2. Creare un modello con parametri proxy HTTP. Nel modello, specificare i valori per httpProxy, httpsProxy e noProxy. Se necessario, specificare un valore per trustedCa. Lo stesso schema usato per la distribuzione dell'interfaccia della riga di comando esiste nella definizione Microsoft.ContainerService/managedClusters in "properties", come illustrato nell'esempio seguente:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. Distribuire il modello di ARM con la configurazione del proxy HTTP. Il cluster deve essere inizializzato con il proxy HTTP configurato nei nodi.

Aggiornare una configurazione proxy HTTP

È possibile aggiornare le configurazioni proxy HTTP nei cluster esistenti, tra cui:

  • Aggiornamento di un cluster esistente per abilitare il proxy HTTP e aggiungere una nuova configurazione proxy HTTP.
  • Aggiornamento di un cluster esistente per modificare una configurazione proxy HTTP.

Considerazioni sull'aggiornamento del proxy HTTP

Il --http-proxy-config parametro deve essere impostato su un nuovo file JSON con valori aggiornati per httpProxy, httpsProxy, noProxye trustedCa , se necessario. L'aggiornamento inserisce nuove variabili di ambiente nei pod con i nuovi valori httpProxy, httpsProxy o noProxy. Affinché le app rilevino l'aggiornamento, i pod devono essere ruotati, poiché i valori delle variabili di ambiente vengono inseriti da un webhook di ammissione mutevole.

Nota

Se si passa a un nuovo proxy, è necessario che il nuovo proxy sia già esistente affinché l'aggiornamento venga completato correttamente. Al termine dell'aggiornamento, è possibile eliminare il proxy precedente.

Eseguire l'aggiornamento di un modello di ARM per configurare il proxy HTTP

  1. Nel modello specificare nuovi valori per httpProxy, httpsProxye noProxy. Se necessario, specificare un valore per trustedCa.

    Lo stesso schema usato per la distribuzione dell'interfaccia della riga di comando esiste nella definizione Microsoft.ContainerService/managedClusters in "properties", come illustrato nell'esempio seguente:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Distribuire il modello di ARM con la configurazione del proxy HTTP aggiornata.

Attenzione

AKS ricrea automaticamente l'immagine di tutti i pool di nodi nel cluster quando si aggiorna la configurazione del proxy nel cluster utilizzando il comando az aks update. È possibile usare Budget per l’interruzione dei pod (PDB) per proteggere le interruzioni dei pod critici durante la ricreazione dell'immagine.

  1. Verificare che la configurazione del proxy HTTP si trova nei pod e nei nodi controllando che le variabili di ambiente contengano i valori appropriati per http_proxy, https_proxye no_proxy usando il kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Per verificare che le variabili proxy siano impostate nei pod, è possibile controllare le variabili di ambiente presenti nei nodi.

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

Disabilitare il proxy HTTP in un cluster esistente usando un modello ARM (Preview)

Installare l'estensione aks-preview

  1. Installare l'estensione CLI di Azure utilizzando il comando aks-preview.

    Importante

    Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

    az extension add --name aks-preview
    
  2. Eseguire l'aggiornamento alla versione più recente dell'estensione usando il comando az extension update. La disabilitazione del proxy HTTP richiede almeno 18.0.0b13.

    az extension update --name aks-preview
    

Registrare il flag di funzionalità DisableHTTPProxyPreview

  1. Registrare il flag della funzionalità DisableHTTPProxyPreview usando il comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Verificare lo stato della registrazione usando il comando az feature show. Sono necessari alcuni minuti per visualizzare lo stato Registered.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Quando lo stato riflette Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Aggiornare il cluster per disabilitare il proxy HTTP

  1. Aggiorna il modello ARM del cluster per disabilitare il proxy HTTP impostando enabled su false. Lo stesso schema usato per la distribuzione dell'interfaccia della riga di comando esiste nella definizione Microsoft.ContainerService/managedClusters in "properties", come illustrato nell'esempio seguente:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Distribuire il modello ARM con il proxy HTTP disabilitato.

Attenzione

AKS ricrea automaticamente l'immagine di tutti i pool di nodi nel cluster quando si aggiorna la configurazione del proxy nel cluster utilizzando il comando az aks update. È possibile usare Budget per l’interruzione dei pod (PDB) per proteggere le interruzioni dei pod critici durante la ricreazione dell'immagine.

  1. Verificare che il proxy HTTP sia disabilitato convalidando che la configurazione del proxy HTTP non sia impostata nei pod e nei nodi usando il kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Per verificare che le variabili proxy non siano impostate nei pod, è possibile controllare le variabili di ambiente presenti nei nodi.

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

Riabilitare il proxy HTTP in un cluster esistente

Quando si crea un cluster, il proxy HTTP è abilitato per impostazione predefinita. Dopo aver disabilitato il proxy HTTP in un cluster, non è più possibile aggiungere configurazioni proxy HTTP a tale cluster.

Se si vuole riabilitare il proxy HTTP, seguire la procedura per aggiornare una configurazione proxy HTTP usando un modello ARM.


Proxy HTTP di Istio per servizi esterni aggiuntivi

Se si usa il componente aggiuntivo mesh di servizio basato su Istio per AKS, è necessario creare un Service Entry per consentire alle applicazioni nel mesh di accedere a risorse non cluster o esterne tramite il proxy HTTP.

Ad esempio:

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. Creare un file e specificare i valori per PROXY_IP e PROXY_PORT.

  2. È possibile distribuire la voce del servizio usando il codice seguente:

    kubectl apply -f service_proxy.yaml
    

Configurazione del componente aggiuntivo di Monitoraggio

Il proxy HTTP con componente aggiuntivo monitoraggio supporta le seguenti configurazioni:

  • Proxy in uscita senza autenticazione
  • Proxy in uscita con certificato attendibile per l'endpoint di Log Analytics

La configurazione seguente non è supportata:

  • Metriche personalizzate e funzionalità di avviso consigliate quando si usa un proxy con certificati attendibili

Passaggi successivi

Per ulteriori informazioni sui requisiti di rete dei cluster del servizio Azure Kubernetes, consultare Controllare il traffico in uscita per i nodi del cluster nel servizio Azure Kubernetes.