Riešenie problému s odchádzajúcou (Egress) sieťovou komunikáciou pre SearXNG v K3s

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

title: "Riešenie problému s odchádzajúcou (Egress) sieťovou komunikáciou pre SearXNG v K3s"
slug: "k3s-searxng-egress-networking-hostnetwork"
technologies: ["Kubernetes", "K3s", "Docker", "SearXNG", "YAML", "Networking"]
tags: ["devops", "k3s", "searxng", "networking", "debug", "firewall"]
date_solved: "2025-08-20"

Projekt/Téma: Riešenie problému s odchádzajúcou (Egress) sieťovou komunikáciou pre SearXNG v K3s

  1. Cieľ / Problém na vyriešenie: Po nasadení vyhľadávača SearXNG do K3s klastra aplikácia nefungovala správne, pretože nebola schopná kontaktovať externé vyhľadávače. Cieľom bolo diagnostikovať a vyriešiť problém s odchádzajúcou (egress) sieťovou konektivitou zvnútra podu.

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

    • Orchestrácia: Kubernetes (K3s)
    • Kontajnerizácia: Docker
    • Aplikácia: SearXNG
    • Konfigurácia: YAML (Kubernetes manifesty)
    • Nástroje: kubectl, wget, nslookup
  3. Kľúčové postupy a konfiguračné kroky:

    • Overenie základnej DNS a sieťovej konektivity zvnútra bežiaceho podu SearXNG.
      kubectl exec -it deployment/searxng-deployment -- nslookup google.com
      kubectl exec -it deployment/searxng-deployment -- wget -O- --timeout=10 https://www.google.com
    • Príkazy vyššie zlyhali, čo potvrdilo problém s externou konektivitou, zatiaľ čo interná komunikácia v rámci klastra mohla fungovať.
    • Vytvorenie a aplikácia upraveného deployment manifestu, ktorý využíva sieť hostiteľa (hostNetwork: true).
      kubectl apply -f searxng-hostnetwork.yaml
    • Diagnostika pomocou špecializovaného debugovacieho podu na overenie stavu siete v klastri nezávisle od aplikácie.
      kubectl run debug --image=nicolaka/netshoot -it --rm -- bash
  4. Výsledné kódy a skripty:

    • Kľúčová časť searxng-hostnetwork.yaml:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: searxng-deployment
      spec:
      replicas: 1
      selector:
      matchLabels:
        app: searxng
      template:
      metadata:
        labels:
          app: searxng
      spec:
        hostNetwork: true  # Kľúčové riešenie problému
        dnsPolicy: ClusterFirstWithHostNet
        containers:
        - name: searxng
          image: searxng/searxng:latest
          # ... zvyšok konfigurácie kontajnera
  5. Zistené problémy a riešenia (Gotchas):

    • Problém: Pod SearXNG nedokázal nadviazať spojenie so žiadnou externou službou na internete. DNS preklady fungovali, ale TCP spojenia časovali (timeout).
    • Riešenie: Predpokladanou príčinou bola reštriktívna konfigurácia sieťového CNI (napr. Calico, Flannel) alebo firewall na úrovni klastra/nodu. Rýchlym a účinným riešením bolo povoliť pre pod SearXNG priamy prístup k sieťovému rozhraniu hostiteľského uzla nastavením hostNetwork: true v špecifikácii podu. Týmto sa obišla virtuálna sieť klastra pre odchádzajúce spojenia.
  6. Finálny výsledok / Záver: Po aplikovaní manifestu s hostNetwork: true začal SearXNG pod správne komunikovať s externými službami. Vyhľadávač sa stal plne funkčným. Toto riešenie potvrdilo, že problém bol v sieťovej vrstve klastra, nie v samotnej aplikácii.

Vyriešené: 20. 8. 2025