Применение автоматического обновления безопасности к узлам Служба Azure Kubernetes (AKS) с помощью GitHub Actions
Обновления для системы безопасности являются ключевой частью поддержания безопасности и соответствия кластера AKS с последними исправлениями для базовой операционной системы. Учитываются такие обновления, как исправления безопасности для операционной системы и обновления ядра. Чтобы завершить установку некоторых обновлений, нужно перезагрузить узел.
В этой статье показано, как автоматизировать процесс обновления узлов AKS с помощью GitHub Actions и Azure CLI для создания задачи обновления на cron
основе этого запуска автоматически.
Примечание.
Вы также можете выполнять автоматическое обновление образа узла и планировать эти обновления с помощью планового обслуживания. Дополнительные сведения см. в разделе "Автоматическое обновление образов узлов".
Подготовка к работе
- В этой статье предполагается, что у вас есть существующий кластер AKS. Если вам нужен кластер AKS, создайте его с помощью Azure CLI, Azure PowerShell или портал Azure.
- В этой статье также предполагается, что у вас есть учетная запись GitHub и репозиторий профилей для размещения действий. Если у вас нет репозитория, создайте его с тем же именем, что и имя пользователя GitHub.
- Вам понадобится Azure CLI версии 2.0.59 или более поздней версии. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Обновление узлов с помощью az aks upgrade
Эта az aks upgrade
команда дает вам нулевой способ простоя применить обновления. Команда выполняет следующие действия:
- Применяет последние обновления ко всем узлам кластера.
- Cordons (делает узел недоступным для планирования новых рабочих нагрузок) и сливов (перемещает существующие рабочие нагрузки на другой узел) трафик на узлы.
- Перезапускает узлы.
- Позволяет обновленным узлам снова получать трафик.
AKS не перезапускает узлы автоматически при обновлении узлов с помощью другого метода.
Примечание.
Выполнение az aks upgrade
с флагом --node-image-only
обновляет только образы узлов. Выполнение команды без обновления флага обновляет образы узлов и версию плоскости управления Kubernetes. Дополнительные сведения см . в документации по управляемым обновлениям на узлах и документации по обновлению кластера.
Все узлы Kubernetes выполняются в стандартной виртуальной машине Azure на основе Windows или Linux. Виртуальные машины под управлением Linux используют образ Ubuntu с ОС, настроенной для автоматической проверки обновлений каждую ночь.
При использовании az aks upgrade
команды Azure CLI создает всплеск новых узлов с последними обновлениями системы безопасности и ядра. Эти новые узлы изначально оцеплены, чтобы предотвратить планирование приложений до завершения обновления. После завершения обновления Azure кордонирует и очищает старые узлы и отклоняет новые узлы, передавая все запланированные приложения на новые узлы.
Этот процесс лучше, чем обновление ядер под управлением Linux вручную, так как Linux требует перезагрузки при установке нового обновления ядра. Если обновить операционную систему вручную, потребуется также перезагрузить виртуальную машину, вручную заблокировав и остановив приложения.
Создание действия GitHub з заданным временем
cron
— это программа, которая позволяет выполнять набор команд или заданий в автоматизированном расписании. Чтобы создать задание для обновления узлов AKS в автоматическом расписании, вам потребуется репозиторий для размещения действий. Действия GitHub обычно настраиваются в том же репозитории, что и приложение, но вы можете использовать любой репозиторий.
Перейдите в репозиторий на GitHub.
Выберите Действия.
Выберите новый рабочий процесс> самостоятельно.
Создайте образы узлов кластера с именем GitHub Action с триггером расписания для выполнения каждые 15 дней в 3 утра. Скопируйте следующий код в YAML:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *'
Создайте задание с именем upgrade-node , которое выполняется в агенте Ubuntu и подключается к учетной записи Azure CLI, чтобы выполнить команду обновления узла. Скопируйте следующий код в YAML под ключом
on
:jobs: upgrade-node: runs-on: ubuntu-latest
Настройка Azure CLI в рабочем процессе
На панели "Поиск Marketplace для действий" найдите имя входа Azure.
Выберите "Имя входа Azure".
В разделе "Установка" выберите версию, например версию 1.4.6, и скопируйте фрагмент кода установки.
steps
Добавьте ключ и следующие сведения из фрагмента кода установки в 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 }}
Создание учетных данных для Azure CLI
В новом окне браузера создайте субъект-службу с помощью
az ad sp create-for-rbac
команды. Убедитесь, что вы замените*{subscriptionID}*
собственный идентификатор подписки.Примечание.
В этом примере создается
Contributor
роль в области подписки . Вы можете предоставить роль и область, соответствующие вашим потребностям. Дополнительные сведения см. в статье о встроенных ролях Azure и уровнях областей RBAC Azure.az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o json
Выходные данные должны совпадать со следующим примером выходных данных:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx", "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
Скопируйте выходные данные и перейдите в репозиторий GitHub.
Выберите "Параметры секретов>" и переменных>"Действия>нового репозитория".
Для параметра Имя введите
AZURE_CREDENTIALS
.Для секрета скопируйте содержимое выходных данных, полученных при создании субъекта-службы.
Выберите Добавить секрет.
Создание шагов для выполнения команд Azure CLI
Перейдите в окно с помощью YAML рабочего процесса.
На панели "Поиск Marketplace для действий" найдите действие Azure CLI.
Выберите действие Azure CLI.
В разделе "Установка" выберите версию, например версию 1.0.8, и скопируйте фрагмент кода установки.
Вставьте содержимое действия в YAML под
*Azure Login*
шагом, как показано в следующем примере: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
Совет
Вы можете разделить
--resource-group
параметры и--name
параметры из команды, создав новые секреты репозитория, как и дляAZURE_CREDENTIALS
этого.Если вы создаете секреты для этих параметров, необходимо заменить
<resourceGroupName>
<aksClusterName>
заполнители своими секретными коллегами. Например,${{secrets.RESOURCE_GROUP_NAME}}
и${{secrets.AKS_CLUSTER_NAME}}
Переименуйте YAML в
upgrade-node-images.yml
.Выберите "Зафиксировать изменения...", добавьте сообщение фиксации и нажмите кнопку "Зафиксировать изменения".
Выполнение действия GitHub вручную
Вы можете вручную запустить рабочий процесс в дополнение к запланированному запуску, добавив новый on
триггер workflow_dispatch
.
Примечание.
Если вы хотите обновить один пул узлов вместо всех пулов узлов в кластере, добавьте --name
параметр в az aks nodepool upgrade
команду, чтобы указать имя пула узлов. Например:
az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
workflow_dispatch
Добавьте триггер под ключомon
:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch:
YamL должен выглядеть примерно так:
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
Следующие шаги
Дополнительные сведения об обновлениях AKS см. в следующих статьях и ресурсах:
Подробное обсуждение рекомендаций по обновлению и других рекомендаций см . в руководстве по исправлению и обновлению AKS.
Azure Kubernetes Service