Condividi tramite


Supporto del proxy HTTP in servizio Azure Kubernetes (servizio Azure Kubernetes)

Questo articolo illustra come configurare i cluster servizio Azure Kubernetes (servizio Azure Kubernetes) per l'uso 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'indirizzazione 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.

La funzionalità proxy HTTP aggiunge il supporto del proxy HTTP ai cluster del servizio Azure Kubernetes, esponendo un'interfaccia semplice che è possibile usare per proteggere il traffico di rete richiesto dal servizio Azure Kubernetes negli ambienti dipendenti dal 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 attendibilità per stabilire comunicazioni sicure attraverso la 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 di Windows
  • Pool di nodi che usano set di disponibilità delle macchine virtuali (VMAS)
  • Uso di * come carattere jolly collegato a un’estensione di dominio per noProxy

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

  • 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

Configurare un proxy HTTP usando l'interfaccia della riga di comando di Azure

È possibile configurare un cluster del servizio Azure Kubernetes con un proxy HTTP durante la creazione del cluster usando il az aks create comando e passando la configurazione come file JSON.

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

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • 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 viene usato per le connessioni HTTP e HTTPS.
  • noProxy: elenco di nomi di dominio di destinazione, domini, indirizzi IP o altri CIDR di rete da escludere dal 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, ma Ruby lo fa.

Input di esempio:

Nota

Il certificato della CA deve essere la stringa con codifica base64 del contenuto del certificato in formato PEM.

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

Creare un file e specificare i valori per httpProxy, httpsProxye noProxy. Se l'ambiente lo richiede, specificare un valore per trustedCa. Successivamente, è possibile distribuire il cluster usando il az aks create comando con il --http-proxy-config parametro impostato sul file creato. Il cluster deve essere inizializzato con il proxy HTTP configurato nei nodi.

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

Configurare un 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. Lo stesso schema usato per la distribuzione dell'interfaccia della Microsoft.ContainerService/managedClusters riga di comando esiste nella definizione "properties"in , come illustrato nell'esempio seguente:

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

Nel modello specificare i valori per httpProxy, httpsProxye noProxy. Se necessario, specificare un valore per trustedCa. Successivamente, è possibile distribuire il modello. Il cluster deve essere inizializzato con il proxy HTTP configurato nei nodi.

Aggiornare la configurazione del proxy

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.

È possibile aggiornare la configurazione del proxy nel cluster usando il comando con il az aks update--http-proxy-config parametro 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 httpProxyvalori , httpsProxyo noProxy . I pod devono essere ruotati affinché le app lo rilevino, perché i valori delle variabili di ambiente vengono inseriti da un webhook di ammissione mutevole. Per i componenti in Kubernetes, ad esempio containerd e il nodo stesso, questo non diventa effettivo fino a quando non viene eseguito un aggiornamento dell'immagine del nodo.

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

Aggiornare le immagini dei nodi del servizio Azure Kubernetes

Dopo aver configurato il proxy, è necessario aggiornare l'immagine del nodo per applicare le modifiche. Il processo di aggiornamento dell'immagine del nodo è l'unico modo per aggiornare i file del sistema operativo necessari per gli aggiornamenti della configurazione del proxy. Il processo di aggiornamento dell'immagine del nodo è un aggiornamento in sequenza che aggiorna l'immagine del sistema operativo in ogni nodo del pool di nodi. Il piano di controllo del servizio Azure Kubernetes gestisce il processo di aggiornamento, che non è indipendente dalle applicazioni in esecuzione.

Per aggiornare le immagini dei nodi del servizio Azure Kubernetes, vedere Aggiornare le immagini dei nodi servizio Azure Kubernetes del servizio Azure Kubernetes.

Configurazione del componente aggiuntivo di Monitoraggio

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

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

Le seguenti configurazioni non sono supportate:

  • Metriche personalizzate e funzionalità degli avvisi consigliati quando si usa un proxy con certificati attendibili

Passaggi successivi

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