Docker & Kubernetes

Como Usar AKS no Azure: Integração com AAD, ACR e Azure Monitor em Produção

13 min de leitura

Como Usar AKS no Azure: Integração com AAD, ACR e Azure Monitor em Produção

O que é AKS e por que dominar sua integração? Azure Kubernetes Service (AKS) é uma plataforma gerenciada que simplifica a implantação, administração e operações do Kubernetes no Azure. Diferentemente de gerenciar um cluster Kubernetes manualmente, o AKS cuida da camada de controle (control plane), deixando você responsável apenas pelos nós de trabalho e pela orquestração de suas aplicações. Quando você integra AKS com Azure Active Directory (AAD), Azure Container Registry (ACR) e Azure Monitor, cria um ecossistema robusto onde autenticação, armazenamento de imagens e observabilidade funcionam em harmonia. A integração desses três serviços resolve problemas críticos: controle de acesso baseado em identidade corporativa (AAD), pull de imagens de forma segura sem expor credenciais (ACR), e visibilidade completa do comportamento de suas aplicações em produção (Monitor). Este artigo o guiará através de cada integração com exemplos práticos que você pode aplicar imediatamente. Integração com Azure Active Directory (AAD) Por que integrar AAD ao AKS? Quando você integra AAD ao AKS,

<h2>O que é AKS e por que dominar sua integração?</h2>

<p>Azure Kubernetes Service (AKS) é uma plataforma gerenciada que simplifica a implantação, administração e operações do Kubernetes no Azure. Diferentemente de gerenciar um cluster Kubernetes manualmente, o AKS cuida da camada de controle (control plane), deixando você responsável apenas pelos nós de trabalho e pela orquestração de suas aplicações. Quando você integra AKS com Azure Active Directory (AAD), Azure Container Registry (ACR) e Azure Monitor, cria um ecossistema robusto onde autenticação, armazenamento de imagens e observabilidade funcionam em harmonia.</p>

<p>A integração desses três serviços resolve problemas críticos: controle de acesso baseado em identidade corporativa (AAD), pull de imagens de forma segura sem expor credenciais (ACR), e visibilidade completa do comportamento de suas aplicações em produção (Monitor). Este artigo o guiará através de cada integração com exemplos práticos que você pode aplicar imediatamente.</p>

<h2>Integração com Azure Active Directory (AAD)</h2>

<h3>Por que integrar AAD ao AKS?</h3>

<p>Quando você integra AAD ao AKS, habilita autenticação e autorização baseadas em identidades corporativas. Seus desenvolvedores se autenticam no cluster usando suas credenciais corporativas, eliminando a necessidade de gerenciar certificados e tokens manualmente. Além disso, você pode granularizar permissões usando Role-Based Access Control (RBAC) nativo do Kubernetes, vinculado aos grupos do AAD.</p>

<h3>Configurando integração com AAD</h3>

<p>Primeiro, você precisa criar um cluster AKS com AAD integrado ou habilitar em um existente. Vou mostrar como criar um novo cluster com essa configuração:</p>

<pre><code class="language-bash">#!/bin/bash

Variáveis

RESOURCE_GROUP=&quot;meu-rg&quot;

CLUSTER_NAME=&quot;meu-aks&quot;

LOCATION=&quot;eastus&quot;

AAD_TENANT_ID=&quot;seu-tenant-id&quot;

AAD_ADMIN_GROUP_ID=&quot;seu-grupo-aad-id&quot;

Criar Resource Group

az group create --name $RESOURCE_GROUP --location $LOCATION

Criar cluster AKS com AAD integrado

az aks create \

--resource-group $RESOURCE_GROUP \

--name $CLUSTER_NAME \

--location $LOCATION \

--enable-aad \

--aad-admin-group-object-ids $AAD_ADMIN_GROUP_ID \

--aad-tenant-id $AAD_TENANT_ID \

--node-count 2 \

--vm-set-type VirtualMachineScaleSets \

--enable-managed-identity</code></pre>

<p>Após criar o cluster, você obtém credenciais para acessá-lo. A primeira vez que um usuário tenta acessar o cluster via <code>kubectl</code>, ele é redirecionado para autenticação AAD:</p>

<pre><code class="language-bash"># Obter credenciais do cluster

az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --overwrite-existing

Na primeira execução, você será solicitado a fazer login no navegador

kubectl get nodes</code></pre>

<h3>Configurando RBAC com AAD</h3>

<p>Depois da autenticação, você controla o que cada usuário pode fazer usando RBAC. Crie um ClusterRoleBinding que atribua um grupo do AAD a um papel (role) específico:</p>

<pre><code class="language-yaml">apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: aks-developers-binding

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: edit

subjects:

  • kind: Group

name: &quot;aks-developers@seudominio.com&quot;

apiGroup: rbac.authorization.k8s.io</code></pre>

<p>Aplique este manifesto no seu cluster:</p>

<pre><code class="language-bash">kubectl apply -f clusterrolebinding.yaml</code></pre>

<p>Agora, qualquer membro do grupo <code>aks-developers</code> pode editar recursos (pods, deployments, etc.) no cluster, mas não pode criar ou deletar namespaces ou gerenciar RBAC.</p>

<h2>Integração com Azure Container Registry (ACR)</h2>

<h3>A necessidade de pull seguro de imagens</h3>

<p>Quando você executa containers no AKS, precisa que o cluster puxe imagens de algum lugar. O ACR é o registro de imagens nativo do Azure, integrado perfeitamente com AKS. A vantagem: você não precisa armazenar credenciais docker em secrets do Kubernetes. Em vez disso, usa Managed Identity, um mecanismo seguro onde o cluster se autentica automaticamente.</p>

<h3>Criando um ACR e integrando ao AKS</h3>

<p>Primeiro, crie um Azure Container Registry:</p>

<pre><code class="language-bash">#!/bin/bash

ACR_NAME=&quot;meuregistry&quot;

RESOURCE_GROUP=&quot;meu-rg&quot;

LOCATION=&quot;eastus&quot;

CLUSTER_NAME=&quot;meu-aks&quot;

Criar ACR

az acr create \

--resource-group $RESOURCE_GROUP \

--name $ACR_NAME \

--sku Standard \

--location $LOCATION

Habilitar integração entre AKS e ACR

az aks update \

--name $CLUSTER_NAME \

--resource-group $RESOURCE_GROUP \

--attach-acr $ACR_NAME</code></pre>

<p>Esse comando automaticamente configura o Managed Identity do AKS para ter permissão de pull no ACR. Nenhuma credencial extra necessária.</p>

<h3>Fazendo push de imagens e testando o pull</h3>

<p>Faça login no ACR e envie uma imagem de teste:</p>

<pre><code class="language-bash">#!/bin/bash

ACR_NAME=&quot;meuregistry&quot;

RESOURCE_GROUP=&quot;meu-rg&quot;

Fazer login no ACR

az acr login --name $ACR_NAME

Build de uma imagem local (exemplo simples)

cat &gt; Dockerfile &lt;&lt; &#039;EOF&#039;

FROM nginx:latest

RUN echo &quot;Hello from AKS&quot; &gt; /usr/share/nginx/html/index.html

EOF

docker build -t minha-imagem:v1 .

Tag da imagem com o repositório ACR

docker tag minha-imagem:v1 $ACR_NAME.azurecr.io/minha-imagem:v1

Push para ACR

docker push $ACR_NAME.azurecr.io/minha-imagem:v1</code></pre>

<p>Agora, crie um deployment no AKS que puxe essa imagem:</p>

<pre><code class="language-yaml">apiVersion: apps/v1

kind: Deployment

metadata:

name: nginx-deployment

namespace: default

spec:

replicas: 2

selector:

matchLabels:

app: nginx

template:

metadata:

labels:

app: nginx

spec:

containers:

  • name: nginx

image: meuregistry.azurecr.io/minha-imagem:v1

ports:

  • containerPort: 80</code></pre>

<pre><code class="language-bash">kubectl apply -f deployment.yaml

Verificar se os pods estão rodando

kubectl get pods</code></pre>

<p>Graças à integração Managed Identity, o AKS puxou a imagem do ACR sem você ter criado nenhum ImagePullSecret.</p>

<h2>Integração com Azure Monitor para Observabilidade</h2>

<h3>O tripé da observabilidade: logs, métricas e traces</h3>

<p>Azure Monitor é a plataforma de observabilidade do Azure. Quando integrado ao AKS, coleta logs de seus containers, métricas de CPU/memória, eventos do cluster e muito mais. Essa visibilidade é crítica em produção: você sabe quando algo está errado antes que seus usuários reclamem.</p>

<h3>Habilitando Container Insights no AKS</h3>

<p>Container Insights é a solução de monitoramento específica para containers. Habilite durante a criação do cluster ou em um cluster existente:</p>

<pre><code class="language-bash">#!/bin/bash

RESOURCE_GROUP=&quot;meu-rg&quot;

CLUSTER_NAME=&quot;meu-aks&quot;

Se o cluster já existe, habilitar Container Insights

az aks enable-addons \

--resource-group $RESOURCE_GROUP \

--name $CLUSTER_NAME \

--addons monitoring \

--workspace-resource-id &quot;/subscriptions/SEU_ID_SUBSCRIPTION/resourcegroups/$RESOURCE_GROUP/providers/microsoft.operationalinsights/workspaces/SEU_WORKSPACE&quot;</code></pre>

<p>Se você não tem um Log Analytics Workspace, crie um:</p>

<pre><code class="language-bash">WORKSPACE_NAME=&quot;meu-workspace&quot;

az monitor log-analytics workspace create \

--resource-group $RESOURCE_GROUP \

--workspace-name $WORKSPACE_NAME</code></pre>

<h3>Consultando logs e métricas</h3>

<p>Depois de habilitar, o Container Insights começa a coletar dados. Você pode consultar tudo via Azure Portal ou usar queries KQL (Kusto Query Language). No portal, vá para seu cluster AKS → Insights.</p>

<p>Para consultas avançadas, use o Log Analytics Workspace diretamente:</p>

<pre><code class="language-kusto">// Listar todos os pods e seu uso de CPU/memória

ContainerInventory

where TimeGenerated &gt; ago(1h) | join kind=inner (Perf | where ObjectName == &quot;K8SContainer&quot;) on ContainerID | project ContainerName, PodName, CpuPercent, MemoryRss | sort by CpuPercent desc</code></pre>

<pre><code class="language-kusto">// Contar restarts de containers nos últimos 24h

ContainerInventory

where TimeGenerated &gt; ago(24h) | where ContainerState == &quot;Restarting&quot; | summarize RestartCount = count() by ContainerName, PodName</code></pre>

<h3>Alertas baseados em métricas</h3>

<p>Crie um alerta que o notifique quando um pod consome mais de 80% de CPU:</p>

<pre><code class="language-bash">#!/bin/bash

ALERT_NAME=&quot;alert-cpu-alto&quot;

RESOURCE_GROUP=&quot;meu-rg&quot;

CLUSTER_NAME=&quot;meu-aks&quot;

WORKSPACE_RESOURCE_ID=&quot;/subscriptions/SEU_ID/resourcegroups/$RESOURCE_GROUP/providers/microsoft.operationalinsights/workspaces/meu-workspace&quot;

az monitor metrics alert create \

--name $ALERT_NAME \

--resource-group $RESOURCE_GROUP \

--scopes $WORKSPACE_RESOURCE_ID \

--condition &quot;avg Percentage CPU &gt; 80&quot; \

--window-size 5m \

--evaluation-frequency 1m \

--action email-receiver --email seu@email.com</code></pre>

<h3>Enviando logs customizados de sua aplicação</h3>

<p>Sua aplicação pode enviar logs estruturados para o Monitor. Use a Application Insights SDK em sua linguagem favorita. Aqui está um exemplo em Python:</p>

<pre><code class="language-python">from applicationinsights import TelemetryClient

import os

Obter a chave de instrumentação do Application Insights

instrumentation_key = os.getenv(&quot;APPINSIGHTS_INSTRUMENTATION_KEY&quot;)

client = TelemetryClient(instrumentation_key)

Registrar um evento de negócio

client.track_event(&quot;PedidoProcessado&quot;, {&quot;id_pedido&quot;: &quot;12345&quot;, &quot;valor&quot;: 99.99})

Registrar uma métrica customizada

client.track_metric(&quot;TempoProcessamento&quot;, 150) # em ms

Registrar um erro

try:

1 / 0

except Exception as e:

client.track_exception()

Enviar dados

client.flush()</code></pre>

<p>Configure a variável de ambiente no seu deployment:</p>

<pre><code class="language-yaml">apiVersion: apps/v1

kind: Deployment

metadata:

name: minha-app

spec:

replicas: 1

selector:

matchLabels:

app: minha-app

template:

metadata:

labels:

app: minha-app

spec:

containers:

  • name: app

image: meuregistry.azurecr.io/minha-app:v1

env:

  • name: APPINSIGHTS_INSTRUMENTATION_KEY

valueFrom:

secretKeyRef:

name: appinsights-secret

key: instrumentation-key

ports:

  • containerPort: 8000</code></pre>

<p>Crie o secret com a chave:</p>

<pre><code class="language-bash">INSTRUMENTATION_KEY=&quot;seu-chave-aqui&quot;

kubectl create secret generic appinsights-secret \

--from-literal=instrumentation-key=$INSTRUMENTATION_KEY</code></pre>

<h2>Colocando tudo junto: um cenário real</h2>

<p>Você tem uma aplicação Python que processa pedidos. Quer rodar no AKS com segurança corporativa (AAD), imagens armazenadas seguramente (ACR) e monitoramento completo (Monitor). Aqui está o fluxo completo:</p>

<ol>

<li><strong>Desenvolvedor faz login</strong>: Autentica via AAD. Seu grupo corporativo tem permissão de deploy no namespace &quot;production&quot;.</li>

</ol>

<ol>

<li><strong>Pipeline CI/CD</strong>: Build da aplicação, tag com versão, push para ACR automaticamente.</li>

</ol>

<ol>

<li><strong>Deploy no AKS</strong>: Kubernetes pull da imagem do ACR usando Managed Identity. Nenhuma credencial exposta.</li>

</ol>

<ol>

<li><strong>Telemetria em tempo real</strong>: Aplicação envia logs e métricas para Application Insights. Você vê erros, latência, uso de recursos em um dashboard unificado.</li>

</ol>

<p>Esse é o padrão moderno de entrega segura e observável de software no Azure.</p>

<h2>Conclusão</h2>

<p>Dominar a integração entre AKS, AAD, ACR e Azure Monitor significa que você não apenas roda containers, mas faz isso de forma segura, rastreável e eficiente. O <strong>primeiro aprendizado</strong> é que Managed Identity elimina a necessidade de armazenar credenciais — é autenticação baseada em confiança entre serviços Azure. O <strong>segundo aprendizado</strong> é que RBAC granular com AAD permite governança real de acesso sem complexidade operacional. O <strong>terceiro aprendizado</strong> é que observabilidade não é opcional — logs, métricas e alertas bem configurados te colocam em controle, não em reação.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://learn.microsoft.com/pt-br/azure/aks/" target="_blank" rel="noopener noreferrer">Documentação oficial do Azure Kubernetes Service</a></li>

<li><a href="https://learn.microsoft.com/pt-br/azure/aks/azure-ad-integration-cli" target="_blank" rel="noopener noreferrer">Integração do AKS com Azure Active Directory</a></li>

<li><a href="https://learn.microsoft.com/pt-br/azure/aks/cluster-container-registry-integration" target="_blank" rel="noopener noreferrer">Azure Container Registry e AKS — Managed Identity</a></li>

<li><a href="https://learn.microsoft.com/pt-br/azure/azure-monitor/containers/container-insights-overview" target="_blank" rel="noopener noreferrer">Container Insights para monitoramento do AKS</a></li>

<li><a href="https://learn.microsoft.com/pt-br/azure/data-explorer/kusto/query/" target="_blank" rel="noopener noreferrer">Kusto Query Language para análise de logs</a></li>

</ul>

<p>&lt;!-- FIM --&gt;</p>

Comentários

Mais em Docker & Kubernetes

Horizontal Pod Autoscaler: Métricas, Thresholds e Comportamento: Do Básico ao Avançado
Horizontal Pod Autoscaler: Métricas, Thresholds e Comportamento: Do Básico ao Avançado

Horizontal Pod Autoscaler: Visão Geral e Arquitetura O Horizontal Pod Autosca...

O que Todo Dev Deve Saber sobre Volumes em Docker: bind mounts, named volumes e tmpfs Comparados
O que Todo Dev Deve Saber sobre Volumes em Docker: bind mounts, named volumes e tmpfs Comparados

O Problema: Persistência de Dados em Containers Quando você cria um container...

O que Todo Dev Deve Saber sobre Docker Multi-stage Builds: Reduzindo Imagens de GB para MB na Prática
O que Todo Dev Deve Saber sobre Docker Multi-stage Builds: Reduzindo Imagens de GB para MB na Prática

O Problema: Por Que Nossas Imagens Docker São Tão Grandes? Quando você constr...