ฉันกำลังพยายามส่งทราฟฟิกไคลเอ็นต์ไปยัง NodePort คลัสเตอร์ kubernetes ที่ฟังอยู่ 192.168.1.100.30000
.
ความต้องการของลูกค้าในการร้องขอ 192.168.1.100.8000
ดังนั้นฉันจึงเพิ่มกฎ REDIRECT ต่อไปนี้ใน iptables:
iptables -t nat -I PREROUTING -p tcp --dst 192.168.1.100 --dport 8000 -j REDIRECT --to-port 30000
แล้วทำการม้วนผมให้เป็นลอน 192.168.1.100:8000
อย่างไรก็ตามใน tcpdump ฉันเห็นพอร์ตอื่น:
# tcpdump -i lo -nnvvv โฮสต์ 192.168.1.100 และพอร์ต 8000
tcpdump: กำลังฟัง lo, ประเภทลิงก์ EN10MB (Ethernet), ขนาดการดักจับ 262144 ไบต์
[อินเทอร์เฟซ: lo] 20:39:22.685968 IP (tos 0x0, ttl 64, id 20590, offset 0, flag [DF], proto TCP (6), ความยาว 40)
[อินเทอร์เฟซ: lo] 192.168.1.100.8000 > 192.168.1.100.49816: ค่าสถานะ [R.], cksum 0xacda (ถูกต้อง), seq 0, ack 3840205844, ชนะ 0, ความยาว 0
[อินเทอร์เฟซ: lo] 20:39:37.519256 IP (tos 0x0, ttl 64, id 34221, offset 0, flag [DF], proto TCP (6), ความยาว 40)
ฉันคาดหวังว่า tcpdump จะแสดงสิ่งที่ต้องการ
192.168.1.100.8000 > 192.168.1.100.30000
อย่างไรก็ตาม กำลังแสดงและทำให้เกิดข้อผิดพลาดการเชื่อมต่อถูกปฏิเสธ เนื่องจากไม่มีกระบวนการแสดงรายการอยู่ 192.168.1.100.49816
.
192.168.1.100.8000 > 192.168.1.100.49816
ฉันใช้สภาพแวดล้อมการทดสอบ ดังนั้นฉันจึงไม่สามารถเข้าถึงอุปกรณ์ระยะไกลได้ นั่นคือเหตุผลที่ฉันใช้ ขด
เพื่อทดสอบเส้นทาง REDIRECT ของ iptables
มีเหตุผลว่าทำไมการเพิ่มกฎ REDIRECT ทำให้ tcpdump เปลี่ยนเส้นทางการรับส่งข้อมูลไปยังพอร์ตอื่นนอกเหนือจากที่ระบุ
แก้ไข:
หลังจากที่ @A.B. คำแนะนำเพิ่มกฎ OUTPUT ต่อไปนี้:
iptables -t nat -I OUTPUT -d 192.168.1.100 -p tcp --dport 8000 -j REDIRECT --to-port 30000
และ curl ดำเนินการต่อไป จำนวนแพ็กเก็ตสำหรับเชน OUTPUT จะเพิ่มขึ้น (แพ็กเก็ตเชน PREROUTING REDIRECT ไม่เพิ่มขึ้น):
2 10 600 REDIRECT tcp -- * * 0.0.0.0/0 192.168.1.100 tcp dpt:8000 พอร์ต redir 30000
อย่างไรก็ตาม ได้รับข้อผิดพลาดต่อไปนี้:
# curl -vk https://192.168.1.100:8000/v1/api
* กำลังจะเชื่อมต่อ() กับพอร์ต 192.168.1.100 8000 (#0)
* ลอง 192.168.1.100...
* เชื่อมต่อกับพอร์ต 192.168.1.100 (192.168.1.100) 8000 (#0)
* เริ่มต้น NSS ด้วย certpath: sql:/etc/pki/nssdb
* ข้อผิดพลาด NSS -12263 (SSL_ERROR_RX_RECORD_TOO_LONG)
* SSL ได้รับบันทึกที่เกินความยาวสูงสุดที่อนุญาต
* ปิดการเชื่อมต่อ 0
curl: (35) SSL ได้รับบันทึกที่เกินความยาวสูงสุดที่อนุญาต
นอกจากนี้ ลองเพิ่มรีโมตซิสเต็มเน็ต คราวนี้จำนวนแพ็กเก็ต PREROUTING REDIRECT CHAIN เพิ่มขึ้นหลังจากดำเนินการ รีโมตซิสเต็มขด ...
(แต่ OUTPUT CHAIN ไม่เพิ่มขึ้น):
2 34 2040 REDIRECT tcp -- * * 0.0.0.0/0 172.16.128.1 tcp dpt:8000 พอร์ต redir 30000
ข้อผิดพลาด:
# ip netns exec remotesystem curl -vk https://192.168.1.100:8000/v1/api
* กำลังจะเชื่อมต่อ() กับพอร์ต 192.168.1.100 8000 (#0)
* ลอง 192.168.1.100...
* หมดเวลาการเชื่อมต่อ
* ไม่สามารถเชื่อมต่อกับ 192.168.1.100:8000; หมดเวลาการเชื่อมต่อ
* ปิดการเชื่อมต่อ 0
curl: (7) ไม่สามารถเชื่อมต่อกับ 192.168.1.100:8000; หมดเวลาการเชื่อมต่อ