Diagnostika konektivity medzi podmi a službami v k3s

Vytvorené: 24. 8. 2025 08:40 Aktualizované: 27. 8. 2025 13:14
Vyriešené
Obsah článku

-----

```yaml
title: "Diagnostika konektivity medzi podmi a službami v k3s"
slug: "k3s-diagnostika-konektivita-podov-a-sluzieb"
technologies: ["k3s", "Kubernetes", "kubectl", "netcat", "ping", "ufw", "iptables"]
tags: ["k3s", "networking", "connectivity", "firewall", "pod-to-pod", "troubleshooting", "diagnostika"]
date_solved: "2025-08-19"

Projekt/Téma: Overenie priamej sieťovej konektivity medzi podmi a funkčnosti Kubernetes služieb (Services).

1. Cieľ / Problém na vyriešenie: Diagnostikovať situácie, kedy DNS resolúcia funguje, ale pokus o pripojenie na inú službu alebo pod zlyháva (napr. connection timeout). Cieľom je overiť priechodnosť siete na úrovni L4 (TCP/UDP) medzi podmi a skontrolovať, či hostiteľské firewally neblokujú potrebnú komunikáciu.

2. Použité technológie a nástroje:

  • kubectl exec: Na spúšťanie príkazov vo vnútri bežiacich kontajnerov.
  • netcat (nc): Univerzálny nástroj na testovanie TCP/UDP konektivity.
  • ping: Nástroj na testovanie L3 (IP) konektivity.
  • ufw, iptables: Nástroje na správu a inšpekciu firewallu na hostiteľských Linux systémoch.

3. Kľúčové postupy a konfiguračné kroky:

  1. Pripojenie sa do zdrojového podu: Použiť kubectl exec na získanie interaktívneho shellu v pode, z ktorého chceme testovať konektivitu.
  2. Test pripojenia na službu (Service): Z vnútra podu použiť nc na otestovanie spojenia na cieľovú službu (napr. mysql-service.default.svc.cluster.local) na špecifickom porte.
  3. Test pripojenia na IP adresu podu: Ak zlyháva spojenie na službu, otestovať priame spojenie na IP adresu jedného z cieľových podov pomocou ping alebo nc. Tým sa izoluje problém buď v kube-proxy/serviceLB alebo v CNI.
  4. Kontrola hostiteľského firewallu: Prihlásiť sa na fyzický node a skontrolovať pravidlá ufw alebo iptables, aby sa zaistilo, že neblokujú komunikáciu potrebnú pre CNI (napr. VXLAN, BGP porty).

4. Výsledné kódy a skripty:

  • Test konektivity z vnútra podu:

    # Test spojenia na ClusterIP/DNS meno služby na danom porte
    kubectl exec -it -n <namespace> <pod-name> -- nc -zv <target-service>.<namespace>.svc.cluster.local <port>
    
    # Test spojenia priamo na IP adresu iného podu
    kubectl exec -it -n <namespace> <pod-name> -- ping -c 4 <target-pod-ip>
  • Kontrola firewallu na hostiteľskom node:

    # Zobrazenie stavu a pravidiel UFW (Uncomplicated Firewall)
    sudo ufw status
    
    # Detailný výpis všetkých iptables pravidiel
    sudo iptables -L -n -v

5. Zistené problémy a riešenia (Gotchas):

  • Problém: ping na IP podu funguje, ale nc na port služby nie.
    • Riešenie: Problém je pravdepodobne v mechanizme Kubernetes Services (kube-proxy alebo serviceLB). Skontrolujte logy a stav týchto komponentov. Môže byť tiež aktívna NetworkPolicy, ktorá blokuje spojenie.
  • Problém: ping na IP iného podu na inom node nefunguje.
    • Riešenie: Problém je v CNI plugine (napr. Calico) alebo v sieťovej infraštruktúre medzi nodmi. Skontrolujte CNI logy a overte, či firewall na nodoch alebo fyzický sieťový prvok neblokuje overlay sieť (napr. UDP port pre VXLAN).
  • Problém: Nástroje ping alebo nc nie sú v kontajneri dostupné.
    • Riešenie: Použite kontajnerový obraz, ktorý tieto nástroje obsahuje (napr. busybox, nicolaka/netshoot), alebo ich doinštalujte do bežiaceho kontajnera (ak to je možné a bezpečné).

6. Finálny výsledok / Záver: Tieto postupy umožňujú hĺbkovú analýzu sieťovej cesty v rámci Kubernetes clusteru. Systematickým testovaním od služby až po priamu IP konektivitu je možné presne lokalizovať zdroj problému, či už ide o Kubernetes komponent, CNI alebo konfiguráciu hostiteľského systému.

Vyriešené: 19. 8. 2025