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 olarak çalışan bir güncelleştirme görevi cron oluşturmak için GitHub Actions ve Azure CLI kullanarak AKS düğümlerinin güncelleştirme işlemini nasıl otomatikleştirebileceğiniz gösterilmektedir.

Not

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 makalede, mevcut bir AKS kümeniz olduğu varsayılır. 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ız ile aynı ada sahip 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 gerekirse, bkz. Azure CLI yükleme.

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

komutu, az aks upgrade güncelleştirmeleri uygulamak için sıfır kapalı kalma süresi 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.

Not

bayrağıyla çalıştırılırsa az aks upgrade--node-image-only yalnızca düğüm görüntüleri yükseltılır. 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 bkz . Düğümlerde yönetilen yükseltmeler için belgeler ve küme yükseltmeleri için belgeler.

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 boşaltıp yeni düğümleri düzelterek 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. Anahtarın altındaki on YAML'ye aşağıdaki kodu 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 araması yapın.

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

    Search results showing two lines, the first action is called 'Azure Login' and the second 'Azure Container Registry Login'

  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 yükleme 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. değerini kendi abonelik kimliğiniz ile değiştirdiğinizden *{subscriptionID}* emin olun.

    Not

    Bu örnek, Abonelik kapsamında rolü oluştururContributor. 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> Secrets ve variables>Actions>New depo gizli dizisi'ni seçin.

  4. Ad için AZURE_CREDENTIALS yazın.

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

  6. Gizli Anahtar Ekle'yi seçin.

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

  1. İŞ akışı YAML ile pencerenize gidin.

  2. Eylemler için Market'te Ara çubuğunda Azure CLI Eylemi'ni arayın.

  3. Azure CLI Eylemi'ne tıklayın.

    Search result for 'Azure CLI Action' with first result being shown as made by Azure

  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 -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes
    

    İpucu

    için AZURE_CREDENTIALSyaptığınız gibi yeni depo gizli dizileri oluşturarak ve -n parametrelerini komutundan ayrıştırabilirsiniz-g.

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

adlı workflow_dispatchyeni on bir tetikleyici ekleyerek zamanlanan çalıştırmaya ek olarak iş akışını el ile çalıştırabilirsiniz.

Not

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 az aks nodepool upgrade komutuna ekleyin--name. Örneğin:

az aks nodepool upgrade -g {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.