Score:0

อินเทอร์เฟซ veth เชื่อมต่อกันบนกล่องลินุกซ์ได้อย่างไร

ธง in
JMC

ฉันได้เล่นกับคลัสเตอร์ Google Kubernetes Engine เมื่อเร็ว ๆ นี้ ฉันมีคำถามเกี่ยวกับ CNI ของพวกเขา ฉันได้อ่านจากเอกสาร GCP และบทความอื่น ๆ ว่ามีบริดจ์ซึ่งอินเทอร์เฟซ veth ทั้งหมดเชื่อมต่อด้วย โดยพื้นฐานแล้ว สำหรับแต่ละคอนเทนเนอร์ จะมีการสร้างคู่ผัก ปลายด้านหนึ่งอยู่ในคอนเทนเนอร์และปลายอีกด้านหนึ่งเชื่อมต่อกับอุปกรณ์บริดจ์ เมื่อคอนเทนเนอร์บนโหนดเดียวกันสื่อสารกัน การแลกเปลี่ยนแพ็กเก็ตจะใช้อุปกรณ์บริดจ์เลเยอร์ 2 นี่คือคำอธิบายของเอกสาร GKE

https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview#pods

https://medium.com/cloudzone/gke-networking-options-explained-demonstrated-5c0253415eba

ฉันสร้างคลัสเตอร์บน Google ฉันเห็นว่ามีอุปกรณ์บริดจ์ docker0 แต่ไม่มีอินเทอร์เฟซที่เกี่ยวข้อง

gke-xxxxxxxxx /home/uuuuuuu # แสดง brctl
ชื่อบริดจ์ รหัสบริดจ์ อินเทอร์เฟซที่เปิดใช้งาน STP
นักเทียบท่า 0 8000.0242fd0b0cf4 หมายเลข      
gke-xxxxxxxxxx /home/uuuuuuu # 

จากนั้นฉันสร้างคลัสเตอร์โดยใช้ Virtualbox ฉันเห็นอินเทอร์เฟซเชื่อมโยงกับอุปกรณ์บริดจ์

[root@k8s-2 ~]# แสดง brctl
ชื่อบริดจ์ รหัสบริดจ์ อินเทอร์เฟซที่เปิดใช้งาน STP
cni0 8000.36dae477639c ไม่มี veth7f6c1f01
                                        vethccd0d71d
                                        vethe63e4285

สิ่งที่ฉันพยายามให้เหตุผลคือเหตุใดฉันจึงไม่พบอุปกรณ์บริดจ์ใน Google VMs มีคุณสมบัติพิเศษของ Linux Kernel ที่ใช้ในสถานการณ์นี้หรือไม่?

เมื่อฉันตรวจสอบอินเทอร์เฟซ veth แต่ละรายการบน Google VM พวกเขาทั้งหมดมีที่อยู่ IP เดียวกัน 10.188.2.1

gke-xxxxxxxxxxxxxxxxxxxxx /home/user.name # ifconfig
นักเทียบท่า 0: ค่าสถานะ = 4099<UP,BROADCAST,MULTICAST> mtu 1500
        inet 169.254.123.1 netmask 255.255.255.0 ออกอากาศ 169.254.123.255
        อีเธอร์ 02:42:fd:0b:0c:f4 txqueuelen 0 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 0 ไบต์ 0 (0.0 B)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 0 ไบต์ 0 (0.0 B)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.10.1.19 netmask 255.255.255.255 ออกอากาศ 0.0.0.0
        inet6 fe80::4001:aff:fe0a:113 คำนำหน้า 64 scopeid 0x20<link>
        อีเธอร์ 42:01:0a:0a:01:13 txqueuelen 1000 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 2192921 ไบต์ 1682211226 (1.5 GiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 1288701 ไบต์ 468627202 (446.9 MiB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

แท้จริง: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        inet 127.0.0.1 เน็ตมาสก์ 255.0.0.0
        inet6 ::1 คำนำหน้าlen 128 scopeid 0x10<host>
        วนซ้ำ txqueuelen 1,000 (วนกลับในเครื่อง)
        แพ็คเก็ต RX 276348 ไบต์ 153128345 (146.0 MiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 276348 ไบต์ 153128345 (146.0 MiB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

veth27cee774: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.188.2.1 netmask 255.255.255.255 ออกอากาศ 10.188.2.1
        inet6 fe80::10b7:98ff:fe2f:2e08 คำนำหน้า 64 scopeid 0x20<ลิงค์>
        อีเธอร์ 12:b7:98:2f:2e:08 txqueuelen 0 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 32 ไบต์ 2306 (2.2 KiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 10 ไบต์ 710 (710.0 B)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

veth6eba4cdf: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.188.2.1 netmask 255.255.255.255 ออกอากาศ 10.188.2.1
        inet6 fe80::c4e3:b0ff:fe5f:63da คำนำหน้า 64 scopeid 0x20<ลิงค์>
        อีเธอร์ c6:e3:b0:5f:63:da txqueuelen 0 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 537091 ไบต์ 138245354 (131.8 MiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 477870 ไบต์ 122515885 (116.8 MiB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

veth8bcf1494: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.188.2.1 netmask 255.255.255.255 ออกอากาศ 10.188.2.1
        inet6 fe80::70cb:c4ff:fe8c:a747 คำนำหน้า 64 scopeid 0x20<ลิงค์>
        อีเธอร์ 72:cb:c4:8c:a7:47 txqueuelen 0 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 50 ไบต์ 3455 (3.3 KiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 28 ไบต์ 2842 (2.7 KiB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

vethbb2135c7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.188.2.1 netmask 255.255.255.255 ออกอากาศ 10.188.2.1
        inet6 fe80::1469:daff:fea0:8b5b คำนำหน้า 64 scopeid 0x20<link>
        อีเธอร์ 16:69:da:a0:8b:5b txqueuelen 0 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 223995 ไบต์ 82725559 (78.8 MiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 239258 ไบต์ 60203574 (57.4 MiB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

vetheee4e8e3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.188.2.1 netmask 255.255.255.255 ออกอากาศ 10.188.2.1
        inet6 fe80::ec6c:3bff:fef3:70c2 คำนำหน้า 64 scopeid 0x20<ลิงค์>
        อีเธอร์ ee:6c:3b:f3:70:c2 txqueuelen 0 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 311669 ไบต์ 40562747 (38.6 MiB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 304461 ไบต์ 628195110 (599.0 MiB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

เบื้องหลังอินเตอร์เฟส veth เหล่านี้คืออะไร?

ขอบคุณล่วงหน้า

vn flag
เอกสารที่ 2 ที่คุณเชื่อมโยงอธิบายไว้หรือไม่ "ด้วย Calico ไม่มีบริดจ์เครือข่าย L2 ในโหนด แต่จะใช้การกำหนดเส้นทาง L3 แทนสำหรับทราฟฟิกทั้งหมดระหว่างพ็อด"
JMC avatar
in flag
JMC
ขอบคุณมาร์ค หากคุณเห็นตัวอย่างของฉัน อินเทอร์เฟซทั้งหมดจะขึ้นต้นด้วย veth แทนที่จะเป็น cali คลัสเตอร์ของฉันไม่ได้ใช้ผ้าดิบ CNI
Alex G avatar
ar flag
หากคุณต้องการดูแพ็กเก็ตที่ไหลจาก/ไปยัง pod cidr ให้ระบุ cbr0 ซึ่งเป็นลินุกซ์บริดจ์ที่มีอินเตอร์เฟส veth ทั้งหมดที่เชื่อมต่อกับคอนเทนเนอร์ทั้งหมด การใช้ `tcpdump -i cbr0` อาจช่วยแก้ปัญหาได้
JMC avatar
in flag
JMC
@AlexG มันดูไม่มี cbr0 อยู่ ฉันสามารถเห็นอินเทอร์เฟซ veth เท่านั้น แต่ไม่เห็นอุปกรณ์บริดจ์ซึ่งเป็นปริศนา อย่างไรก็ตาม สิ่งที่ฉันพบคือ cbr0 มีอยู่จริงถ้าฉันใช้รุ่นเก่ากว่า ฉันลองใช้เวอร์ชัน 1.18-gke เวอร์ชันนี้ใช้นักเทียบท่าเป็นคอนเทนเนอร์รันไทม์และมีอุปกรณ์ cbr0 เริ่มต้น 1.19.x-gke-xxxx โหนด GKE ใช้คอนเทนเนอร์เนื่องจากไม่มีการสร้างรันไทม์และอุปกรณ์ cbr0 อีกต่อไป
Score:1
ธง ar

ถ้าบริดจ์มีอินเตอร์เฟสอยู่แล้ว The brctl แสดง สามารถใช้คำสั่งเพื่อดูรายละเอียดบริดจ์และอินเตอร์เฟสของโหนด ดูเหมือนว่าคุณยังไม่ได้แนะนำอินเทอร์เฟซใดๆ ให้กับบริดจ์ในสถานการณ์ของคุณ คุณสามารถเพิ่มอินเทอร์เฟซให้กับบริดจ์ด้วย sudo brctl addif docker0 veth0และคุณสามารถรับรายละเอียดบริดจ์และอินเทอร์เฟซที่จำเป็นทั้งหมดในโหนดด้วยคำสั่งเดียวกัน ตรวจสอบ เอกสารนี้ สำหรับการอ้างอิง

JMC avatar
in flag
JMC
ด้วยคลัสเตอร์ที่ทำงานอย่างสมบูรณ์ จึงไม่จำเป็นต้องเพิ่ม veth0 ให้กับ docker0 สิ่งนี้ได้รับการจัดการแล้วเมื่อมีการสร้างพ็อดใหม่ ดังที่ฉันได้กล่าวไว้ในความคิดเห็นข้างต้น 1.18-gke เป็นเวอร์ชันสุดท้ายที่ยังคงใช้ cbr0 ฉันเชื่อว่าการกำหนดเส้นทางของแพ็กเก็ตนั้นทำตามกฎการกำหนดเส้นทาง ใน 1.19.x ทุก IP ของพ็อดจะมีรายการตารางเส้นทางของตัวเอง
Alex G avatar
ar flag
มีพ็อดที่ตั้งค่า 'hostNetwork' เป็นเท็จใน GKE 1.19 ของคุณหรือไม่

โพสต์คำตอบ

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