Aracılığıyla paylaş


Azure Kubernetes Hizmetinde (AKS) HTTP vekil sunucu desteği

Bu makalede, Azure Kubernetes Service (AKS) kümelerini giden internet erişimi için bir HTTP proxy kullanacak şekilde nasıl yapılandıracağınızı öğreniyorsunuz.

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
  • Windows düğüm havuzları ile 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

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

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.

Ö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 içinde 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 (Önizleme)

Uzantıyı yükleme aks-preview

  1. aks-preview komutunu kullanarak Azure CLI uzantısını az extension add yükleyin.

    Önemli

    AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

    az extension add --name aks-preview
    
  2. komutunu kullanarak uzantının en son sürümüne güncelleştirin az extension update . HTTP Proxy'sini devre dışı bırakmak için en az 18.0.0b13 gerekir.

    az extension update --name aks-preview
    

Özellik bayrağını kaydet DisableHTTPProxyPreview

  1. DisableHTTPProxyPreview özellik bayrağını az feature register komutunu kullanarak kaydedin.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. komutunu kullanarak az feature show kayıt durumunu doğrulayın. Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Durum Kayıtlı olarak yansıtıldığında komutunu kullanarak az provider register kaynak sağlayıcısının kaydını yenileyin.

    az provider register --namespace Microsoft.ContainerService
    

HTTP proxy'sini devre dışı bırakmak için kümeyi güncelleştirme (önizleme)

  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 içinde 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 aynı şema Microsoft.ContainerService/managedClusters altındaki "properties" tanımında mevcuttur, aşağıdaki örnekte gösterildiği gibi:

    "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 aynı şema Microsoft.ContainerService/managedClusters altındaki "properties" tanımında mevcuttur, aşağıdaki örnekte gösterildiği gibi:

    "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 (Önizleme)

Uzantıyı yükleme aks-preview

  1. aks-preview komutunu kullanarak Azure CLI uzantısını az extension add yükleyin.

    Önemli

    AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

    az extension add --name aks-preview
    
  2. komutunu kullanarak uzantının en son sürümüne güncelleştirin az extension update . HTTP Proxy'sini devre dışı bırakmak için en az 18.0.0b13 gerekir.

    az extension update --name aks-preview
    

Özellik bayrağını kaydet DisableHTTPProxyPreview

  1. DisableHTTPProxyPreview özellik bayrağını az feature register komutunu kullanarak kaydedin.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. komutunu kullanarak az feature show kayıt durumunu doğrulayın. Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Durum Kayıtlı olarak yansıtıldığında komutunu kullanarak az provider register kaynak sağlayıcısının kaydını yenileyin.

    az provider register --namespace Microsoft.ContainerService
    

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 aynı şema Microsoft.ContainerService/managedClusters altındaki "properties" tanımında mevcuttur, aşağıdaki örnekte gösterildiği gibi:

    "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
  • Güvenilir sertifikaya sahip bir çıkış vekil sunucusu, Log Analitik uç noktası için.

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.