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:
- Menerapkan pembaruan terbaru ke semua node kluster Anda.
- Cordon (membuat simpul tidak tersedia untuk penjadwalan beban kerja baru) dan pengurasan (memindahkan beban kerja yang ada ke simpul lain) lalu lintas ke simpul.
- Menghidupkan ulang simpul.
- 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.
Navigasi ke repositori Anda di GitHub.
Pilih Tindakan.
Pilih Alur>kerja baru Siapkan alur kerja sendiri.
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 * *'
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
Di bilah Cari Marketplace untuk Tindakan , cari Azure Login.
Pilih Azure Login.
Di bawah Penginstalan, pilih versi, seperti v1.4.6, dan salin cuplikan kode penginstalan.
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
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" }
Salin output dan navigasikan ke repositori GitHub Anda.
Pilih Pengaturan>Rahasia dan variabel>Tindakan>rahasia repositori baru.
Untuk Nama, masukkan
AZURE_CREDENTIALS
.Untuk Rahasia, salin dalam konten output yang Anda terima saat membuat perwakilan layanan.
Pilih Tambahkan Rahasia.
Membuat langkah-langkah untuk menjalankan perintah Azure CLI
Navigasi ke jendela Anda dengan YAML alur kerja.
Di bilah Cari Marketplace untuk Tindakan , cari Tindakan Azure CLI.
Pilih Tindakan Azure CLI.
Di bawah Penginstalan, pilih versi, seperti v1.0.8, dan salin cuplikan kode penginstalan.
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 --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
Tip
Anda dapat memisahkan
--resource-group
parameter dan--name
dari perintah dengan membuat rahasia repositori baru seperti yang Anda lakukan untukAZURE_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}}
Ganti nama YAML menjadi
upgrade-node-images.yml
.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. Contohnya:
az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
Tambahkan pemicu
workflow_dispatch
dion
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.
Azure Kubernetes Service