#!/bin/bash # Verification script for nginx-load-balancer fixes # Tests the applied configuration changes set -e echo "๐Ÿ” nginx-load-balancer Fix Verification" echo "======================================" echo "" # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # No Color echo "๐Ÿ” Checking if fixes were applied..." echo "" # Check 1: Verify current pods distribution echo "๐Ÿ“ Step 1: Checking pod distribution..." PODS=$(kubectl get pods -l app=nginx-load-balancer -o wide) if echo "$PODS" | grep -q "master"; then echo -e "${RED}โŒ ISSUE: Pods found on master nodes (node affinity fix not working)${NC}" echo "$PODS" else echo -e "${GREEN}โœ… GOOD: No pods on master nodes (node affinity working)${NC}" fi echo "$PODS" echo "" # Check 2: Count pods per node type echo "๐Ÿ“Š Step 2: Analyzing pod distribution by node type..." WORKER_PODS=$(echo "$PODS" | grep -v "master" | grep -v "NAME" | wc -l) TOTAL_PODS=$(echo "$PODS" | grep -v "NAME" | wc -l) echo "Total pods running: $TOTAL_PODS" echo "Pods on worker nodes: $WORKER_PODS" if [ "$WORKER_PODS" -eq 3 ] && [ "$TOTAL_PODS" -eq 3 ]; then echo -e "${GREEN}โœ… EXPECTED: 3 pods on 3 worker nodes only${NC}" else echo -e "${YELLOW}โš ๏ธ UNEXPECTED: Expected 3 pods on 3 worker nodes${NC}" fi echo "" # Check 3: Service configuration echo "๐Ÿ”ง Step 3: Checking service configuration..." SERVICE=$(kubectl get svc nginx-load-balancer-service -o yaml) if echo "$SERVICE" | grep -q "externalTrafficPolicy: Local"; then echo -e "${RED}โŒ ISSUE: externalTrafficPolicy: Local still present${NC}" echo " This may cause LoadBalancer IP issues" else echo -e "${GREEN}โœ… GOOD: externalTrafficPolicy: Local removed${NC}" fi if echo "$SERVICE" | grep -q "type: LoadBalancer"; then echo -e "${GREEN}โœ… GOOD: Service type is LoadBalancer${NC}" else echo -e "${RED}โŒ ISSUE: Service type is not LoadBalancer${NC}" fi echo "" # Check 4: LoadBalancer IP availability echo "๐ŸŒ Step 4: Checking LoadBalancer IP..." SERVICE_STATUS=$(kubectl get svc nginx-load-balancer-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}') SERVICE_PORT=$(kubectl get svc nginx-load-balancer-service -o jsonpath='{.spec.ports[0].port}') if [ -n "$SERVICE_STATUS" ]; then echo -e "${GREEN}โœ… GOOD: LoadBalancer IP assigned: $SERVICE_STATUS${NC}" echo " Full URL: http://$SERVICE_STATUS:$SERVICE_PORT" # Test LoadBalancer IP echo "" echo "๐Ÿงช Testing LoadBalancer IP access..." if timeout 10 curl -s -f "http://$SERVICE_STATUS:$SERVICE_PORT" > /dev/null 2>&1; then echo -e "${GREEN}โœ… GOOD: LoadBalancer IP is accessible${NC}" else echo -e "${RED}โŒ ISSUE: LoadBalancer IP is not accessible${NC}" echo " Try: curl -6 'http://[$SERVICE_STATUS]:$SERVICE_PORT'" fi else echo -e "${YELLOW}โš ๏ธ WAITING: LoadBalancer IP not yet assigned${NC}" fi echo "" # Check 5: Node access (dual access pattern) echo "๐Ÿ”— Step 5: Testing dual access pattern..." # Get a node IP for testing NODE_IPS=$(kubectl get nodes -o jsonpath='{range .items[*]}{.status.addresses[?@.type=="InternalIP"].address}{"\n"}{end}' | head -3) WORKER_COUNT=0 for node_ip in $NODE_IPS; do echo "Testing node: $node_ip" # Test direct node access if timeout 5 curl -s -f "http://$node_ip:8080" > /dev/null 2>&1; then echo -e "${GREEN} โœ… Direct node access works${NC}" WORKER_COUNT=$((WORKER_COUNT + 1)) else echo -e "${YELLOW} โš ๏ธ Direct node access failed${NC}" fi done echo "Nodes with working direct access: $WORKER_COUNT" echo "" # Check 6: Deployment configuration echo "โš™๏ธ Step 6: Checking deployment configuration..." DEPLOYMENT=$(kubectl get deployment nginx-load-balancer -o yaml) if echo "$DEPLOYMENT" | grep -q "requiredDuringSchedulingIgnoredDuringExecution"; then echo -e "${GREEN}โœ… GOOD: Hard node affinity configured${NC}" else echo -e "${RED}โŒ ISSUE: Hard node affinity not found${NC}" fi if echo "$DEPLOYMENT" | grep -q "node-role.kubernetes.io/master"; then echo -e "${GREEN}โœ… GOOD: Node role filtering configured${NC}" else echo -e "${YELLOW}โš ๏ธ WARNING: Node role filtering may be missing${NC}" fi echo "" # Summary echo "======================================" echo "๐Ÿ“Š VERIFICATION SUMMARY" echo "======================================" echo "" if echo "$PODS" | grep -q "master"; then echo -e "${RED}โŒ NODE AFFINITY: Pods on master nodes (need fix)${NC}" else echo -e "${GREEN}โœ… NODE AFFINITY: Pods on worker nodes only${NC}" fi if [ -n "$SERVICE_STATUS" ]; then echo -e "${GREEN}โœ… LOADBALANCER: IP assigned ($SERVICE_STATUS)${NC}" else echo -e "${YELLOW}โš ๏ธ LOADBALANCER: IP not assigned yet${NC}" fi echo -e "${BLUE}๐ŸŽฏ DUAL ACCESS: Both LoadBalancer IP and node access should work${NC}" echo "" echo "๐Ÿ”ง Next steps if issues found:" echo "1. Apply fixes: kubectl apply -f nginx-load-balancer-deployment.yaml" echo "2. Apply service: kubectl apply -f nginx-load-balancer-service.yaml" echo "3. Restart deployment: kubectl rollout restart deployment/nginx-load-balancer" echo "4. Re-run this verification script" echo "" echo "โœ… Verification complete!"