Azure Kubernetes Service (AKS)'de HTTP proxy desteği

Bu makalede, Azure Kubernetes Service (AKS) kümelerini giden İnternet erişimi için HTTP ara sunucusu kullanacak şekilde yapılandırmayı öğreneceksiniz.

Yönetilen veya özel sanal ağlara dağıtılan AKS kümelerinin düzgün çalışabilmesi için gerekli bazı çıkış bağımlılıkları vardır; bu da internet erişiminin HTTP proxy'leri aracılığıyla yönlendirilmesi gereken ortamlarda sorunlar yarattı. Düğümlerin internet hizmetlerine erişmek için gerekli olan yapılandırma, ortam değişkenleri ve sertifikaları başlatmanın bir yolu yoktu.

HTTP proxy özelliği, HTTP proxy desteğini AKS kümelerine ekler, proxy'ye bağımlı ortamlarda AKS gerektiren ağ trafiğini güvence altına alabileceğiniz basit bir arayüz sunar. Bu özellik ile hem AKS düğümleri hem de podlar, HTTP proxy kullanacak şekilde yapılandırılır. Bu özellik, bir küme başlatma işleminin bir parçası olarak, düğümlere güvenilir bir sertifika otoritesinin yüklenmesini de sağlar. Daha karmaşık çözümler, ağ genelinde güvenli iletişim kurmak için bir güven zinciri oluşturmayı gerektirebilir.

Sınırlamalar ve Dikkat Edilecek Hususlar

Aşağıdaki senaryolar desteklenmez:

  • Her bir düğüm havuzu için farklı ara sunucu yapılandırmaları
  • Kullanıcı/Şifre doğrulama
  • API sunucu iletişimi için özel sertifika otoriteleri
  • En fazla 20 Güvenilen CA sertifikası belirtilebilir
  • Windows düğüm havuzlarına sahip AKS kümeleri
  • Sanal Makine Kullanılabilirlik Setlerini (VMAS) kullanan düğüm havuzları
  • NoProxy için etki alanı son ekine joker karakter olarak * ekleyerek kullanma
  • noProxy konakları RFC 1123 uyumlu olmalıdır

httpProxy, httpsProxyve trustedCa varsayılan olarak hiçbir değere sahip değildir. Pod'lara aşağıdaki ortam değişkenleri enjekte edilir:

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

Proxy ortam değişkenlerinin enjeksiyonunu devre dışı bırakmak için, Pod'u "kubernetes.azure.com/no-http-proxy-vars":"true" ile açıklamanız gerekiyor.

Başlamadan önce

  • bash ortamını Azure Cloud Shell kullanın. Daha fazla bilgi için bkz. Azure Cloud Shell ile çalışmaya başlama.

  • CLI'yi yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yi yükleyin. Windows veya macOS üzerinde çalıştırıyorsanız Azure CLI Docker kapsayıcısında çalıştırmayı göz önünde bulundurun. Daha fazla bilgi için bkz. Docker kapsayıcısında Azure CLI çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI oturum açın. Kimlik doğrulama işlemini tamamlamak için, terminalinizde görüntülenen adımları takip edin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'a Kimlik Doğrulama.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma ve yönetme.

    • Yüklü olan sürümü ve bağımlı kütüphaneleri bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • HTTP Proxy'sini devre dışı bırakmak için en düşük CLI sürümü 2.85.0 gerekir.

HTTP proxy değerleriyle yapılandırma dosyası oluşturma

Bir dosya oluşturun ve httpProxy, httpsProxy ve noProxy için değerler sağlayın. Ortamınız bunu gerektiriyorsa, trustedCa için bir değer sağlayın.

Yapılandırma dosyası için şema şöyle görünüyor:

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

Her parametrenin gereksinimlerini gözden geçirin:

  • httpProxy: Küme dışındaki HTTP bağlantılarını oluşturmak için kullanılacak bir proxy URL'si. URL şeması http olmalıdır.
  • httpsProxy: Küme dışındaki HTTPS bağlantılarını oluşturmak için kullanılacak bir proxy URL'si. Belirtilmezse, httpProxy hem HTTP hem de HTTPS bağlantıları için kullanılır.
  • noProxy: Proxy oluşturmayı dışlamak için hedef etki alanı adlarının, etki alanlarının, IP adreslerinin veya diğer ağ CIDR'lerinin listesi.
  • trustedCa: Alternatif CA sertifika içeriğini içeren bir dize. Şu anda yalnızca PEM formatı desteklenmektedir. 20 sertifika sınırı.

Önemli

Kubernetes sisteminin parçası olan Go tabanlı bileşenlerle uyumluluk için, sertifikanın kullanım dışı bırakılan Ortak Ad sertifikaları yerine destek Subject Alternative Names(SANs).

Çevresel değişken http_proxy, https_proxy ve no_proxy ile uyum sağlama şekli konusunda uygulamalarda farklılıklar bulunmaktadır. Curl ve Python, no_proxy'da CIDR'yi desteklemez, ancak Ruby destekler.

Örnek giriş:

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

Azure CLI kullanarak HTTP proxy yapılandırmasıyla küme oluşturma

Küme oluşturma sırasında HTTP proxy yapılandırmasıyla AKS kümesini yapılandırabilirsiniz.

  1. az aks create komutunu kullanın ve yapılandırmanızı JSON dosyası olarak geçirin.

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

    Kümeniz, düğümlerde yapılandırılmış HTTP proxy ile başlatılmalıdır.

  2. HTTP proxy yapılandırmasının, ortam değişkenlerinin http_proxy, https_proxy ve no_proxy için uygun değerleri içerdiğinden emin olmak için kubectl describe pod komutunu kullanarak podlarda ve düğümlerde olduğunu doğrulayın.

    kubectl describe {any pod} -n kube-system
    

    Ara sunucu değişkenlerinin podlarda ayarlandığını doğrulamak için düğümlerde bulunan ortam değişkenlerini de kontrol edebilirsiniz.

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

HTTP proxy yapılandırmasını güncelleştirme

Mevcut kümelerde HTTP proxy yapılandırmalarını güncelleştirebilirsiniz, örneğin:

  • HTTP ara sunucusunu etkinleştirmek ve yeni bir HTTP proxy yapılandırması eklemek için var olan bir kümeyi güncelleştirme.
  • Http proxy yapılandırmasını değiştirmek için mevcut kümeyi güncelleştirme.

HTTP proxy güncelleştirmesinde dikkat edilmesi gerekenler

parametresi, --http-proxy-config , ve httpProxy gerekirse güncelleştirilmiş değerleri httpsProxynoProxytrustedCaolan yeni bir JSON dosyasına ayarlanmalıdır. Güncelleme, httpProxy, httpsProxy veya noProxy değerleriyle yeni ortam değişkenlerini pod'lara enjekte eder. Uygulamaların bunu alabilmesi için podlar yeniden başlatılmalıdır, çünkü ortam değişkeni değerleri değiştiren bir kabul webhook'u tarafından enjekte edilir.

Uyarı

Yeni bir proxy'e geçiliyorsa, güncellemenin başarılı olması için yeni proxy'nin önceden var olması gerekir. Yükseltme tamamlandıktan sonra eski proxy'yi silebilirsiniz.

HTTP proxy'sini güncelleştirmek veya etkinleştirmek için kümeyi güncelleştirme

  1. komutunu kullanarak mevcut bir kümede HTTP proxy yapılandırmalarını etkinleştirin veya güncelleştirin az aks update .

    Örneğin, yeni CA sertifikasının base64 ile kodlanmış dizgisi olan aks-proxy-config-2.json adında yeni bir dosya oluşturduğunuzu söyleyelim. Kümenizdeki proxy yapılandırmasını aşağıdaki komutla güncelleyebilirsiniz:

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

Dikkat

az aks update komutunu kullanarak kümenizdeki ara sunucu yapılandırmasını güncellediğinizde, AKS, kümedeki tüm düğüm havuzlarını otomatik olarak yeniden görüntüler. Kritik podların yeniden görüntüleme sırasında kesintiye uğramasını önlemek için Pod Kesinti Bütçelerini (PDB) kullanabilirsiniz.

  1. HTTP proxy yapılandırmasının, ortam değişkenlerinin http_proxy, https_proxy ve no_proxy için uygun değerleri içerdiğinden emin olmak için kubectl describe pod komutunu kullanarak podlarda ve düğümlerde olduğunu doğrulayın.

    kubectl describe {any pod} -n kube-system
    

    Ara sunucu değişkenlerinin podlarda ayarlandığını doğrulamak için düğümlerde bulunan ortam değişkenlerini de kontrol edebilirsiniz.

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

Var olan bir kümede HTTP proxy'sini devre dışı bırakma

HTTP ara sunucusunu devre dışı bırakmak için kümeyi güncelleştirme

  1. HTTP proxy'sini devre dışı bırakmak için az aks update komutunu --disable-http-proxy bayrağıyla kullanarak kümenizi güncelleyin.

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

Dikkat

az aks update komutunu kullanarak kümenizdeki ara sunucu yapılandırmasını güncellediğinizde, AKS, kümedeki tüm düğüm havuzlarını otomatik olarak yeniden görüntüler. Kritik podların yeniden görüntüleme sırasında kesintiye uğramasını önlemek için Pod Kesinti Bütçelerini (PDB) kullanabilirsiniz.

  1. HTTP proxy'nin kapalı olduğunu doğrulamak için, kubectl describe pod komutunu kullanarak HTTP proxy yapılandırmasının podlar ve düğümlerde ayarlı olmadığını doğrulayın.

    kubectl describe {any pod} -n kube-system
    

    Ara sunucu değişkenlerinin podlarda ayarlanmamış olduğunu doğrulamak için düğümlerde bulunan ortam değişkenlerini de kontrol edebilirsiniz.

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

Var olan bir kümede HTTP proxy'sini yeniden etkinleştirme

Küme oluşturduğunuzda, HTTP ara sunucusu varsayılan olarak etkinleştirilir. Kümede HTTP proxy'sini devre dışı bırakdığınızda, ara sunucu yapılandırması veritabanına kaydedilir, ancak ara sunucu değişkenleri podlardan ve düğümlerden kaldırılır.

Mevcut bir kümede HTTP proxy'yi yeniden etkinleştirmek için az aks update komutunu bu --enable-http-proxy bayrağıyla kullanın.

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

Dikkat

az aks update komutunu kullanarak kümenizdeki ara sunucu yapılandırmasını güncellediğinizde, AKS, kümedeki tüm düğüm havuzlarını otomatik olarak yeniden görüntüler. Kritik podların yeniden görüntüleme sırasında kesintiye uğramasını önlemek için Pod Kesinti Bütçelerini (PDB) kullanabilirsiniz.

Önemli

Devre dışı bırakmadan önce kümenizde bir HTTP proxy yapılandırması varsa, bu kümede HTTP ara sunucusunu yeniden etkinleştirdiğinizde mevcut HTTP proxy yapılandırması otomatik olarak uygulanır. Devam etmeden önce geçerli gereksinimlerinizi karşıladığından emin olmak için yapılandırmayı doğrulamanızı öneririz. HTTP proxy'sini yeniden etkinleştirdikten sonra HTTP proxy yapılandırmanızı değiştirmek istiyorsanız, MEVCUT bir kümede HTTP proxy yapılandırmasını güncelleştirme adımlarını izleyin.

Azure Resource Manager (ARM) şablonu kullanarak HTTP proxy yapılandırmasını yapılandırma

Bir AKS kümesini HTTP proxy ile bir ARM şablonu kullanarak dağıtabilirsiniz.

  1. Her parametrenin gereksinimlerini gözden geçirin:

    • httpProxy: Küme dışındaki HTTP bağlantılarını oluşturmak için kullanılacak bir proxy URL'si. URL şeması http olmalıdır.
    • httpsProxy: Küme dışındaki HTTPS bağlantılarını oluşturmak için kullanılacak bir proxy URL'si. Belirtilmezse, httpProxy hem HTTP hem de HTTPS bağlantıları için kullanılır.
    • noProxy: Proxy oluşturmayı dışlamak için hedef etki alanı adlarının, etki alanlarının, IP adreslerinin veya diğer ağ CIDR'lerinin listesi.
    • trustedCa: Alternatif CA sertifika içeriğini içeren bir dize. Şu anda yalnızca PEM formatı desteklenmektedir.

    Önemli

    Kubernetes sisteminin parçası olan Go tabanlı bileşenlerle uyumluluk için, sertifikanın kullanım dışı bırakılan Ortak Ad sertifikaları yerine destek Subject Alternative Names (SANs).

    Çevresel değişken http_proxy, https_proxy ve no_proxy ile uyum sağlama şekli konusunda uygulamalarda farklılıklar bulunmaktadır. Curl ve Python, no_proxy'da CIDR'yi desteklemez, ancak Ruby destekler.

  2. HTTP proxy parametreleriyle bir şablon oluşturun. Şablonunuzda httpProxy, httpsProxy ve noProxy için değerler girin. Gerekirse trustedCa için bir değer sağlayın. CLI dağıtımı için kullanılan şema, aşağıdaki örnekte gösterildiği gibi Microsoft.ContainerService/managedClusters altında "properties" tanımında bulunur:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. ARM şablonunuzu HTTP Proxy yapılandırmasıyla dağıtın. Kümeniz, düğümlerde yapılandırılmış HTTP proxy ile başlatılmalıdır.

HTTP proxy yapılandırmasını güncelleştirme

Mevcut kümelerde HTTP proxy yapılandırmalarını güncelleştirebilirsiniz, örneğin:

  • HTTP ara sunucusunu etkinleştirmek ve yeni bir HTTP proxy yapılandırması eklemek için var olan bir kümeyi güncelleştirme.
  • Http proxy yapılandırmasını değiştirmek için mevcut kümeyi güncelleştirme.

HTTP proxy güncelleştirmesinde dikkat edilmesi gerekenler

parametresi, --http-proxy-config , ve httpProxy gerekirse güncelleştirilmiş değerleri httpsProxynoProxytrustedCaolan yeni bir JSON dosyasına ayarlanmalıdır. Güncelleme, httpProxy, httpsProxy veya noProxy değerleriyle yeni ortam değişkenlerini pod'lara enjekte eder. Uygulamaların bunu alabilmesi için podlar yeniden başlatılmalıdır, çünkü ortam değişkeni değerleri değiştiren bir kabul webhook'u tarafından enjekte edilir.

Uyarı

Yeni bir proxy'e geçiliyorsa, güncellemenin başarılı olması için yeni proxy'nin önceden var olması gerekir. Yükseltme tamamlandıktan sonra eski proxy'yi silebilirsiniz.

HTTP proxy'sini yapılandırmak için ARM şablonunu güncelleştirme

  1. Şablonunuzda httpProxy, httpsProxy ve noProxy için yeni değerler belirleyin. Gerekirse trustedCa için bir değer sağlayın.

    CLI dağıtımı için kullanılan şema, aşağıdaki örnekte gösterildiği gibi Microsoft.ContainerService/managedClusters altında "properties" tanımında bulunur:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Güncellenmiş HTTP Proxy konfigürasyonuyla, ARM şablonunuzu dağıtın.

Dikkat

az aks update komutunu kullanarak kümenizdeki ara sunucu yapılandırmasını güncellediğinizde, AKS, kümedeki tüm düğüm havuzlarını otomatik olarak yeniden görüntüler. Kritik podların yeniden görüntüleme sırasında kesintiye uğramasını önlemek için Pod Kesinti Bütçelerini (PDB) kullanabilirsiniz.

  1. HTTP proxy yapılandırmasının, ortam değişkenlerinin http_proxy, https_proxy ve no_proxy için uygun değerleri içerdiğinden emin olmak için kubectl describe pod komutunu kullanarak podlarda ve düğümlerde olduğunu doğrulayın.

    kubectl describe {any pod} -n kube-system
    

    Ara sunucu değişkenlerinin podlarda ayarlandığını doğrulamak için düğümlerde bulunan ortam değişkenlerini de kontrol edebilirsiniz.

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

ARM şablonu kullanarak var olan bir kümede HTTP proxy'sini devre dışı bırakma

HTTP ara sunucusunu devre dışı bırakmak için kümeyi güncelleştirme

  1. Küme ARM şablonunuzu, HTTP proxy'sini devre dışı bırakmak için enabled öğesini false olarak ayarlayarak güncelleyin. CLI dağıtımı için kullanılan şema, aşağıdaki örnekte gösterildiği gibi Microsoft.ContainerService/managedClusters altında "properties" tanımında bulunur:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. ARM şablonunuzu HTTP Ara Sunucusu devre dışı bırakılmış olarak dağıtın.

Dikkat

az aks update komutunu kullanarak kümenizdeki ara sunucu yapılandırmasını güncellediğinizde, AKS, kümedeki tüm düğüm havuzlarını otomatik olarak yeniden görüntüler. Kritik podların yeniden görüntüleme sırasında kesintiye uğramasını önlemek için Pod Kesinti Bütçelerini (PDB) kullanabilirsiniz.

  1. Podlar ve düğümler üzerinde HTTP Proxy yapılandırmasının ayarlı olmadığını kubectl describe pod komutuyla doğrulayarak HTTP proxy'sinin devre dışı olduğunu kontrol edin.

    kubectl describe {any pod} -n kube-system
    

    Ara sunucu değişkenlerinin podlarda ayarlanmamış olduğunu doğrulamak için düğümlerde bulunan ortam değişkenlerini de kontrol edebilirsiniz.

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

Var olan bir kümede HTTP proxy'sini yeniden etkinleştirme

Küme oluşturduğunuzda, HTTP ara sunucusu varsayılan olarak etkinleştirilir. Kümede HTTP proxy'sini devre dışı bırakdığınızda, artık bu kümeye HTTP proxy yapılandırmaları ekleyemezsiniz.

HTTP ara sunucusunu yeniden etkinleştirmek istiyorsanız , ARM şablonu kullanarak HTTP proxy yapılandırmasını güncelleştirme adımlarını izleyin.


Dış Hizmetler için Istio eklentisi HTTP ara sunucusu

AKS için Istio tabanlı hizmet ağı eklentisini kullanıyorsanız, ağ içindeki uygulamalarınızın HTTP ara sunucusu aracılığıyla küme dışı veya dış kaynaklara erişmesini sağlamak için bir Hizmet Girişi oluşturmanız gerekir.

Örneğin:

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. Bir dosya oluşturun ve PROXY_IP ve PROXY_PORT için değerler sağlayın.

  2. Hizmet Girdisini şu şekilde dağıtabilirsiniz:

    kubectl apply -f service_proxy.yaml
    

Eklenti yapılandırmasını izleme

HTTP proxy, izleme eklentisiyle birlikte aşağıdaki yapılandırmaları destekler:

  • Giden vekil sunucu kimlik doğrulama olmadan
  • Log Analytics uç noktası için güvenilen sertifikaya sahip giden ara sunucu

Aşağıdaki yapılandırma desteklenmez:

  • Güvenilir sertifikalara sahip bir proxy kullanıldığında Özel Metrikler ve Önerilen Uyarılar özellikleri

Sonraki adımlar

AKS kümelerinin ağ gereksinimleri hakkında daha fazla bilgi için, AKS'de küme düğümleri için çıkış trafiğini kontrol etme sayfasına bakın.