Menerapkan peningkatan keamanan otomatis ke simpul Azure Kubernetes Service (AKS) menggunakan GitHub Actions

Pembaruan keamanan adalah bagian penting dari menjaga keamanan dan kepatuhan kluster AKS Anda dengan perbaikan terbaru untuk OS dasarnya. Pembaruan ini mencakup perbaikan keamanan OS atau pembaruan kernel. Beberapa pembaruan memerlukan boot ulang simpul untuk menyelesaikan proses.

Artikel ini memperlihatkan kepada Anda cara mengotomatiskan proses pembaruan simpul AKS menggunakan GitHub Actions dan Azure CLI untuk membuat tugas pembaruan berdasarkan cron yang berjalan secara otomatis.

Catatan

Anda juga dapat melakukan peningkatan gambar simpul secara otomatis dan menjadwalkan peningkatan ini menggunakan pemeliharaan terencana. Untuk informasi selengkapnya, lihat Meningkatkan gambar simpul secara otomatis.

Sebelum Anda mulai

  • Artikel ini mengasumsikan Anda memiliki kluster AKS yang sudah ada. Jika Anda memerlukan kluster AKS, buat kluster menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
  • Artikel ini juga mengasumsikan Anda memiliki akun GitHub dan repositori profil untuk menghosting tindakan Anda. Jika Anda tidak memiliki repositori, buat repositori dengan nama yang sama dengan nama pengguna GitHub Anda.
  • Anda memerlukan Azure CLI versi 2.0.59 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Memperbarui simpul dengan az aks upgrade

Perintah ini az aks upgrade memberi Anda cara waktu henti nol untuk menerapkan pembaruan. Perintah melakukan tindakan berikut:

  1. Menerapkan pembaruan terbaru ke semua node kluster Anda.
  2. Cordon (membuat simpul tidak tersedia untuk penjadwalan beban kerja baru) dan pengurasan (memindahkan beban kerja yang ada ke simpul lain) lalu lintas ke simpul.
  3. Menghidupkan ulang simpul.
  4. Memungkinkan simpul yang diperbarui untuk menerima lalu lintas lagi.

AKS tidak secara otomatis menghidupkan ulang simpul Anda jika Anda memperbaruinya menggunakan metode yang berbeda.

Catatan

Berjalan az aks upgrade dengan --node-image-only bendera hanya meningkatkan gambar simpul. Menjalankan perintah tanpa bendera meningkatkan gambar simpul dan versi sarana kontrol Kubernetes. Untuk informasi selengkapnya, lihat dokumen untuk peningkatan terkelola pada simpul dan dokumen untuk peningkatan kluster.

Semua simpul Kubernetes berjalan di komputer virtual (VM) Azure berbasis Windows atau Linux standar. VM berbasis Linux menggunakan gambar Ubuntu dengan OS yang dikonfigurasi untuk secara otomatis memeriksa pembaruan setiap malam.

Saat Anda menggunakan perintah , az aks upgrade Azure CLI membuat lonjakan simpul baru dengan pembaruan keamanan dan kernel terbaru. Node baru ini awalnya disambungkan untuk mencegah aplikasi apa pun dijadwalkan hingga pembaruan selesai. Setelah pembaruan selesai, Azure cordons dan menguras node yang lebih lama dan membatalkan izin yang baru, mentransfer semua aplikasi terjadwal ke simpul baru.

Proses ini lebih baik daripada memperbarui kernel berbasis Linux secara manual karena Linux memerlukan boot ulang ketika pembaruan kernel baru diinstal. Jika Anda memperbarui OS secara manual, Anda juga perlu mem-boot ulang VM, secara manual menutup dan menyalurkan semua aplikasi.

Membuat Tindakan GitHub berwaktu

cron adalah utilitas yang memungkinkan Anda menjalankan serangkaian perintah, atau pekerjaan, pada jadwal otomatis. Untuk membuat pekerjaan untuk memperbarui simpul AKS Anda pada jadwal otomatis, Anda memerlukan repositori untuk menghosting tindakan Anda. GitHub Actions biasanya dikonfigurasi di repositori yang sama dengan aplikasi Anda, tetapi Anda dapat menggunakan repositori apa pun.

  1. Navigasi ke repositori Anda di GitHub.

  2. Pilih Tindakan.

  3. Pilih Alur>kerja baru Siapkan alur kerja sendiri.

  4. Buat Tindakan GitHub bernama Tingkatkan gambar node kluster dengan pemicu jadwal untuk berjalan setiap 15 hari pada pukul 03.00. Salin kode berikut ke YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Buat pekerjaan bernama upgrade-node yang berjalan pada agen Ubuntu dan menyambungkan ke akun Azure CLI Anda untuk menjalankan perintah peningkatan simpul. Salin kode berikut ke YAML di on bawah kunci:

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

Menyiapkan Azure CLI di alur kerja

  1. Di bilah Cari Marketplace untuk Tindakan , cari Azure Login.

  2. Pilih Azure Login.

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

  3. Di bawah Penginstalan, pilih versi, seperti v1.4.6, dan salin cuplikan kode penginstalan.

  4. Tambahkan kunci steps dan informasi berikut dari cuplikan kode penginstalan ke YAML:

    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 }}
    

Membuat kredensial untuk Azure CLI

  1. Di jendela browser baru, buat perwakilan layanan baru menggunakan az ad sp create-for-rbac perintah . Pastikan Anda mengganti *{subscriptionID}* dengan ID langganan Anda sendiri.

    Catatan

    Contoh ini membuat Contributor peran di cakupan Langganan . Anda dapat memberikan peran dan cakupan yang memenuhi kebutuhan Anda. Untuk informasi selengkapnya, lihat Peran bawaan Azure dan tingkat cakupan Azure RBAC.

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

    Output Anda harus mirip dengan contoh output berikut:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Salin output dan navigasikan ke repositori GitHub Anda.

  3. Pilih Pengaturan> Keamanan dan variabel>Tindakan>Rahasia repositori baru.

  4. Untuk Nama, masukkan AZURE_CREDENTIALS.

  5. Untuk Rahasia, salin dalam konten output yang Anda terima saat membuat perwakilan layanan.

  6. Pilih Tambahkan Rahasia.

Membuat langkah-langkah untuk menjalankan perintah Azure CLI

  1. Navigasi ke jendela Anda dengan YAML alur kerja.

  2. Di bilah Cari Marketplace untuk Tindakan , cari Tindakan Azure CLI.

  3. Pilih Tindakan Azure CLI.

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

  4. Di bawah Penginstalan, pilih versi, seperti v1.0.8, dan salin cuplikan kode penginstalan.

  5. Tempelkan konten tindakan ke YAML di bawah *Azure Login* langkah, mirip dengan contoh berikut:

    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
    

    Tip

    Anda dapat memisahkan -g parameter dan -n dari perintah dengan membuat rahasia repositori baru seperti yang Anda lakukan untuk AZURE_CREDENTIALS.

    Jika Anda membuat rahasia untuk parameter ini, Anda perlu mengganti {resourceGroupName} tempat penampung dan {aksClusterName} dengan mitra rahasia mereka. Misalnya, ${{secrets.RESOURCE_GROUP_NAME}} dan ${{secrets.AKS_CLUSTER_NAME}}

  6. Ganti nama YAML menjadi upgrade-node-images.yml.

  7. Pilih Terapkan perubahan..., tambahkan pesan penerapan, lalu pilih Terapkan perubahan.

Jalankan Tindakan GitHub secara manual

Anda dapat menjalankan alur kerja secara manual selain eksekusi terjadwal dengan menambahkan pemicu baru on yang disebut workflow_dispatch.

Catatan

Jika Anda ingin meningkatkan kumpulan simpul tunggal alih-alih semua kumpulan simpul pada kluster, tambahkan --name parameter ke az aks nodepool upgrade perintah untuk menentukan nama kumpulan simpul. Misalnya:

az aks nodepool upgrade -g {resourceGroupName} --cluster-name {aksClusterName} --name {{nodePoolName}} --node-image-only
  • Tambahkan pemicu workflow_dispatch di on bawah kunci:

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

    YAML akan terlihat mirip dengan contoh berikut:

        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
    

Langkah berikutnya

Untuk informasi selengkapnya tentang peningkatan AKS, lihat artikel dan sumber daya berikut ini:

Untuk diskusi terperinci tentang praktik terbaik peningkatan dan pertimbangan lainnya, lihat panduan patch dan peningkatan AKS.