บริบท:
ฉันเพิ่งพบปัญหาที่ kubernetes pod (blackbox-exporter) จะได้รับการตอบกลับที่ว่างเปล่าเมื่อใดก็ตามที่พยายามเรียก Ingress URL ของ pod ที่อยู่ในโหนดเดียวกับตัวมันเอง สิ่งนี้สะท้อนให้เห็นว่าเป็นโพรบที่ล้มเหลวเป็นระยะบนแดชบอร์ด
ตัวควบคุมขาเข้าที่ใช้คือ ingress-nginx และอยู่ด้านหลัง AWS NLB
ตัวอย่าง:
โหนด 1: 192.168.20.2
โหนด 2: 192.168.20.3
โหนด 3: 192.166.20.4
blackbox-exporter (ปรับใช้ใน node1 พร้อม clusterIP 10.244.2.21)
foo-pod (ปรับใช้ใน node1 พร้อม clusterIP 10.244.2.22)
foo-pod (ปรับใช้ใน node2 พร้อม clusterIP 10.244.2.23)
foo-pod (ปรับใช้ใน node3 พร้อม clusterIP 10.244.2.24)
บันทึกตัวควบคุมขาเข้า:
192.168.20.3 - - [21/มิ.ย./2021:15:15:07 +0000] "GET /metrics HTTP/1.1" 200 29973 "-" "curl/7.47.0" 90 0.005 [foo-pod] [] 10.32 .0.2:3000 30015 0.004 200 e39022b47e857cc48eb6a127a7b8ce24
192.168.20.4 - - [21/มิ.ย./2021:15:16:00 +0000] "GET /metrics HTTP/1.1" 200 29973 "-" "curl/7.47.0" 90 0.005 [foo-pod] [] 10.32 .0.2:3000 30015 0.004 200 e39022b47e857cc48eb6a127a7b8ce24
192.168.20.3 - - [21/มิ.ย./2021:15:16:30 +0000] "GET /metrics HTTP/1.1" 200 29973 "-" "curl/7.47.0" 90 0.005 [foo-pod] [] 10.32 .0.2:3000 30015 0.004 200 e39022b47e857cc48eb6a127a7b8ce24
การติดตามบันทึกตัวควบคุมขาเข้าแสดงให้เห็นว่า "การตอบกลับว่างเปล่า" (การหมดเวลาหลังจาก 5 วินาที) จะเกิดขึ้นเฉพาะเมื่อพ็อดที่ทำให้การเรียก URL ขาเข้าถูกปรับใช้ในโหนดเดียวกับพ็อดเป้าหมายที่ควรจะตอบสนองต่อการโทรนั้น
ข้อสรุปถูกสร้างขึ้นจากข้อเท็จจริงที่ว่าเมื่อใดก็ตามที่ได้รับ "การตอบกลับที่ว่างเปล่า" จะไม่มีบันทึกที่มี IP ต้นทางตรงกับที่อยู่บนโหนด IP ที่ผู้ส่งออก blackbox อยู่ ในกรณีนี้ควรเป็น node1 192.168.20.2
.
สงสัยว่าเกี่ยวข้องกับ IP ต้นทางที่ "ไม่ถูกต้อง" และเป็นผลให้พ็อดเป้าหมายไม่ทราบวิธีตอบกลับ ฉันจึงเปลี่ยนมาใช้ AWS Classic L7 LB และปัญหาได้รับการแก้ไขแล้ว
ตอนนี้บันทึกแสดง IP ต้นทางที่แทนที่ด้วย ClusterIP ของพ็อดจริง และการเรียกโพรบทั้งหมดจากผู้ส่งออกแบล็กบ็อกซ์ก็สำเร็จ
10.244.2.21 - - [21/มิ.ย./2021:15:15:07 +0000] "GET /metrics HTTP/1.1" 200 29973 "-" "curl/7.47.0" 90 0.005 [foo-pod] [] 10.32 .0.2:3000 30015 0.004 200 e39022b47e857cc48eb6a127a7b8ce24
10.244.2.21 - - [21/มิ.ย./2021:15:16:00 +0000] "GET /metrics HTTP/1.1" 200 29973 "-" "curl/7.47.0" 90 0.005 [foo-pod] [] 10.32 .0.2:3000 30015 0.004 200 e39022b47e857cc48eb6a127a7b8ce24
10.244.2.21 - - [21/มิ.ย./2021:15:16:30 +0000] "GET /metrics HTTP/1.1" 200 29973 "-" "curl/7.47.0" 90 0.005 [foo-pod] [] 10.32 .0.2:3000 30015 0.004 200 e39022b47e857cc48eb6a127a7b8ce24
ข้อมูลมากกว่านี้:
เวอร์ชันคลัสเตอร์: AWS EKS v1.19
คำถาม:
ระบบเครือข่าย Linux/kubernetes ไม่ใช่จุดแข็งของฉัน ดังนั้นสิ่งที่ฉันอยากจะถามคือ เกิดอะไรขึ้นกันแน่
เหตุใดการเปลี่ยนมาใช้ตัวจัดสรรภาระงาน AWS Classic L7 จึงช่วยแก้ปัญหาได้
ส่วนประกอบอื่น ๆ (kubernetes หรือ linux) อาจส่งผลกระทบต่อสิ่งนี้ด้วยหรือไม่