Freigeben über


HTTP-Proxyunterstützung in Azure Kubernetes Service (AKS)

In diesem Artikel erfahren Sie, wie Sie AKS-Cluster (Azure Kubernetes Service) für die Verwendung eines HTTP-Proxys für ausgehenden Internetzugriff konfigurieren.

AKS-Cluster, die in verwalteten oder benutzerdefinierten virtuellen Netzwerken bereitgestellt werden, verfügen über bestimmte ausgehende Abhängigkeiten, die für ein ordnungsgemäßes Funktionieren erforderlich sind. Dies hat zu Problemen in Umgebungen geführt, in denen der Internetzugriff über HTTP-Proxys weitergeleitet werden muss. Knoten hatten keine Möglichkeit, Bootstrapping für die Konfiguration, Umgebungsvariablen und Zertifikate auszuführen, die für den Zugriff auf Internetdienste erforderlich sind.

Das HTTP-Proxyfeature fügt AKS-Clustern HTTP-Proxyunterstützung hinzu. Über die dadurch verfügbare benutzerfreundliche Schnittstelle können Sie den für AKS erforderlichen Netzwerkdatenverkehr in von Proxys abhängigen Umgebungen schützen. Mit diesem Feature werden sowohl AKS-Knoten als auch Pods für die Verwendung des HTTP-Proxys konfiguriert. Das Feature ermöglicht auch die Installation einer vertrauenswürdigen Zertifizierungsstelle auf den Knoten als Teil des Bootstrappingvorgangs eines Clusters. Komplexere Lösungen erfordern möglicherweise die Erstellung einer Vertrauenskette, um sichere Kommunikation über das Netzwerk einzurichten.

Einschränkungen und Aspekte

Folgende Szenarios werden nicht unterstützt:

  • Verschiedene Proxykonfigurationen pro Knotenpool
  • Benutzer-/Kennwortauthentifizierung
  • Benutzerdefinierte Zertifizierungsstellen (ZS) für die API-Serverkommunikation
  • Die Konfiguration von bestehenden AKS-Clustern mit einem HTTP-Proxy wird nicht unterstützt; die HTTP-Proxy-Funktion muss bei der Erstellung des Clusters aktiviert werden.
  • AKS-Cluster mit Windows-Knotenpools
  • Knotenpools, die VM-Verfügbarkeitsgruppen (VMAS) verwenden
  • Verwenden von * als an ein Domänensuffix angefügten Platzhalter für noProxy

httpProxy, httpsProxy und trustedCa haben standardmäßig keinen Wert. Die folgenden Umgebungsvariablen werden in die Pods eingefügt:

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

Wenn Sie das Einfügen der Proxyumgebungsvariablen deaktivieren möchten, müssen Sie dem Pod die Anmerkung "kubernetes.azure.com/no-http-proxy-vars":"true" hinzufügen.

Voraussetzungen

  • Hierzu benötigen Sie die aktuellste Version der Azure-Befehlszeilenschnittstelle. Führen Sie az --version aus, um die Version zu finden, und führen Sie az upgrade aus, um ein Upgrade für die Version durchzuführen. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
  • Überprüfen Sie, ob AKS-Clusterupgrades verfügbar sind, um sicherzustellen, dass Sie die aktuelle Version von AKS ausführen. Wenn Sie ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Upgraden eines AKS-Clusters.
  • Die für Proxykonfigurationsupdates erforderlichen Betriebssystemdateien können nur während des Upgradeprozesses für Knotenimages aktualisiert werden. Nach dem Konfigurieren des Proxys müssen Sie das Knotenimage upgraden, um die Änderungen zu übernehmen. Weitere Informationen finden Sie unter Durchführen von Upgrades für AKS-Knotenimages.

Konfigurieren eines HTTP-Proxys mit der Azure CLI

Sie können einen AKS-Cluster bei der Erstellung mit einem HTTP-Proxy konfigurieren, indem Sie den Befehl az aks create verwenden und die Konfiguration als JSON-Datei übergeben.

Das Schema für die Konfigurationsdatei sieht wie folgt aus:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • httpProxy: Eine Proxy-URL, die zum Erstellen von HTTP-Verbindungen außerhalb des Clusters verwendet wird. Das URL-Schema muss http sein.
  • httpsProxy: Eine Proxy-URL, die zum Erstellen von HTTPS-Verbindungen außerhalb des Clusters verwendet wird. Wenn kein Wert angegeben wird, wird httpProxy sowohl für HTTP- als auch für HTTPS-Verbindungen verwendet.
  • noProxy: Eine Liste von Zieldomänennamen, Domänen, IP-Adressen oder anderen Arten von Netzwerk-CIDR, um ein Weiterleiten auszuschließen
  • trustedCa: Eine Zeichenfolge, die den base64 encoded alternativen Inhalt des Zertifizierungsstellenzertifikats enthält. Derzeit wird nur das Format PEM unterstützt.

Wichtig

Aus Gründen der Kompatibilität mit Go-basierten Komponenten, die Teil des Kubernetes-Systems sind, muss das Zertifikat Subject Alternative Names(SANs) anstelle der veralteten Zertifikate mit allgemeinem Namen unterstützen.

Die Anwendungen unterscheiden sich hinsichtlich der Einhaltung der Umgebungsvariablen http_proxy, https_proxy und no_proxy. Curl und Python unterstützen CIDR in no_proxy nicht, Ruby hingegen schon.

Beispieleingabe:

Hinweis

Das Zertifizierungsstellenzertifikat sollte die Base64-codierte Zeichenfolge des Zertifikatinhalts im PEM-Format sein.

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

Erstellen Sie eine Datei, und geben Sie Werte für httpProxy, httpsProxy und noProxy an. Wenn Ihre Umgebung dies erfordert, geben Sie einen Wert für trustedCa an. Als Nächstes können Sie den Cluster mithilfe des Befehls az aks create bereitstellen, wobei der Parameter --http-proxy-config auf die von Ihnen erstellte Datei festgelegt ist. Ihr Cluster sollte mit dem HTTP-Proxy initialisiert werden, der auf den Knoten konfiguriert ist.

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

Konfigurieren eines HTTP-Proxys mithilfe einer ARM-Vorlage (Azure Resource Manager)

Sie können einen AKS-Cluster mit einem HTTP-Proxy mithilfe einer ARM-Vorlage bereitstellen. Das Schema, das für die CLI-Bereitstellung verwendet wird, ist auch in der Definition Microsoft.ContainerService/managedClusters unter "properties" verfügbar, wie im folgenden Beispiel zu sehen:

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

Geben Sie in Ihrer Vorlage Werte für httpProxy, httpsProxy und noProxy an. Geben Sie, falls erforderlich, einen Wert für trustedCa an. Als Nächstes können Sie die Vorlage bereitstellen. Ihr Cluster sollte mit Ihrem HTTP-Proxy initialisiert werden, der auf den Knoten konfiguriert ist.

Istio-Add-On-HTTP-Proxy für External Services

Wenn Sie das Istio-basiertes Dienst-Mesh-Add-On für AKS verwenden, müssen Sie einen Service Entry erstellen, damit Ihre Anwendungen im Mesh über den HTTP-Proxy auf nicht clusterbasierte oder externe Ressourcen zugreifen können. Zum Beispiel:

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

Erstellen Sie eine Datei, und geben Sie Werte für PROXY_IP und PROXY_PORT an. Sie können den Service Entry bereitstellen mithilfe von

kubectl apply -f service_proxy.yaml

Aktualisieren der Proxykonfiguration

Hinweis

Wenn Sie zu einem neuen Proxy wechseln, muss dieser bereits vorhanden sein, damit das Upgrade erfolgreich ist. Nach Abschluss des Upgrades können Sie den alten Proxy löschen.

Sie können die Proxykonfiguration in Ihrem Cluster mithilfe des Befehls az aks update aktualisieren, wobei der Parameter --http-proxy-config auf eine neue JSON-Datei mit aktualisierten Werten für httpProxy, httpsProxy, noProxy und, falls erforderlich, trustedCa festgelegt ist. Das Update fügt neue Umgebungsvariablen in Pods mit den neuen Werten für httpProxy, httpsProxy oder noProxy ein. Pods müssen rotiert werden, damit die Apps sie verwenden können, da die Werte der Umgebungsvariablen von einem mutierenden Zugangswebhook eingefügt werden. Für Komponenten unter Kubernetes, z. B.containerd und der Knoten selbst, wird dies erst wirksam, wenn ein Knotenimageupgrade durchgeführt wird.

Angenommen, Sie haben eine neue Datei namens aks-proxy-config-2.json mit der base64-codierten Zeichenfolge des neuen ZS-Zertifikats erstellt. Sie können die Proxykonfiguration in Ihrem Cluster mit dem folgenden Befehl aktualisieren:

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

Durchführen eines Upgrades für AKS-Knotenimages

Nach dem Konfigurieren des Proxys müssen Sie das Knotenimage upgraden, um die Änderungen zu übernehmen. Der Upgradeprozess für Knotenimages ist die einzige Stelle, an der die für Proxykonfigurationsupdates erforderlichen Betriebssystemdateien aktualisiert werden können. Bei dem Upgradeprozess für Knotenimages handelt es sich um ein paralleles Upgrade, bei dem das Betriebssystemimage auf jedem Knoten im Knotenpool aktualisiert wird. Der Upgradeprozess wird über die AKS-Steuerungsebene durchgeführt, sodass die Ausführung von Anwendungen nicht unterbrochen wird.

Weitere Informationen zum Upgraden von AKS-Knotenimages finden Sie unter Durchführen von Upgrades für AKS-Knotenimages (Azure Kubernetes Service).

Konfiguration des Monitoring-Add-Ons

Der HTTP-Proxy mit dem Überwachungs-Add-On unterstützt die folgenden Konfigurationen:

  • Proxy für ausgehenden Datenverkehr ohne Authentifizierung
  • Proxy für ausgehenden Datenverkehr mit Benutzername- und Kennwortauthentifizierung
  • Proxy für ausgehenden Datenverkehr mit vertrauenswürdigen Zertifikaten für den Log Analytics-Endpunkt

Die folgenden Konfigurationen werden nicht unterstützt:

  • Features „Benutzerdefinierte Metriken“ und „Empfohlene Warnungen“ bei Verwendung eines Proxys mit vertrauenswürdigen Zertifikaten

Nächste Schritte

Weitere Informationen zu den Netzwerkanforderungen von AKS-Clustern finden Sie unter Beschränken des Netzwerkdatenverkehrs mit Azure Firewall in Azure Kubernetes Service (AKS).