Udostępnij za pośrednictwem


Obsługa serwera proxy HTTP w usłudze Azure Kubernetes Service (AKS)

Z tego artykułu dowiesz się, jak skonfigurować klastry usługi Azure Kubernetes Service (AKS) do korzystania z serwera proxy HTTP na potrzeby wychodzącego dostępu do Internetu.

Klastry AKS wdrożone w zarządzanych lub niestandardowych sieciach wirtualnych mają pewne zależności wychodzące, które są niezbędne do prawidłowego działania, co spowodowało problemy w środowiskach wymagających dostępu do Internetu do kierowania za pośrednictwem serwerów proxy HTTP. Węzły nie miały możliwości uruchamiania aplikacji konfiguracji, zmiennych środowiskowych i certyfikatów niezbędnych do uzyskiwania dostępu do usług internetowych.

Funkcja serwera proxy HTTP dodaje obsługę serwera proxy HTTP do klastrów usługi AKS, uwidaczniając prosty interfejs, którego można użyć do zabezpieczenia ruchu sieciowego wymaganego przez usługę AKS w środowiskach zależnych od serwera proxy. W przypadku tej funkcji zarówno węzły usługi AKS, jak i zasobniki są skonfigurowane do korzystania z serwera proxy HTTP. Ta funkcja umożliwia również instalację zaufanego urzędu certyfikacji na węzłach w ramach uruchamiania klastra. Bardziej złożone rozwiązania mogą wymagać utworzenia łańcucha zaufania w celu ustanowienia bezpiecznej komunikacji w sieci.

Ograniczenia i istotne zagadnienia

Następujące scenariusze nieobsługiwane:

  • Różne konfiguracje serwera proxy na pulę węzłów
  • Uwierzytelnianie użytkownika/hasła
  • Niestandardowe urzędy certyfikacji (CA) na potrzeby komunikacji z serwerem interfejsu API
  • Konfigurowanie istniejących klastrów usługi AKS za pomocą serwera proxy HTTP nie jest obsługiwane; Funkcja serwera proxy HTTP musi być włączona w czasie tworzenia klastra.
  • Klastry oparte na systemie Windows
  • Pule węzłów korzystające z zestawów dostępności maszyn wirtualnych (VMAS)
  • Używanie symbolu * jako symbolu wieloznakowego dołączonego do sufiksu domeny dla elementu noProxy

httpProxy, httpsProxyi trustedCa nie mają wartości domyślnie. Zasobniki są wstrzykiwane z następującymi zmiennymi środowiskowymi:

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

Aby wyłączyć iniekcję zmiennych środowiskowych serwera proxy, należy dodać adnotację do zasobnika za pomocą polecenia "kubernetes.azure.com/no-http-proxy-vars":"true".

Zanim rozpoczniesz

  • Potrzebna jest najnowsza wersja interfejsu wiersza polecenia platformy Azure. Uruchom polecenie az --version , aby znaleźć wersję i uruchomić polecenie az upgrade , aby uaktualnić wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Sprawdź dostępne uaktualnienia klastra usługi AKS, aby upewnić się, że korzystasz z najnowszej wersji usługi AKS. Jeśli chcesz przeprowadzić uaktualnienie, zobacz Uaktualnianie klastra usługi AKS.
  • Pliki systemu operacyjnego wymagane do aktualizacji konfiguracji serwera proxy można aktualizować tylko podczas procesu uaktualniania obrazu węzła. Po skonfigurowaniu serwera proxy należy uaktualnić obraz węzła, aby zastosować zmiany. Aby uzyskać więcej informacji, zobacz Uaktualnianie obrazów węzłów usługi AKS.

Konfigurowanie serwera proxy HTTP przy użyciu interfejsu wiersza polecenia platformy Azure

Klaster usługi AKS można skonfigurować za pomocą serwera proxy HTTP podczas tworzenia klastra przy użyciu az aks create polecenia i przekazać konfigurację jako plik JSON.

Schemat pliku konfiguracji wygląda następująco:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • httpProxy: adres URL serwera proxy używany do tworzenia połączeń HTTP poza klastrem. Schemat adresu URL musi mieć wartość http.
  • httpsProxy: adres URL serwera proxy używany do tworzenia połączeń HTTPS poza klastrem. Jeśli nie zostanie określony, httpProxy jest używany zarówno dla połączeń HTTP, jak i HTTPS.
  • noProxy: lista docelowych nazw domen, domen, adresów IP lub innych reguł CIDR sieci do wykluczenia serwera proxy.
  • trustedCa: ciąg zawierający zawartość alternatywnego certyfikatu base64 encoded urzędu certyfikacji. Obecnie obsługiwany jest tylko PEM format.

Ważne

Aby zapewnić zgodność ze składnikami opartymi na języku Go, które są częścią systemu Kubernetes, certyfikat musi obsługiwać Subject Alternative Names(SANs) zamiast przestarzałych certyfikatów nazwy pospolitej.

Istnieją różnice w aplikacjach w zakresie zgodności ze zmienną środowiskową http_proxy, https_proxyi no_proxy. Narzędzia Curl i Python nie obsługują trasy CIDR w systemie no_proxy, ale język Ruby.

Przykładowe dane wejściowe:

Uwaga

Certyfikat urzędu certyfikacji powinien być ciągiem zakodowanym w formacie base64 zawartości certyfikatu formatu PEM.

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

Utwórz plik i podaj wartości dla httpProxy, httpsProxyi noProxy. Jeśli środowisko tego wymaga, podaj wartość .trustedCa Następnie możesz wdrożyć klaster przy użyciu az aks create polecenia z parametrem --http-proxy-config ustawionym na utworzony plik. Klaster powinien zostać zainicjowany przy użyciu serwera proxy HTTP skonfigurowanego w węzłach.

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

Konfigurowanie serwera proxy HTTP przy użyciu szablonu usługi Azure Resource Manager (ARM)

Klaster usługi AKS można wdrożyć za pomocą serwera proxy HTTP przy użyciu szablonu usługi ARM. Ten sam schemat używany do wdrażania interfejsu Microsoft.ContainerService/managedClusters wiersza polecenia istnieje w definicji w "properties"obszarze , jak pokazano w poniższym przykładzie:

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

W szablonie podaj wartości , httpProxyhttpsProxyi noProxy. W razie potrzeby podaj wartość .trustedCa Następnie możesz wdrożyć szablon. Klaster powinien zostać zainicjowany przy użyciu serwera proxy HTTP skonfigurowanego w węzłach.

Serwer proxy HTTP dodatku Istio dla usług zewnętrznych

Jeśli używasz dodatku siatki usług opartej na architekturze Istio dla usługi AKS, musisz utworzyć wpis usługi, aby umożliwić aplikacjom w siatce dostęp do zasobów innych niż klaster lub zasoby zewnętrzne za pośrednictwem serwera proxy HTTP. Na przykład:

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

Utwórz plik i podaj wartości dla PROXY_IP i PROXY_PORT. Wpis usługi można wdrożyć przy użyciu polecenia

kubectl apply -f service_proxy.yaml

Aktualizowanie konfiguracji serwera proxy

Uwaga

W przypadku przełączenia na nowy serwer proxy nowy serwer proxy musi już istnieć, aby aktualizacja zakończyła się pomyślnie. Po zakończeniu uaktualniania można usunąć stary serwer proxy.

Konfigurację serwera proxy w klastrze można zaktualizować przy użyciu az aks update polecenia z --http-proxy-config parametrem ustawionym na nowy plik JSON ze zaktualizowanymi wartościami , httpsProxyhttpProxy, noProxyi trustedCa w razie potrzeby. Aktualizacja wprowadza nowe zmienne środowiskowe do zasobników przy użyciu nowych httpProxywartości , httpsProxylub noProxy . Zasobniki muszą być obracane, aby aplikacje je pobierały, ponieważ wartości zmiennych środowiskowych są wstrzykiwane przez zmutowany element webhook wstępu. W przypadku składników w ramach platformy Kubernetes, takich jak kontenery i sam węzeł, nie ma to wpływu do momentu przeprowadzenia uaktualnienia obrazu węzła.

Załóżmy na przykład, że utworzono nowy plik z zakodowanym ciągiem base64 nowego certyfikatu urzędu certyfikacji o nazwie aks-proxy-config-2.json. Konfigurację serwera proxy w klastrze można zaktualizować za pomocą następującego polecenia:

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

Uaktualnianie obrazów węzłów usługi AKS

Po skonfigurowaniu serwera proxy należy uaktualnić obraz węzła, aby zastosować zmiany. Proces uaktualniania obrazu węzła to jedyny sposób aktualizowania plików systemu operacyjnego wymaganych do aktualizacji konfiguracji serwera proxy. Proces uaktualniania obrazu węzła to uaktualnienie stopniowe, które aktualizuje obraz systemu operacyjnego w każdym węźle w puli węzłów. Płaszczyzna sterowania usługi AKS obsługuje proces uaktualniania, który nie jestdisrupcyjny dla uruchomionych aplikacji.

Aby uaktualnić obrazy węzłów usługi AKS, zobacz Uaktualnianie obrazów węzłów usługi Azure Kubernetes Service (AKS).

Monitorowanie konfiguracji dodatku

Serwer proxy HTTP z dodatkiem monitorowania obsługuje następujące konfiguracje:

  • Wychodzący serwer proxy bez uwierzytelniania
  • Wychodzący serwer proxy z uwierzytelnianiem nazwy użytkownika i hasła
  • Wychodzący serwer proxy z zaufanym certyfikatem dla punktu końcowego usługi Log Analytics

Następujące konfiguracje nie są obsługiwane:

  • Metryki niestandardowe i zalecane funkcje alertów podczas korzystania z serwera proxy z zaufanymi certyfikatami

Następne kroki

Aby uzyskać więcej informacji na temat wymagań sieciowych klastrów usługi AKS, zobacz Kontrolowanie ruchu wychodzącego dla węzłów klastra w usłudze AKS.