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.
- Windows-basierte Cluster
- 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 Sieaz 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 musshttp
sein.httpsProxy
: Eine Proxy-URL, die zum Erstellen von HTTPS-Verbindungen außerhalb des Clusters verwendet wird. Wenn kein Wert angegeben wird, wirdhttpProxy
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ßentrustedCa
: Eine Zeichenfolge, die denbase64 encoded
alternativen Inhalt des Zertifizierungsstellenzertifikats enthält. Derzeit wird nur das FormatPEM
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).
Azure Kubernetes Service