#!/bin/bash # ============================================================================= # Instala/Atualiza o NGINX Ingress Controller com LoadBalancer Hetzner # ============================================================================= # # Este script configura o NGINX Ingress para: # - Usar LoadBalancer da Hetzner (requer CCM instalado) # - Suportar TCP passthrough para SSH do GitLab # - Comunicação via rede privada # # Pré-requisitos: # - Cluster Kubernetes rodando # - Hetzner CCM instalado (./install-ccm.sh) # - Helm 3.x instalado # # Uso: # ./install-nginx-ingress.sh # # ============================================================================= set -e # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[OK]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERRO]${NC} $1"; } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # ============================================================================= # VERIFICAÇÕES # ============================================================================= log_info "Verificando pré-requisitos..." if ! command -v kubectl &> /dev/null; then log_error "kubectl não encontrado" exit 1 fi if ! command -v helm &> /dev/null; then log_error "Helm não encontrado" exit 1 fi # Verificar se CCM está instalado if ! kubectl get deployment hccm-hcloud-cloud-controller-manager -n kube-system &> /dev/null; then log_warn "Hetzner CCM não parece estar instalado" log_warn "Execute ./install-ccm.sh primeiro para LoadBalancer automático" read -p "Continuar mesmo assim? (y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi log_success "Pré-requisitos OK" # ============================================================================= # INSTALAR NGINX INGRESS # ============================================================================= log_info "Adicionando repositório Helm..." helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 2>/dev/null || true helm repo update log_info "Instalando/Atualizando NGINX Ingress Controller..." helm upgrade --install nginx-ingress ingress-nginx/ingress-nginx \ -n ingress-nginx \ --create-namespace \ -f "$SCRIPT_DIR/nginx-ingress-values.yaml" \ --wait \ --timeout 5m log_success "NGINX Ingress instalado!" # ============================================================================= # AGUARDAR LOADBALANCER # ============================================================================= log_info "Aguardando LoadBalancer receber IP externo..." echo "(pode levar 1-2 minutos)" for i in {1..60}; do EXTERNAL_IP=$(kubectl get svc nginx-ingress-ingress-nginx-controller \ -n ingress-nginx \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "") if [ -n "$EXTERNAL_IP" ] && [ "$EXTERNAL_IP" != "" ]; then break fi echo -n "." sleep 2 done echo "" if [ -n "$EXTERNAL_IP" ] && [ "$EXTERNAL_IP" != "" ]; then log_success "LoadBalancer IP: $EXTERNAL_IP" else log_warn "LoadBalancer ainda não tem IP. Verifique com:" echo " kubectl get svc -n ingress-nginx" fi # ============================================================================= # RESUMO # ============================================================================= echo "" echo "==============================================" echo -e "${GREEN} NGINX Ingress Configurado!${NC}" echo "==============================================" echo "" echo "LoadBalancer IP: ${EXTERNAL_IP:-}" echo "" echo "Portas expostas:" echo " - 80 (HTTP)" echo " - 443 (HTTPS)" echo " - 22 (SSH - para GitLab)" echo "" echo "Próximos passos:" echo " 1. Configure DNS apontando para o IP acima:" echo " - n8n.kube.quest → $EXTERNAL_IP" echo " - git.kube.quest → $EXTERNAL_IP" echo " - registry.git.kube.quest → $EXTERNAL_IP" echo "" echo " 2. Instale o GitLab:" echo " cd ../aula-09 && ./setup.sh" echo "" echo "=============================================="