Score:0

คำขอ Curl ไปยังพอร์ตโหนดคลัสเตอร์หยุดทำงาน

ธง us

ฉันพยายามส่งคำขอในเครื่องไปยังคลัสเตอร์ kubernetes ที่โฮสต์บนเซิร์ฟเวอร์ของฉัน NodePort ของคลัสเตอร์กำลังฟังที่อยู่ต่อไปนี้ 172.20.120.1:30280. ไคลเอนต์ภายนอกในการผลิตจำเป็นต้องทำการร้องขอ 172.20.0.1:8000 (สิ่งนี้ไม่สามารถเปลี่ยนแปลงได้) ดังนั้นฉันจึงพยายามเพิ่มกฎ DNAT เพื่อให้การรับส่งข้อมูลจาก:

172.20.0.1:8000 -> 172.20.120.1:30280 (k8s NodePort)

ฉันเพิ่มกฎ DNAT PREROUTING ต่อไปนี้:

เชน PREROUTING (นโยบายยอมรับแพ็กเก็ต 2614, 170K ไบต์)
num pkts bytes target prot เลือกใช้ปลายทางต้นทาง
...
26 27462 1648K DNAT tcp -- * * 0.0.0.0/0 172.20.0.1 tcp dpt:8000 ถึง:172.20.120.1:30280

และกฎ OUTPUT ต่อไปนี้:

# iptables -v -L OUTPUT -n --line-numbers | หัว -10
Chain OUTPUT (นโยบายยอมรับ 0 แพ็คเก็ต, 0 ไบต์)
num pkts bytes target prot เลือกใช้ปลายทางต้นทาง
...
4 943 156K tcp -- * * 0.0.0.0/0 172.20.120.1 tcp dpt:30280

ฉันสามารถขอ curl ได้ 172.20.120.1:30280 โดยตรงและได้รับการตอบสนองที่ประสบความสำเร็จกลับมา อย่างไรก็ตามเมื่อฉันทำการขอขด 172.20.0.1:8000 มันค้างด้วยข้อความต่อไปนี้:

# curl -vvvk https://172.20.0.1:8000/v1/my-api
* กำลังจะเชื่อมต่อ() กับพอร์ต 172.20.0.1 8000 (#0)
* ลอง 172.20.0.1...
* เชื่อมต่อกับพอร์ต 172.20.0.1 (172.20.0.1) 8000 (#0)
* เริ่มต้น NSS ด้วย certpath: sql:/etc/pki/nssdb

และแล้วมันก็หมดเวลาในที่สุด

tcpdump ของฉันแสดงว่าทราฟฟิกถูกส่งต่อไปยัง IP ที่ถูกต้องเมื่อทริกเกอร์คำขอ curl 172.20.0.1:8000:

# tcpdump -nnvvv -i ใด ๆ src 172.20.0.1 และ dst 172.20.120.1
tcpdump: ฟังใด ๆ LINUX_SLL ประเภทลิงก์ (Linux สุกแล้ว) ขนาดการดักจับ 262144 ไบต์
08:47:07.108364 IP (tos 0x0, ttl 64, id 27172, offset 0, flags [DF], proto TCP (6), ความยาว 60)
    172.20.0.1.52910 > 172.20.120.1.30280: ค่าสถานะ [S], cksum 0xd85d (ไม่ถูกต้อง -> 0x84e2), seq 1825443523, ชนะ 43690, ตัวเลือก [mss 65495,sackOK,TS val 549020903,ecr 0,nop] , ความยาว 0
08:47:07.108771 IP (tos 0x0, ttl 64, id 27173, offset 0, flags [DF], proto TCP (6), ความยาว 52)
172.20.0.1.52910 > 172.20.120.1.30280: ค่าสถานะ [.], cksum 0xd855 (ไม่ถูกต้อง -> 0x3029), seq 1825443524, ack 3881482736, ชนะ 342, ตัวเลือก [nop,nop,TS val 549020904 ecr 9049 ecr 9020 ความยาว]
08:47:07.206994 IP (tos 0x0, ttl 64, id 27174, offset 0, flags [DF], proto TCP (6), ความยาว 229)
...

นอกจากนี้ ฉันได้เพิ่ม TRACE ลงในกฎ iptable และฉันเห็นสิ่งที่ส่งออกไปเมื่อทำการขด 172.20.0.1:8000:

25 มี.ค. 09:01:38.570 x เคอร์เนล: TRACE: raw:PREROUTING:policy:4 IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00: 08:00 SRC=172.20.0.1 DST=172.20.120.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44467 DF PROTO=TCP SPT=40096 DPT=30280 SEQ=191700158 ACK=0 WINDOW=43690 RES=0x00 SYN URGP=0 เลือก (0204FFD70402080A20C6B10D0000000001030307)
25 มี.ค. 09:01:38.570 x เคอร์เนล: TRACE: mangle:PREROUTING:rule:1 IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00: 08:00 SRC=172.20.0.1 DST=172.20.120.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44467 DF PROTO=TCP SPT=40096 DPT=30280 SEQ=191700158 ACK=0 WINDOW=43690 RES=0x00 SYN URGP=0 เลือก (0204FFD70402080A20C6B10D0000000001030307)
25 มี.ค. 09:01:38.570 x เคอร์เนล: TRACE: mangle:cali-PREROUTING:rule:3 IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00: 00:08:00 SRC=172.20.0.1 DST=172.20.120.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44467 DF PROTO=TCP SPT=40096 DPT=30280 SEQ=191700158 ACK=0 WINDOW=43690 RES =0x00 SYN URGP=0 OPT (0204FFD70402080A20C6B10D0000000001030307)
25 มี.ค. 09:01:38.570 x เคอร์เนล: TRACE: mangle:cali-from-host-endpoint:return:1 IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00: 00:00:00:08:00 SRC=172.20.0.1 DST=172.20.120.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44467 DF PROTO=TCP SPT=40096 DPT=30280 SEQ=191700158 ACK=0 WINDOW=43690 RES=0x00 SYN URGP=0 OPT (0204FFD70402080A20C6B10D0000000001030307)

และ เมื่อฉันส่งคำขอโดยตรงไปยัง 172.20.120.1:30280 มันใช้งานได้และฉันได้รับการตอบกลับที่ประสบความสำเร็จดังนั้นฉันจึงคิดไม่ออกว่าทำไมกฎ DNAT ไม่ทำงาน

ฉันยังลองเปิดไฟร์วอลล์เพื่อยอมรับทั้งหมด แต่ก็ไม่ได้ผลเช่นกัน

iptables -P อินพุตที่ยอมรับ
iptables -P เอาต์พุตที่ยอมรับ

ฉันยังสามารถเห็นขนาดแพ็กเก็ตกฎ OUTPUT เพิ่มขึ้นเมื่อทำการร้องขอ curl 172.20.0.1:8000 ดังนั้นฉันจึงรู้ว่ากฎนั้นกำลังถูกตี

ใครรู้บ้างว่าทำไมผมหยิกไม่ได้ 172.20.0.1:8000 และได้รับการตอบสนองกลับมา แต่เมื่อขดตัว 172.20.120.1:30280 ใช้งานได้ดีโดยตรงหรือไม่

โพสต์คำตอบ

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