Puncte:0

Proxy transparent la nodeport în kubernetes

drapel in

Am un kubernetes configurat cu un pod care conține următoarele containere:

  1. Recipient pentru calmari
  2. transocks (cum ar fi redsocks); un proxy SOCKS transparent

Rulez acest lucru în k3s local pe un PC Linux și vreau să proxy în mod transparent tot traficul de ieșire de pe computer prin acest proxy transparent. Deci, traficul gazdă de ieșire a fost forțat către portul transocks de pe podul kubernetes. Momentan nu funcționează, conexiunea doar expiră.

Știu că regulile iptables pe care le folosesc sunt bune, deoarece au funcționat când am rulat containerele de mai sus direct în docker folosind rețelele gazdă. Utilizatorii squid și transocks au fost uid 31 și 32. Am creat următoarele reguli iptables:

#iptables -t nat -A OUTPUT -m proprietar --uid-owner 31 -j ACCEPT
#iptables -t nat -A OUTPUT -m proprietar --uid-owner 32 -j ACCEPT
#iptables -t nat -A IEȘIRE -p tcp --dport 80 -j REDIRECT --la-port 12345
#iptables -t nat -A IEȘIRE -p tcp --dport 443 -j REDIRECT --la-port 12345

Unde este 12345, port transocks ascultă. Din nou, aceste reguli funcționează excelent în docker folosind rețele gazdă.transocks înaintează la 127.0.0.1:3128 (port squid) și este proxy transparent. Cu toate acestea, când îl încerc folosind un pod kubernetes folosind un nodeport (30345 pentru transocks, 30128 pentru squid), nu pare să funcționeze. Conexiunea se blochează până când expiră.

Trebuie să menționez că am încercat același lucru și cu dns, unde redirecționez traficul de ieșire legat de 53 către portul 9053 (portul dns mapat în docker) și funcționează, dar când îl folosesc în kubernetes și redirecționez către nodeport (30053) ) atârnă la fel. Deci, dintr-un anumit motiv, porturile de nod nu par să funcționeze atunci când redirecționați traficul către ele. Mă întrebam dacă cineva îmi poate spune ce îmi lipsește aici. Nu trebuie să înțeleg foarte bine rețelele kubernetes.

În cazul în care cineva dorește să-mi vadă kuebrnet-urile manifestându-le, iată-le.

Implementare

{
  "apiVersion": "aplicații/v1",
  "kind": "Implementare",
  „metadate”: {
    "name": "webfilter",
    „etichete”: {
      "app": "webfilter"
    }
  },
  „spec”: {
    „replici”: 1,
    „selector”: {
      „matchLabels”: {
        "app": "webfilter"
      }
    },
    „șablon”: {
      „metadate”: {
        „etichete”: {
          "app": "webfilter"
        }
      },
      „spec”: {
        „containere”: [
          {
            "nume": "calamar",
            "imagine": "jusschwa/squid-ssl:latest",
            "porturi": [
              {
                „containerPort”: 3128
              }
            ]
          }, {
            "nume": "transocks",
            "imagine": "jusschwa/transocks-proxy:latest",
            "porturi": [
              {
                „containerPort”: 12345
              }
            ]
          }
        ]
      }
    }
  }
}

Serviciu

{
  "apiVersion": "v1",
  "kind": "Serviciu",
  „metadate”: {
    "name": "webfilter",
    „etichete”: {
      "app": "webfilter"
    }
  },
  „spec”: {
    "type": "NodePort",
    „selector”: {
      "app": "webfilter"
    },
    "porturi": [
      {
        "nume": "calamar",
        "protocol": "TCP",
        „port”: 3128,
        „targetPort”: 3128,
        „nodePort”: 30128
      },
      {
        "nume": "transocks",
        "protocol": "TCP",
        „port”: 12345,
        „targetPort”: 12345,
        „nodePort”: 30345
      }
    ]
  }
}

regulile iptables

iptables -t nat -A OUTPUT -m proprietar --uid-owner root -j ACCEPT
iptables -t nat -A OUTPUT -m proprietar --uid-owner 31 -j ACCEPT # utilizator squid
iptables -t nat -A OUTPUT -m proprietar --uid-owner 32 -j ACCEPT # transocks user
iptables -t nat -A OUTPUT -m proprietar --uid-owner 32 -j ACCEPT # utilizator nelegat
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 30345
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 30345
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 30053

Mulțumesc din nou pentru ajutor.

Puncte:1
drapel in

Dacă cineva este interesat, mi s-a părut că încercarea de a utiliza un port nod este prea dificilă și, în schimb, am optat să mute transocks-urile în propriul său pod și să folosesc rețelele gazdă, împreună cu regulile de redirecționare de mai sus pentru a face acest lucru. Iată manifestul pe care l-am folosit pentru podul transocks:

{
  "apiVersion": "v1",
  "kind": "Pod",
  „metadate”: {
    "name": "transocks"
  },
  „spec”: {
    „hostNetwork”: adevărat,
    "dnsPolicy": "ClusterFirstWithHostNet",
    „containere”: [
      {
        "nume": "transocks",
        "imagine": "jusschwa/transocks-proxy"
      }
    ]
  }
}

Acesta este transocks toml pe care îl folosesc:

asculta = "0.0.0.0:12345"

# Conectați-vă la proxy HTTP
proxy_url = „http://127.0.0.1:30128”

[Buturuga]
nivel = "eroare"

30128 este nodeportul pentru proxy-ul squid.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.