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:
- Kümenizin tüm düğümlerine en son güncelleştirmeleri uygular.
- 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).
- Düğümleri yeniden başlatır.
- 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 iş ç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.
GitHub'daki deponuza gidin.
Eylemler'i seçin.
Yeni iş akışı İş akışını>kendiniz ayarlayın'ı seçin.
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 * *'
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
Eylemler için Market'te Ara çubuğunda Azure Oturum Açma araması yapın.
Azure Oturum Açma'ya tıklayın.
Yükleme'nin altında v1.4.6 gibi bir sürüm seçin ve yükleme kodu parçacığını kopyalayın.
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
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şturur
Contributor
. 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" }
Çıkışı kopyalayın ve GitHub deponuza gidin.
Ayarlar>Gizli Dizileri>ve değişkenler Eylemler>Yeni depo gizli dizisi'ni seçin.
Ad için
AZURE_CREDENTIALS
yazın.Gizli Dizi için, hizmet sorumlusunu oluştururken aldığınız çıkışın içeriğini kopyalayın.
Gizli Anahtar Ekle'yi seçin.
Azure CLI komutlarını yürütme adımlarını oluşturma
İŞ akışı YAML ile pencerenize gidin.
Eylemler için Market'te Ara çubuğunda Azure CLI Eylemi'ni arayın.
Azure CLI Eylemi'ne tıklayın.
Yükleme'nin altında v1.0.8 gibi bir sürüm seçin ve yükleme kodu parçacığını kopyalayın.
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
için
AZURE_CREDENTIALS
yaptığınız gibi yeni depo gizli dizileri oluşturarak ve--name
parametrelerini komutundan ayrıştırabilirsiniz--resource-group
.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}}
YAML'yi olarak
upgrade-node-images.yml
yeniden adlandırın.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_dispatch
yeni 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 --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
Tetikleyiciyi
workflow_dispatch
anahtarınon
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.
Azure Kubernetes Service