Ana içeriğe geç

Dış Erişim (External Access) Çözümleri#

🗒️ Saha notu — ham komut/konfigürasyon dökümü. Olduğu gibi korunmuştur; kendi ortamına uyarla.

# 🌐 EXTERNAL ACCESS İÇİN ÇÖZÜMLER

# ══════════════════════════════════════════════════════════════
# 🚀 ÇÖZÜM 1: PORT-FORWARD İLE EXTERNAL ACCESS (Hızlı)
# ══════════════════════════════════════════════════════════════

echo "🛑 Önce mevcut port-forward'ları durdur:"
pkill -f "kubectl port-forward"

echo "🌐 External IP ile port-forward başlat:"

# --address 0.0.0.0 parametresi ile tüm interface'lere bind et
kubectl port-forward --address 0.0.0.0 service/user-frontend-service 8080:80 -n development &
kubectl port-forward --address 0.0.0.0 service/admin-frontend-service 8081:80 -n development &
kubectl port-forward --address 0.0.0.0 service/backend-service 8082:80 -n development &

echo "✅ External access port-forwards started!"
echo ""
echo "🌐 EXTERNAL ACCESS URLS:"
echo "http://<K8S_MASTER_IP>:8080 - User Frontend"
echo "http://<K8S_MASTER_IP>:8081 - Admin Frontend"  
echo "http://<K8S_MASTER_IP>:8082 - Backend API"

# ══════════════════════════════════════════════════════════════
# 🚀 ÇÖZÜM 2: NODEPORT SERVICE (Kalıcı Çözüm)
# ══════════════════════════════════════════════════════════════

echo ""
echo "🔧 KALICI ÇÖZÜM: NodePort Services"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# User Frontend'i NodePort'a çevir
kubectl patch service user-frontend-service -n development -p '{"spec":{"type":"NodePort","ports":[{"port":80,"targetPort":80,"nodePort":30080}]}}'

# Admin Frontend'i NodePort'a çevir  
kubectl patch service admin-frontend-service -n development -p '{"spec":{"type":"NodePort","ports":[{"port":80,"targetPort":80,"nodePort":30081}]}}'

# Backend'i NodePort'a çevir
kubectl patch service backend-service -n development -p '{"spec":{"type":"NodePort","ports":[{"port":80,"targetPort":80,"nodePort":30082}]}}'

echo "✅ NodePort services configured!"
echo ""
echo "🌐 NODEPORT ACCESS URLS (PORT-FORWARD GEREKSIZ):"
echo "http://<K8S_MASTER_IP>:30080 - User Frontend"
echo "http://<K8S_MASTER_IP>:30081 - Admin Frontend"
echo "http://<K8S_MASTER_IP>:30082 - Backend API"

# ══════════════════════════════════════════════════════════════
# 🚀 ÇÖZÜM 3: LOAD BALANCER (Production Ready)
# ══════════════════════════════════════════════════════════════

echo ""
echo "🏢 PRODUCTION ÇÖZÜM: LoadBalancer Services"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# LoadBalancer services (cloud provider gerekli)
cat << 'EOF' > loadbalancer-services.yaml
apiVersion: v1
kind: Service
metadata:
  name: user-frontend-lb
  namespace: development
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: user-frontend
---
apiVersion: v1
kind: Service  
metadata:
  name: admin-frontend-lb
  namespace: development
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: admin-frontend
---
apiVersion: v1
kind: Service
metadata:
  name: backend-lb
  namespace: development
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: backend
EOF

echo "📝 LoadBalancer services created in loadbalancer-services.yaml"
echo "Apply with: kubectl apply -f loadbalancer-services.yaml"

# ══════════════════════════════════════════════════════════════
# 🚀 ÇÖZÜM 4: INGRESS CONTROLLER (En Professional)
# ══════════════════════════════════════════════════════════════

echo ""
echo "🌟 PROFESSIONAL ÇÖZÜM: Ingress Controller"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# Nginx Ingress Controller kur
cat << 'EOF' > install-ingress.sh
#!/bin/bash
echo "🚀 Installing Nginx Ingress Controller..."

# Nginx Ingress Controller kur
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/baremetal/deploy.yaml

# NodePort olarak expose et (bare metal için)
kubectl patch service ingress-nginx-controller -n ingress-nginx -p '{"spec":{"type":"NodePort","ports":[{"port":80,"targetPort":80,"nodePort":30080,"name":"http"},{"port":443,"targetPort":443,"nodePort":30443,"name":"https"}]}}'

echo "✅ Ingress Controller installed!"
echo "HTTP: http://<K8S_MASTER_IP>:30080"
echo "HTTPS: https://<K8S_MASTER_IP>:30443"
EOF

chmod +x install-ingress.sh

# Ingress manifests oluştur
cat << 'EOF' > ingress-manifests.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ikpanel-ingress
  namespace: development
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: user.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: user-frontend-service
            port:
              number: 80
  - host: admin.local  
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: admin-frontend-service
            port:
              number: 80
  - host: api.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 80
---
# Path-based routing alternatifi
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ikpanel-path-ingress
  namespace: development
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: ikpanel.local
    http:
      paths:
      - path: /user(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: user-frontend-service
            port:
              number: 80
      - path: /admin(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: admin-frontend-service
            port:
              number: 80
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 80
EOF

echo "📝 Ingress manifests created in ingress-manifests.yaml"

# ══════════════════════════════════════════════════════════════
# 🛠️ FIREWALL VE NETWORK AYARLARI
# ══════════════════════════════════════════════════════════════

echo ""
echo "🛡️ FIREWALL CONFIGURATION"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# UFW firewall rules (Ubuntu/Debian)
cat << 'EOF' > firewall-setup.sh
#!/bin/bash
echo "🛡️ Configuring firewall for Kubernetes access..."

# NodePort range için firewall açma
sudo ufw allow 30080:30090/tcp comment "Kubernetes NodePort Services"

# Specific ports
sudo ufw allow 8080/tcp comment "User Frontend Port Forward"
sudo ufw allow 8081/tcp comment "Admin Frontend Port Forward"  
sudo ufw allow 8082/tcp comment "Backend Port Forward"

# Kubernetes cluster communication
sudo ufw allow 6443/tcp comment "Kubernetes API Server"
sudo ufw allow 10250/tcp comment "Kubelet API"

echo "✅ Firewall rules added"
sudo ufw status numbered
EOF

chmod +x firewall-setup.sh

# iptables rules (Alternative)
cat << 'EOF' > iptables-setup.sh
#!/bin/bash
echo "🛡️ Configuring iptables for Kubernetes access..."

# Port forward trafiği için iptables kuralları
sudo iptables -A INPUT -p tcp --dport 8080:8082 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 30080:30090 -j ACCEPT

# Persistent olması için
sudo iptables-save > /etc/iptables/rules.v4

echo "✅ iptables rules configured"
EOF

chmod +x iptables-setup.sh

# ══════════════════════════════════════════════════════════════
# 📊 STATUS CHECK SCRIPT
# ══════════════════════════════════════════════════════════════

cat << 'EOF' > check-access.sh
#!/bin/bash
echo "🔍 KUBERNETES ACCESS STATUS CHECK"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

SERVER_IP="<K8S_MASTER_IP>"

echo "1️⃣ Port Forward Status:"
ps aux | grep "kubectl port-forward" | grep -v grep || echo "No active port forwards"

echo -e "\n2️⃣ NodePort Services:"
kubectl get services -n development -o wide | grep NodePort

echo -e "\n3️⃣ Port Connectivity Test:"
# Test port-forward ports
for port in 8080 8081 8082; do
    if netstat -tuln | grep -q ":$port "; then
        echo "✅ Port $port is open"
        # Test HTTP response
        response=$(curl -s -o /dev/null -w "%{http_code}" http://$SERVER_IP:$port --connect-timeout 5)
        echo "   HTTP Response: $response"
    else
        echo "❌ Port $port is not open"
    fi
done

echo -e "\n4️⃣ NodePort Connectivity Test:"
# Test NodePort ports  
for port in 30080 30081 30082; do
    if netstat -tuln | grep -q ":$port "; then
        echo "✅ NodePort $port is open"
        response=$(curl -s -o /dev/null -w "%{http_code}" http://$SERVER_IP:$port --connect-timeout 5)
        echo "   HTTP Response: $response"
    else
        echo "❌ NodePort $port is not available"
    fi
done

echo -e "\n5️⃣ Pod Status:"
kubectl get pods -n development -o wide

echo -e "\n6️⃣ Service Endpoints:"
kubectl get endpoints -n development

echo -e "\n📋 RECOMMENDED ACCESS METHODS:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Port Forward (if active):"
echo "   http://$SERVER_IP:8080 - User Frontend"
echo "   http://$SERVER_IP:8081 - Admin Frontend"
echo "   http://$SERVER_IP:8082 - Backend API"
echo ""
echo "🏗️ NodePort (permanent):"
echo "   http://$SERVER_IP:30080 - User Frontend"
echo "   http://$SERVER_IP:30081 - Admin Frontend"
echo "   http://$SERVER_IP:30082 - Backend API"
EOF

chmod +x check-access.sh

echo ""
echo "🎯 INSTANT FIX - Bu komutu çalıştır:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "pkill -f 'kubectl port-forward' && sleep 2"
echo "kubectl port-forward --address 0.0.0.0 service/user-frontend-service 8080:80 -n development &"
echo "kubectl port-forward --address 0.0.0.0 service/admin-frontend-service 8081:80 -n development &"
echo "kubectl port-forward --address 0.0.0.0 service/backend-service 8082:80 -n development &"
echo ""
echo "✅ Then access: http://<K8S_MASTER_IP>:8080"