Score:0

พร็อกซีไปยัง nodeport อย่างโปร่งใสใน kubernetes

ธง in

ฉันตั้งค่า kubernetes ด้วยพ็อดที่มีคอนเทนเนอร์ต่อไปนี้:

  1. ตู้ปลาหมึก
  2. transocks (เช่น redsocks); พร็อกซี SOCKS แบบโปร่งใส

ฉันใช้สิ่งนี้ใน k3s ในเครื่องบน linux PC และต้องการพร็อกซีทราฟฟิกขาออกทั้งหมดจากพีซีอย่างโปร่งใสผ่านพร็อกซีโปร่งใสนี้ ดังนั้นการรับส่งข้อมูลโฮสต์ขาออกจึงถูกบังคับให้ไปที่พอร์ต transocks บนพ็อด kubernetes ตอนนี้ใช้งานไม่ได้ การเชื่อมต่อหมดเวลา

ฉันรู้ว่ากฎ iptables ที่ฉันใช้นั้นดีเพราะกฎเหล่านั้นทำงานเมื่อฉันเรียกใช้คอนเทนเนอร์ด้านบนโดยตรงในนักเทียบท่าโดยใช้เครือข่ายโฮสต์ ผู้ใช้ Squid และ Transocks คือ uid 31 และ 32 ฉันสร้างกฎ iptables ต่อไปนี้:

#iptables -t nat -A OUTPUT -m เจ้าของ --uid-เจ้าของ 31 -j ยอมรับ
#iptables -t nat -A OUTPUT -m เจ้าของ --uid-เจ้าของ 32 -j ยอมรับ
#iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 12345
#iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 12345

ตำแหน่งที่ 12345 คือพอร์ตทรานส์ล็อกที่กำลังฟังอยู่ อีกครั้ง กฎเหล่านี้ใช้งานได้ดีภายใต้นักเทียบท่าโดยใช้เครือข่ายโฮสต์transocks ไปข้างหน้าเป็น 127.0.0.1:3128 (squid port) และมีการพร็อกซีอย่างโปร่งใส อย่างไรก็ตามเมื่อฉันลองใช้ kubernetes pod โดยใช้ nodeport (30345 สำหรับ transocks, 30128 สำหรับ Squid) ดูเหมือนจะไม่ทำงาน การเชื่อมต่อหยุดทำงานจนกว่าจะหมดเวลา

ฉันควรจะพูดถึงว่าฉันได้ลองใช้ DNS เหมือนกันโดยที่ฉันเปลี่ยนเส้นทางการรับส่งข้อมูลเอาต์พุตที่ผูกไว้สำหรับ 53 ไปยังพอร์ต 9053 (พอร์ต DNS ที่แมปในนักเทียบท่า) และใช้งานได้ แต่เมื่อฉันใช้ใน kubernetes และเปลี่ยนเส้นทางไปยัง nodeport (30053 ) มันแฮงค์ในลักษณะเดียวกัน ดังนั้นด้วยเหตุผลบางอย่าง พอร์ตโหนดดูเหมือนจะไม่ทำงานเมื่อคุณเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังพอร์ตเหล่านั้น ฉันสงสัยว่าจะมีใครบอกฉันได้บ้างว่าฉันพลาดอะไรไปที่นี่ ฉันต้องไม่เข้าใจระบบเครือข่าย kubernetes เป็นอย่างดี

ในกรณีที่มีคนต้องการเห็นรายการ kuebrnetes ของฉัน พวกเขาอยู่ที่นี่

การปรับใช้

{
  "apiVersion": "แอป/v1",
  "ชนิด": "การปรับใช้",
  "ข้อมูลเมตา": {
    "ชื่อ": "ตัวกรองเว็บ",
    "ป้ายกำกับ": {
      "แอป": "ตัวกรองเว็บ"
    }
  },
  "ข้อมูลจำเพาะ": {
    "แบบจำลอง": 1,
    "ตัวเลือก": {
      "matchLabels": {
        "แอป": "ตัวกรองเว็บ"
      }
    },
    "เทมเพลต": {
      "ข้อมูลเมตา": {
        "ป้ายกำกับ": {
          "แอป": "ตัวกรองเว็บ"
        }
      },
      "ข้อมูลจำเพาะ": {
        "คอนเทนเนอร์": [
          {
            "ชื่อ": "ปลาหมึก",
            "ภาพ": "jusschwa/squid-ssl:ล่าสุด",
            "พอร์ต": [
              {
                "พอร์ตคอนเทนเนอร์": 3128
              }
            ]
          }, {
            "ชื่อ": "transocks",
            "image": "jusschwa/transocks-proxy:ล่าสุด",
            "พอร์ต": [
              {
                "คอนเทนเนอร์พอร์ต": 12345
              }
            ]
          }
        ]
      }
    }
  }
}

บริการ

{
  "apiVersion": "v1",
  "ชนิด": "บริการ",
  "ข้อมูลเมตา": {
    "ชื่อ": "ตัวกรองเว็บ",
    "ป้ายกำกับ": {
      "แอป": "ตัวกรองเว็บ"
    }
  },
  "ข้อมูลจำเพาะ": {
    "ประเภท": "โหนดพอร์ต",
    "ตัวเลือก": {
      "แอป": "ตัวกรองเว็บ"
    },
    "พอร์ต": [
      {
        "ชื่อ": "ปลาหมึก",
        "โปรโตคอล": "TCP",
        "พอร์ต": 3128,
        "พอร์ตเป้าหมาย": 3128,
        "โหนดพอร์ต": 30128
      },
      {
        "ชื่อ": "transocks",
        "โปรโตคอล": "TCP",
        "พอร์ต": 12345,
        "targetPort": 12345,
        "โหนดพอร์ต": 30345
      }
    ]
  }
}

กฎ iptables

iptables -t nat -A OUTPUT -m เจ้าของ --uid-เจ้าของ root -j ยอมรับ
iptables -t nat -A OUTPUT -m เจ้าของ --uid-เจ้าของ 31 -j ยอมรับ # ผู้ใช้ปลาหมึก
iptables -t nat -A OUTPUT -m เจ้าของ --uid-เจ้าของ 32 -j ACCEPT # ผู้ใช้ transocks
iptables -t nat -A OUTPUT -m เจ้าของ --uid-owner 32 -j ACCEPT # ผู้ใช้ที่ไม่ถูกผูกไว้
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

ขอขอบคุณอีกครั้งสำหรับความช่วยเหลือ

Score:1
ธง in

หากใครสนใจ ฉันพบว่าการพยายามใช้พอร์ตโหนดนั้นยากเกินไป และเลือกที่จะย้าย transocks ไปยังพ็อดของตัวเองแทน และใช้เครือข่ายโฮสต์พร้อมกับกฎการส่งต่อด้านบนเพื่อให้งานนี้สำเร็จ นี่คือรายการที่ฉันใช้สำหรับฝัก transocks:

{
  "apiVersion": "v1",
  "ชนิด": "พ็อด",
  "ข้อมูลเมตา": {
    "ชื่อ": "transocks"
  },
  "ข้อมูลจำเพาะ": {
    "hostNetwork": จริง
    "dnsPolicy": "ClusterFirstWithHostNet",
    "คอนเทนเนอร์": [
      {
        "ชื่อ": "transocks",
        "ภาพ": "jusschwa/transocks-proxy"
      }
    ]
  }
}

นี่คือ transocks toml ที่ฉันใช้:

ฟัง = "0.0.0.0:12345"

# เชื่อมต่อกับพร็อกซี HTTP
proxy_url = "http://127.0.0.1:30128"

[บันทึก]
ระดับ = "ข้อผิดพลาด"

30128 เป็นโหนดพอร์ตสำหรับพร็อกซีปลาหมึก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา