Безшовна автоматизація AKS для Java додатків: Terraform, RBAC та Azure DevOps у дії

When managing containerized Java applications, ensuring efficient deployment, secure access, and robust monitoring is critical for success. Azure Kubernetes Service (AKS) simplifies the orchestration process, while tools like Terraform and Azure DevOps automate infrastructure and application deployments. In this blog, I’ll walk you through how we automated the deployment of a Java application on AKS with secure RBAC configurations, IaC practices, and CI/CD pipelines.

Огляд

Мета:
Цей проект демонструє, як:

  1. Автоматизувати розгортання кластерів AKS для розгортання Java додатка.
  2. Налаштувати безпечне управління доступом на основі ролей (RBAC).
  3. Використовувати інструменти інфраструктури як код (IaC), такі як Terraform та ARM шаблони для розгортання.
  4. Використовувати CI/CD пайплайни з Azure DevOps для безперебійного розгортання.

Основні особливості проекту:

  • Автоматизація інфраструктури за допомогою Terraform.
  • Реалізація RBAC для безпечного доступу.
  • Розгортання Docker-ізованого Java додатка.
  • Безперервний моніторинг з Azure Monitor, Prometheus і Grafana.

Крок 1: Налаштування середовища Azure

Перед автоматизацією інфраструктури потрібно налаштувати середовище Azure:

  1. Підписка Azure: Переконайтеся, що у вас є активна підписка з необхідними правами доступу.
  2. Інтеграція Terraform і DevOps: Надати службові принципали або керовані ідентичності права для управління ресурсами Azure.

pic

Крок 2: Опис інфраструктури за допомогою Terraform

Terraform спрощує процес надання інфраструктури для AKS.

  1. Конфігурації Terraform: Описуємо необхідні ресурси у файлах .tf:
  • Ресурсні групи
  • Віртуальні мережі та підмережі
  • Кластери AKS

Ось приклад коду для створення кластера AKS за допомогою Terraform:

resource "azurerm_kubernetes_cluster" "aks_cluster" {  
 name = "javaAppCluster"  
 location = var.location  
 resource_group_name = azurerm_resource_group.main.namedefault_node_pool {  
 name = "default"  
 node_count = 3  
 vm_size = "Standard_DS2_v2"  
 }identity {  
 type = "SystemAssigned"  
 }  
}

pic

Створення кластера Kubernetes

Розгортання ресурсів: Застосуйте конфігурації за допомогою terraform apply.

pic

Terraform Plan

pic

Terraform apply

Крок 3: Налаштування RBAC для безпечного доступу

RBAC покращує безпеку, надаючи певні дозволи користувачам та групам:

  1. Призначення ролей: Призначайте ролі, такі як Reader або Contributor користувачам Azure AD.
  2. Інтеграція з Terraform: Описуємо призначення ролей безпосередньо в Terraform
resource "azurerm_role_assignment" "rbac_assignment" {  
 principal_id = var.user_object_id  
 role_definition_name = "Azure Kubernetes Service RBAC Reader"  
 scope = azurerm_kubernetes_cluster.aks_cluster.id  
}

pic

Описані ролі RBAC

pic

Створені ролі RBAC

pic

Ідентифікатори об'єктів груп визначені

pic

Запит на вхід після налаштування RBAC для Kubernetes

pic

Доступ дозволено після успішного входу

Крок 4: Контейнеризація вашого Java додатка

Ключовим етапом є підготовка Java додатка до розгортання:

  1. Dockerизація додатка: Використовуйте Dockerfile для контейнеризації Java додатка. Приклад:
FROM openjdk:17-jdk  
COPY target/java-app.jar /app/java-app.jar  
ENTRYPOINT ["java", "-jar", "/app/java-app.jar"]

2.
Push to a Container Registry:

docker build -t java-app:v1 .  
docker tag java-app:v1 /java-app:v1  
docker push /java-app:v1

pic

Приклад Dockerfile

pic

Контейнер Docker запущений

pic

Зображення завантажено в ACR

pic

Зображення завантажено в ACR

Крок 5: Розгортання додатка в AKS

Використовуйте маніфести Kubernetes для розгортання вашого Java додатка:

  1. Файл YAML для розгортання:
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: java-app  
spec:  
 replicas: 2  
 selector:  
 matchLabels:  
 app: java-app  
 template:  
 metadata:  
 labels:  
 app: java-app  
 spec:  
 containers:  
 - name: java-app  
 image: /java-app:v1  
 ports:  
 - containerPort: 8080

pic

Deployment.yml

pic

Кластер Kubernetes

pic

pic

Запущені Pods і додаток працює

2. Розгортання за допомогою kubectl: Застосуйте маніфест за допомогою:

kubectl apply -f deployment.yaml

Крок 6: Автоматизація з CI/CD пайплайнами

Azure DevOps автоматизує процес збірки і розгортання:

  1. Безперервна інтеграція (CI): Автоматизація збірки Docker-образів, тестування та завантаження в реєстр.
  2. Безперервне розгортання (CD): Розгортання останньої версії додатка в AKS.

pic

IP адреса фронтенду балансувальника навантаження

pic

Пайплайн релізу

pic

Задача kubectl apply в пайплайні релізу

pic

Додаток працює з IP балансувальника навантаження

Крок 7: Моніторинг та управління продуктивністю

Моніторинг забезпечує стабільну роботу і швидке вирішення проблем:

Prometheus та Grafana: Налаштуйте панелі для візуалізації реальних даних.

pic

Налаштування Prometheus і Grafana

pic

pic

PromQL Запит

pic

pic

pic

Grafana

Висновок

Цей проект демонструє, як автоматизувати розгортання AKS для Java додатків за допомогою Terraform та Azure DevOps. Об'єднавши RBAC для безпечного доступу та надійний моніторинг, ми побудували масштабовану і безпечну архітектуру, придатну для виробничих середовищ.

Готові автоматизувати свої розгортання Kubernetes? Поділіться своїми думками або проблемами в коментарях!

Перекладено з: Seamless AKS Automation for Java Applications: Terraform, RBAC, and Azure DevOps in Action

Leave a Reply

Your email address will not be published. Required fields are marked *