feat: adicionar aula-16 (Flagger), remover Jaeger da aula-14 e integrar tracing Istio na aula-15

- aula-16: nova aula de canary deployment automatizado com Flagger
- aula-14: removido Jaeger (tracing movido para aula-15), corrigido
  nome do serviço Victoria Metrics, adicionado rate limiting no Kiali
- aula-15: adicionado receiver Zipkin no OTel Collector para receber
  traces do Istio, corrigida porta do Tempo (3100→3200), integração
  automática com Istio quando detectado
- aula-03: corrigido MAX_REQUESTS de 10 para 3 (valor padrão)
- CLAUDE.md: adicionada aula-16 na documentação
This commit is contained in:
ArgoCD Setup
2026-04-10 08:43:01 -03:00
parent 6ae82ed183
commit 60e69c9ff6
15 changed files with 1397 additions and 129 deletions
+13 -42
View File
@@ -2,18 +2,16 @@
# ============================================================================
# Aula 14 - Istio Traffic Splitting
# ============================================================================
# Instala Istio com Kiali e Jaeger para demonstrar canary deployment
# Instala Istio com Kiali para demonstrar canary deployment
# usando traffic splitting entre duas versões da aplicação.
#
# Componentes:
# - Istio (istio-base + istiod)
# - Kiali (visualização do service mesh)
# - Jaeger (tracing distribuído)
# - Aplicação app-backend v1 e v2
#
# Observabilidade:
# - Usa Victoria Metrics da aula-12 para métricas
# - Jaeger para tracing distribuído
#
# Pré-requisitos:
# - Cluster Kubernetes da aula-08
@@ -61,7 +59,6 @@ REGISTRY_HOST=${REGISTRY_HOST}
REGISTRY_PROJECT=${REGISTRY_PROJECT}
APP_HOST=${APP_HOST}
KIALI_HOST=${KIALI_HOST}
JAEGER_HOST=${JAEGER_HOST}
USE_LETSENCRYPT=${USE_LETSENCRYPT}
LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
BASIC_AUTH_USER=${BASIC_AUTH_USER}
@@ -96,7 +93,6 @@ collect_user_input() {
echo -e " Registry: ${GREEN}${REGISTRY_HOST}${NC}"
echo -e " App: ${GREEN}${APP_HOST}${NC}"
echo -e " Kiali: ${GREEN}${KIALI_HOST}${NC}"
echo -e " Jaeger: ${GREEN}${JAEGER_HOST}${NC}"
echo ""
echo -e "[1] Usar configuração existente"
echo -e "[2] Inserir nova configuração"
@@ -119,7 +115,6 @@ collect_user_input() {
echo ""
APP_HOST=$(ask_hostname "App" "$APP_HOST" "app.${INHERITED_DOMAIN}")
KIALI_HOST=$(ask_hostname "Kiali" "$KIALI_HOST" "kiali.${INHERITED_DOMAIN}")
JAEGER_HOST=$(ask_hostname "Jaeger" "$JAEGER_HOST" "jaeger.${INHERITED_DOMAIN}")
# Owner/repo no Gitea para o registry (ex: root, demo, factory)
if [[ -z "$REGISTRY_PROJECT" ]]; then
@@ -149,9 +144,9 @@ collect_user_input() {
USE_LETSENCRYPT=false
fi
# Basic Auth para Kiali e Jaeger
# Basic Auth para Kiali
echo ""
echo -e "${CYAN}Autenticação para Kiali e Jaeger:${NC}"
echo -e "${CYAN}Autenticação para Kiali:${NC}"
if [[ -z "$BASIC_AUTH_USER" ]]; then
BASIC_AUTH_USER="admin"
fi
@@ -204,9 +199,9 @@ check_prerequisites() {
log_success "Cluster Kubernetes acessível"
# Verificar Victoria Metrics (aula-12)
if kubectl get svc -n monitoring vmsingle-victoria-metrics-k8s-stack &> /dev/null; then
if kubectl get svc -n monitoring vmsingle-monitoring-victoria-metrics-k8s-stack &> /dev/null; then
log_success "Victoria Metrics encontrado (aula-12)"
VICTORIA_METRICS_URL="http://vmsingle-victoria-metrics-k8s-stack.monitoring:8429"
VICTORIA_METRICS_URL="http://vmsingle-monitoring-victoria-metrics-k8s-stack.monitoring:8429"
else
log_warn "Victoria Metrics não encontrado. Instale a aula-12 primeiro."
log_warn "Kiali funcionará sem métricas até Victoria Metrics estar disponível."
@@ -274,14 +269,9 @@ install_istio() {
install_observability() {
echo ""
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${CYAN} Instalando Kiali e Jaeger${NC}"
echo -e "${CYAN} Instalando Kiali${NC}"
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
log_info "Instalando Jaeger..."
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/addons/jaeger.yaml 2>/dev/null || true
log_success "Jaeger instalado"
# Instalar Kiali com configuração para Victoria Metrics
log_info "Instalando Kiali..."
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/addons/kiali.yaml 2>/dev/null || true
@@ -290,18 +280,16 @@ install_observability() {
log_info "Configurando Kiali para usar Victoria Metrics..."
kubectl patch configmap kiali -n istio-system --type merge -p "{
\"data\": {
\"config.yaml\": \"external_services:\\n prometheus:\\n url: ${VICTORIA_METRICS_URL}\\n tracing:\\n enabled: true\\n in_cluster_url: http://tracing.istio-system:16685/jaeger\\n use_grpc: true\\n\"
\"config.yaml\": \"auth:\\n strategy: anonymous\\nlogin_token:\\n signing_key: kiali-signing-key-1234\\nserver:\\n web_root: /kiali\\nexternalservices:\\n prometheus:\\n url: ${VICTORIA_METRICS_URL}\\n tracing:\\n enabled: false\\n grafana:\\n enabled: false\\n\"
}
}" 2>/dev/null || true
# Reiniciar Kiali para aplicar configuração
kubectl rollout restart deployment/kiali -n istio-system 2>/dev/null || true
fi
log_success "Kiali instalado"
log_info "Aguardando pods de observabilidade..."
log_info "Aguardando Kiali..."
kubectl wait --for=condition=available deployment/kiali -n istio-system --timeout=300s 2>/dev/null || true
kubectl wait --for=condition=available deployment/jaeger -n istio-system --timeout=300s 2>/dev/null || true
log_success "Observabilidade pronta"
log_success "Kiali pronto"
}
# ============================================================================
@@ -311,7 +299,7 @@ install_observability() {
setup_basic_auth() {
echo ""
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${CYAN} Configurando Basic Auth para Kiali e Jaeger${NC}"
echo -e "${CYAN} Configurando Basic Auth para Kiali${NC}"
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
log_info "Criando secret basic-auth..."
@@ -340,7 +328,7 @@ setup_basic_auth() {
setup_ingress() {
echo ""
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${CYAN} Configurando Ingress para Kiali e Jaeger${NC}"
echo -e "${CYAN} Configurando Ingress para Kiali${NC}"
echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}"
local TLS_ANNOTATION=""
@@ -360,19 +348,6 @@ setup_ingress() {
export KIALI_HOST TLS_ANNOTATION TLS_CONFIG
envsubst '${KIALI_HOST} ${TLS_ANNOTATION} ${TLS_CONFIG}' < "${SCRIPT_DIR}/k8s/ingress-kiali.yaml" | kubectl apply -f -
log_success "Ingress do Kiali criado"
log_info "Criando Ingress para Jaeger..."
if [[ "$USE_LETSENCRYPT" == "true" ]]; then
TLS_CONFIG="tls:
- hosts:
- ${JAEGER_HOST}
secretName: jaeger-tls"
else
TLS_CONFIG=""
fi
export JAEGER_HOST TLS_ANNOTATION TLS_CONFIG
envsubst '${JAEGER_HOST} ${TLS_ANNOTATION} ${TLS_CONFIG}' < "${SCRIPT_DIR}/k8s/ingress-jaeger.yaml" | kubectl apply -f -
log_success "Ingress do Jaeger criado"
}
setup_app_ingress() {
@@ -521,7 +496,6 @@ show_summary() {
echo -e "${GREEN}Componentes instalados:${NC}"
echo " - Istio (istiod + base)"
echo " - Kiali (dashboard do service mesh)"
echo " - Jaeger (tracing distribuído)"
echo " - app-backend v1 e v2"
echo ""
if [[ -n "$VICTORIA_METRICS_URL" ]]; then
@@ -532,10 +506,9 @@ show_summary() {
echo ""
echo -e "${GREEN}URLs:${NC}"
echo -e " App: ${CYAN}${protocol}://${APP_HOST}${NC}"
echo -e " Kiali: ${CYAN}${protocol}://${KIALI_HOST}${NC}"
echo -e " Jaeger: ${CYAN}${protocol}://${JAEGER_HOST}${NC}"
echo -e " Kiali: ${CYAN}${protocol}://${KIALI_HOST}/kiali/${NC}"
echo ""
echo -e "${GREEN}Credenciais (Basic Auth para Kiali/Jaeger):${NC}"
echo -e "${GREEN}Credenciais (Basic Auth para Kiali):${NC}"
echo -e " Usuário: ${CYAN}${BASIC_AUTH_USER}${NC}"
echo -e " Senha: ${CYAN}${BASIC_AUTH_PASS}${NC}"
echo ""
@@ -562,7 +535,6 @@ show_summary() {
echo -e "${YELLOW}Configure DNS para:${NC}"
echo " ${APP_HOST} -> IP do Ingress"
echo " ${KIALI_HOST} -> IP do Ingress"
echo " ${JAEGER_HOST} -> IP do Ingress"
echo ""
}
@@ -596,7 +568,6 @@ main() {
echo ""
echo -e " ${YELLOW}${APP_HOST}${NC}"
echo -e " ${YELLOW}${KIALI_HOST}${NC}"
echo -e " ${YELLOW}${JAEGER_HOST}${NC}"
echo ""
if [[ "$USE_LETSENCRYPT" == "true" ]]; then
echo -e "${YELLOW}⚠ O Let's Encrypt precisa do DNS configurado para emitir o certificado.${NC}"