17: Service LoadBalancer

Service LoadBalancer w Kubernetes na Azure AKS

Cel zadania

Zrozumienie działania Service typu LoadBalancer w Azure AKS poprzez praktyczne ćwiczenia z wykorzystaniem publicznego i wewnętrznego Load Balancera.

Teoria

Service LoadBalancer w Azure AKS

  • LoadBalancer Service: Rozszerza funkcjonalność ClusterIP i automatycznie tworzy Azure Load Balancer
  • Publiczny LoadBalancer: Zapewnia zewnętrzny dostęp do aplikacji z internetu
  • Internal LoadBalancer: Ogranicza dostęp do sieci VNET
  • Dziedziczenie: Zachowuje wszystkie funkcje ClusterIP plus dodaje zewnętrzny dostęp

Ważne informacje

  • Każdy Service typu LoadBalancer automatycznie otrzymuje ClusterIP
  • W przypadku Internal LoadBalancer, dostęp jest ograniczony do sieci VNET
  • Można stosować różne annotacje do konfiguracji zachowania Load Balancera

ClusterIP vs LoadBalancer

Cecha ClusterIP LoadBalancer
Dostępność Tylko wewnątrz klastra Z internetu (publiczny IP)
Użycie Komunikacja między serwisami Udostępnienie aplikacji użytkownikom
Cena Darmowy Koszt chmurowego Load Balancera

LoadBalancer to rozszerzenie ClusterIP — nie zamiennik. Każdy LoadBalancer Service automatycznie posiada ClusterIP.

Diagram: Przepływ ruchu

graph LR
    INET["Internet<br/>(użytkownicy)"]
    ALB["Azure Load Balancer<br/>(publiczny IP)"]
    SVC["Service: LoadBalancer<br/>(ClusterIP + External IP)"]

    subgraph CLUSTER["Klaster Kubernetes"]
        P1["Pod 1<br/>nginx"]
        P2["Pod 2<br/>nginx"]
        P3["Pod 3<br/>nginx"]
    end

    INET -->|"HTTP request"| ALB
    ALB -->|"przekazuje"| SVC
    SVC -->|"load balancing"| P1
    SVC -->|"load balancing"| P2
    SVC -->|"load balancing"| P3

    style ALB fill:#e3f2fd,stroke:#1976d2
    style SVC fill:#fff3e0,stroke:#f57c00
    style CLUSTER fill:#f0f4ff

Zadanie 1: Publiczny LoadBalancer

Krok 1: Deployment nginx

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-XX
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-XX
  template:
    metadata:
      labels:
        app: nginx-XX
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"
            cpu: "200m"

Krok 2: Public LoadBalancer Service

apiVersion: v1
kind: Service
metadata:
  name: nginx-public-lb-XX
spec:
  type: LoadBalancer
  selector:
    app: nginx-XX
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

Wdrożenie i testowanie:

  1. Utwórz Deployment:
    kubectl apply -f nginx-deployment-XX.yaml
    
  2. Utwórz Service:
    kubectl apply -f nginx-public-lb-XX.yaml
    
  3. Sprawdź status Service i pobierz publiczny IP:
    kubectl get svc nginx-public-lb-XX -w
    
  4. Test dostępu:
    • Otwórz przeglądarkę internetową
    • Wpisz publiczny IP Load Balancera
    • Powinieneś zobaczyć stronę powitalną nginx

Zadanie 2: Internal LoadBalancer

Internal LoadBalancer Service

apiVersion: v1
kind: Service
metadata:
  name: nginx-internal-lb-XX
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  selector:
    app: nginx-XX
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

Wdrożenie i weryfikacja:

  1. Utwórz Internal LoadBalancer Service:
    kubectl apply -f nginx-internal-lb-XX.yaml
    
  2. Sprawdź status Service:
    kubectl get svc nginx-internal-lb-XX
    
  3. Weryfikacja w Azure Portal:
    • Przejdź do portalu Azure
    • Znajdź grupę zasobów MC_* związaną z klastrem AKS
    • Zlokalizuj Load Balancer z typem “Internal”
    • Sprawdź konfigurację Frontend IP i Backend Pools

Przydatne komendy diagnostyczne

# Sprawdź szczegóły Service
kubectl describe svc nginx-public-lb-XX
kubectl describe svc nginx-internal-lb-XX

# Sprawdź endpointy
kubectl get endpoints nginx-public-lb-XX
kubectl get endpoints nginx-internal-lb-XX

# Sprawdź wydarzenia w klastrze
kubectl get events

Najczęstsze problemy

Problem Rozwiązanie
LoadBalancer w stanie pending Sprawdź uprawnienia Service Principal/Managed Identity
Brak dostępu do aplikacji Sprawdź Network Security Groups (NSG)
Health probe fails Zweryfikuj konfigurację health probe w Azure Portal
Nieprawidłowe endpointy Sprawdź selector w Service i labels w Pod

Dobre praktyki

  1. Używaj odpowiednich annotacji
    • Dostosuj timeout dla health probe
    • Skonfiguruj idle timeout dla połączeń
    • Ustaw odpowiednie tagi dla zasobów Azure
  2. Monitorowanie i diagnostyka
    • Regularnie sprawdzaj status endpointów
    • Monitoruj metryki Load Balancera w Azure
    • Konfiguruj alerty dla problemów z health probe
  3. Bezpieczeństwo
    • Używaj NSG do kontroli dostępu
    • Rozważ użycie Internal LoadBalancer dla aplikacji wewnętrznych
    • Implementuj HTTPS dla ruchu zewnętrznego

Podsumowanie

  • LoadBalancer Service zapewnia zewnętrzny dostęp do aplikacji
  • Może być skonfigurowany jako publiczny lub wewnętrzny
  • Dziedziczy wszystkie funkcje ClusterIP
  • Jest integralną częścią infrastruktury Azure
  • Wymaga odpowiedniej konfiguracji uprawnień i zabezpieczeń

Przydatne linki

results matching ""

    No results matching ""