У меня есть kubernetes с модулем, содержащим следующие контейнеры:
- Контейнер для кальмаров
- трансоксы (например, красные носки); прозрачный SOCKS-прокси
Я запускаю это в k3s локально на ПК с Linux и хочу прозрачно проксировать весь исходящий трафик с ПК через этот прозрачный прокси. Таким образом, исходящий трафик хоста направляется на порт транзакций в модуле kubernetes. Прямо сейчас он не работает, соединение просто истекло.
Я знаю, что правила iptables, которые я использую, хороши, потому что они работали, когда я запускал вышеуказанные контейнеры непосредственно в докере, используя сеть хоста. Пользователи squid и transocks имели uid 31 и 32. Я создал следующие правила iptables:
#iptables -t nat -A ВЫВОД -m владелец --uid-владелец 31 -j ПРИНЯТЬ
#iptables -t nat -A ВЫВОД -m владелец --uid-владелец 32 -j ПРИНЯТЬ
#iptables -t nat -A ВЫВОД -p tcp --dport 80 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 12345
#iptables -t nat -A ВЫВОД -p tcp --dport 443 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 12345
Где 12345 - трансок порта, который прослушивается. Опять же, эти правила отлично работают в докере с использованием хост-сети.Transocks перенаправляет на 127.0.0.1:3128 (порт squid) и прозрачно проксирует. Однако, когда я пытаюсь использовать модуль kubernetes с портом узла (30345 для трансоков, 30128 для кальмара), похоже, он не работает. Соединение просто зависает, пока не истечет время ожидания.
Я должен упомянуть, что я также пробовал то же самое с dns, где я перенаправляю исходящий трафик, привязанный к 53, на порт 9053 (порт dns отображается в докере), и это работает, но когда я использую его в kubernetes и перенаправляю на nodeport (30053 ) висит так же. Поэтому по какой-то причине порты узлов не работают, когда вы перенаправляете на них трафик. Мне было интересно, может ли кто-нибудь сказать мне, что мне здесь не хватает. Должно быть, я не очень хорошо понимаю сеть kubernetes.
Если кто-то захочет увидеть мои kuebrnetes, вот они.
Развертывание
{
"apiVersion": "приложения/v1",
"вид": "Развертывание",
"метаданные": {
"имя": "веб-фильтр",
"метки": {
"приложение": "веб-фильтр"
}
},
"спецификация": {
«реплики»: 1,
"селектор": {
"матчлабелс": {
"приложение": "веб-фильтр"
}
},
"шаблон": {
"метаданные": {
"метки": {
"приложение": "веб-фильтр"
}
},
"спецификация": {
"контейнеры": [
{
"имя": "кальмар",
"image": "jusschwa/squid-ssl: последний",
"порты": [
{
"контейнерный порт": 3128
}
]
}, {
"название": "трансок",
"image": "jusschwa/transocks-proxy:latest",
"порты": [
{
"контейнерный порт": 12345
}
]
}
]
}
}
}
}
Оказание услуг
{
"апиВерсия": "v1",
"вид": "Сервис",
"метаданные": {
"имя": "веб-фильтр",
"метки": {
"приложение": "веб-фильтр"
}
},
"спецификация": {
"тип": "Порт узла",
"селектор": {
"приложение": "веб-фильтр"
},
"порты": [
{
"имя": "кальмар",
"протокол": "TCP",
"порт": 3128,
"целевой порт": 3128,
"порт узла": 30128
},
{
"название": "трансок",
"протокол": "TCP",
"порт": 12345,
"целевой порт": 12345,
"порт узла": 30345
}
]
}
}
правила iptables
iptables -t nat -A ВЫВОД -m владелец --uid-владелец root -j ПРИНЯТЬ
iptables -t nat -A OUTPUT -m owner --uid-owner 31 -j ACCEPT # пользователь squid
iptables -t nat -A OUTPUT -m owner --uid-owner 32 -j ACCEPT # трансокк пользователя
iptables -t nat -A OUTPUT -m owner --uid-owner 32 -j ACCEPT # непривязанный пользователь
iptables -t nat -A ВЫВОД -p tcp --dport 80 -j ПЕРЕНАПРАВЛЕНИЕ --to-ports 30345
iptables -t nat -A ВЫВОД -p tcp --dport 443 -j ПЕРЕНАПРАВЛЕНИЕ --to-ports 30345
iptables -t nat -A ВЫВОД -p udp --dport 53 -j ПЕРЕНАПРАВЛЕНИЕ --to-ports 30053
Спасибо еще раз за помощь.