สมมติว่าฉันมีสองอินเทอร์เฟซ eth0
และ เอทธิล0.4000
เป็น vlan
ทั้งสองมีเกตเวย์เริ่มต้น
ทุกอย่างทำงานตามที่คาดไว้เมื่อกระบวนการรับฟังอินเทอร์เฟซโดยตรง
แต่ไม่ใช่สำหรับ โฮสต์พอร์ต
การผูกมัดของ Kubernetes
vlan.gw-mac > eth0-mac, ethertype 802.1Q (0x8100), ความยาว 78: vlan 4000, p 0, ethertype IPv4 (0x0800), clientIP.38712 > vlanIP.80: ค่าสถานะ [S]
eth0-mac > eth0.gw-mac, ethertype IPv4 (0x0800), ความยาว 74: vlanIP.80 > clientIP.38712: ค่าสถานะ [S.]
SYN มาจาก vlan.gateway
ได้รับการส่งต่อไปยังคอนเทนเนอร์ แต่คำตอบ SYN-ACK ออกจากสแต็ก eth0.gw
และไม่ถูกต้อง vlan.gw
แต่ tcpdump แสดงว่า sourceIP คือ vlanIP
.
ตารางเส้นทางดูดี:
# เส้นทาง ip ไปที่ <clientIP> จาก <vlanIP> dev eth0.4000
<clientIP> จาก <vlanIP> ผ่าน <vlan.gw> dev eth0.4000 ตาราง 1 uid 0
การแมป hostPort ถูกสร้างขึ้นผ่าน พอร์ตแมป CNI-Plugin ซึ่งใช้ DNAT และ SNAT (ลิงก์รายละเอียด) ดังนั้นการค้นหาเกตเวย์จึงเกิดขึ้นตั้งแต่เนิ่นๆ
เมื่อฉันเพิ่มเส้นทางจาก container-ip ไปยังตารางการค้นหา 1 ด้วยตนเอง มันใช้งานได้โดยใช้อินเทอร์เฟซ vlan แต่ทำลาย eth0
ดังนั้นคำถามคือ - สิ่งที่ต้องทำเพื่อให้การกำหนดเส้นทางเกิดขึ้น หลังจาก NAT แทนที่ container-ip ด้วย interface-ip?