Aracılığıyla paylaş


GitHub Actions kullanarak Azure Kubernetes Service (AKS) düğümlerine otomatik güvenlik yükseltmeleri uygulama

Güvenlik güncelleştirmeleri, AKS kümenizin güvenliğini ve temel işletim sistemi için en son düzeltmelerle uyumluluğunu korumanın önemli bir parçasıdır. Bu güncelleştirmeler işletim sistemi güvenlik düzeltmelerini veya çekirdek güncelleştirmelerini içerir. Bazı güncelleştirmeler, işlemi tamamlamak için düğümün yeniden başlatılmasını gerektirir.

Bu makalede, otomatik çalışan bir güncelleştirme görevi oluşturmak amacıyla GitHub Actions ve Azure CLI kullanarak AKS düğümlerinin güncelleme sürecini nasıl otomatikleştirebileceğiniz gösterilmektedir.

Uyarı

Ayrıca düğüm görüntüsü yükseltmelerini otomatik olarak gerçekleştirebilir ve planlı bakımı kullanarak bu yükseltmeleri zamanlayabilirsiniz. Daha fazla bilgi için bkz Düğüm görüntülerini otomatik olarak yükseltme.

Başlamadan önce

  • Bu makale, mevcut bir AKS kümeniz olduğunu varsayar. AKS kümesine ihtiyacınız varsa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturun.
  • Bu makalede, eylemlerinizi barındırmak için bir GitHub hesabınız ve bir profil deponuz olduğu da varsayılır. Deponuz yoksa GitHub kullanıcı adınızla aynı adı taşıyan bir depo oluşturun.
  • Azure CLI sürüm 2.0.59 veya üzerinin yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI'yı yükleme.

az aks upgrade ile düğümleri güncelleştirme

az aks upgrade komutu, güncelleştirmeleri sıfır kapalı kalma süresi ile uygulamanın bir yolunu sağlar. Komut aşağıdaki eylemleri gerçekleştirir:

  1. Kümenizin tüm düğümlerine en son güncelleştirmeleri uygular.
  2. Cordons (düğümü yeni iş yüklerinin zamanlanması için kullanılamaz hale getirir) ve düğümlere giden trafiği boşaltarak (mevcut iş yüklerini başka bir düğüme taşır).
  3. Düğümleri yeniden başlatır.
  4. Güncelleştirilmiş düğümlerin yeniden trafik almasını sağlar.

Farklı bir yöntem kullanarak güncelleştirdiğinizde AKS düğümlerinizi otomatik olarak yeniden başlatmaz.

Uyarı

az aks upgrade --node-image-only bayrağıyla çalıştırıldığında yalnızca düğüm imajları yükseltilir. bayrağı olmadan komutunu çalıştırmak hem düğüm görüntülerini hem de Kubernetes denetim düzlemi sürümünü yükseltir. Daha fazla bilgi için yönetilen yükseltmeler düğümler belgeleri ve küme yükseltmeleri belgeleri‘ne bakın.

Tüm Kubernetes düğümleri standart bir Windows veya Linux tabanlı Azure sanal makinesinde (VM) çalışır. Linux tabanlı VM'ler, her gece güncelleştirmeleri otomatik olarak denetlemek üzere yapılandırılmış işletim sistemiyle bir Ubuntu görüntüsü kullanır.

komutunu kullandığınızda az aks upgrade Azure CLI, en son güvenlik ve çekirdek güncelleştirmeleriyle yeni düğümlerde bir artış oluşturur. Bu yeni düğümler başlangıçta, güncelleştirme tamamlanana kadar uygulamaların kendilerine zamanlanmasını önlemek için kordonlanır. Güncelleştirme tamamlandıktan sonra Azure, eski düğümleri izole edip engelini kaldırarak zamanlanmış tüm uygulamaları yeni düğümlere aktarır.

Yeni bir çekirdek güncelleştirmesi yüklendiğinde Linux yeniden başlatma gerektirdiğinden bu işlem Linux tabanlı çekirdekleri el ile güncelleştirmekten daha iyidir. İşletim sistemini el ile güncelleştirirseniz, vm'yi yeniden başlatmanız ve tüm uygulamaları el ile kordonlamanız ve boşaltmanız gerekir.

Zamanlanmış GitHub Eylemi oluşturma

cron , otomatik bir zamanlamada bir dizi komut veya çalıştırmanıza olanak tanıyan bir yardımcı programdır. AKS düğümlerinizi otomatik bir zamanlamaya göre güncelleştirecek bir iş oluşturmak için, eylemlerinizi barındıracak bir depoya ihtiyacınız vardır. GitHub Actions genellikle uygulamanızla aynı depoda yapılandırılır, ancak herhangi bir depoyu kullanabilirsiniz.

  1. GitHub'daki deponuza gidin.

  2. Eylemler'i seçin.

  3. Yeni iş akışıİş akışını >kendiniz ayarlayın'ı seçin.

  4. Her 15 günde bir saat 03:00'te çalışacak bir zamanlama tetikleyicisi ile Küme düğümü görüntülerini yükselt adlı bir GitHub Eylemi oluşturun. Aşağıdaki kodu YAML'ye kopyalayın:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Ubuntu aracısı üzerinde çalışan ve düğüm yükseltme komutunu yürütmek için Azure CLI hesabınıza bağlanan upgrade-node adlı bir iş oluşturun. Aşağıdaki kodu, on anahtarının altındaki YAML'ye kopyalayın.

    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
    

İş akışında Azure CLI'yi ayarlama

  1. Eylemler için Market'te Ara çubuğunda Azure Oturum Açma'yı arayın.

  2. Azure Oturum Açma'ya tıklayın.

    İki satırı gösteren arama sonuçları, ilk eylem 'Azure Oturum Açma' ve ikinci 'Azure Container Registry Login' olarak adlandırılır

  3. Yükleme'nin altında v1.4.6 gibi bir sürüm seçin ve yükleme kodu parçacığını kopyalayın.

  4. YAML'ye steps kurulum kodu parçacığından anahtarı ve aşağıdaki bilgileri ekleyin:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
        steps:
          - name: Azure Login
            uses: Azure/login@v1.4.6
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    

Azure CLI için kimlik bilgileri oluşturma

  1. Yeni bir tarayıcı penceresinde komutunu kullanarak az ad sp create-for-rbac yeni bir hizmet sorumlusu oluşturun. Emin olun ki *{subscriptionID}* değerini kendi abonelik kimliğiniz ile değiştirdiniz.

    Uyarı

    Bu örnek Contributor rolünü Abonelik kapsamına oluşturur. gereksinimlerinizi karşılayan rolü ve kapsamı sağlayabilirsiniz. Daha fazla bilgi için bkz. Azure yerleşik rolleri ve Azure RBAC kapsam düzeyleri.

    az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o json
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Çıkışı kopyalayın ve GitHub deponuza gidin.

  3. Ayarlar>Gizli bilgiler ve değişkenler>İşlemler>Yeni depo gizli bilgisi'ni seçin.

  4. Ad için AZURE_CREDENTIALS yazın.

  5. Gizli için, hizmet sorumlusunu oluştururken aldığınız çıktının içeriğini kopyalayın.

  6. Gizli Ekle seçin.

Azure CLI komutlarını yürütme adımlarını oluşturma

  1. İş akışı YAML dosyasının bulunduğu pencereye gidin.

  2. Eylemler için Pazar Yeri'nde Ara çubuğunda Azure CLI Eylemi'ni arayın.

  3. Azure CLI Eylemini seçin.

    'Azure CLI Eylemi' için arama sonucu ve ilk sonuç Azure tarafından yapılmış olarak gösteriliyor

  4. Yükleme'nin altında v1.0.8 gibi bir sürüm seçin ve yükleme kodu parçacığını kopyalayın.

  5. Eylemin içeriğini aşağıdaki örneğe benzer şekilde adımın *Azure Login* altındaki YAML'ye yapıştırın:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
        steps:
          - name: Azure Login
            uses: Azure/login@v1.4.6
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
          - name: Upgrade node images
            uses: Azure/cli@v1.0.8
            with:
              inlineScript: az aks upgrade --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
    

    İpucu

    --resource-group ve --name parametrelerini komuttan ayırmak için, AZURE_CREDENTIALS için yaptığınız gibi yeni depo gizli anahtarları oluşturabilirsiniz.

    Bu parametreler için gizli diziler oluşturursanız, <resourceGroupName> ve <aksClusterName> yer tutucularını gizli dizi karşılıklarıyla değiştirmeniz gerekir. Örneğin, ${{secrets.RESOURCE_GROUP_NAME}} ve ${{secrets.AKS_CLUSTER_NAME}}

  6. YAML'yi olarak upgrade-node-images.ymlyeniden adlandırın.

  7. Değişiklikleri işle...'yi seçin, bir işleme iletisi ekleyin ve değişiklikleri işle'yi seçin.

GitHub Eylemini el ile çalıştırma

Zamanlanan çalıştırmaya ek olarak, yeni bir onworkflow_dispatch tetikleyici ekleyerek iş akışını el ile çalıştırabilirsiniz.

Uyarı

Kümedeki tüm düğüm havuzları yerine tek bir düğüm havuzunu yükseltmek istiyorsanız, düğüm havuzu adını belirtmek için parametresini --name komutuna ekleyinaz aks nodepool upgrade. Örneğin:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Tetikleyiciyi workflow_dispatch anahtarın on altına ekleyin:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
      workflow_dispatch:
    

    YAML aşağıdaki örneğe benzer görünmelidir:

        name: Upgrade cluster node images
        on:
          schedule:
            - cron: '0 3 */15 * *'
          workflow_dispatch:
        jobs:
          upgrade-node:
            runs-on: ubuntu-latest
            steps:
              - name: Azure Login
                uses: Azure/login@v1.4.6
                with:
                  creds: ${{ secrets.AZURE_CREDENTIALS }}
              - name: Upgrade node images
                uses: Azure/cli@v1.0.8
                with:
                  inlineScript: az aks upgrade -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes
              # Code for upgrading one or more node pools
    

Sonraki Adımlar

AKS yükseltmeleri hakkında daha fazla bilgi için aşağıdaki makalelere ve kaynaklara bakın:

Yükseltme en iyi yöntemleri ve diğer önemli noktalar hakkında ayrıntılı bilgi için bkz. AKS düzeltme eki ve yükseltme kılavuzu.