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:
+13
-42
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user