Am un kubernetes configurat cu un pod care conține următoarele containere:
- Recipient pentru calmari
- 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.