ขณะนี้ฉันได้สำรวจ Multus CNI สำหรับโครงการทดลองของฉันเกี่ยวกับการโยกย้าย Virtual Machine หรือบางแอปพลิเคชันที่เราไม่ต้องการ (ไม่สามารถเปลี่ยนซอร์สโค้ด) เกี่ยวกับที่อยู่ IP ดังนั้นฉันจึงมีข้อจำกัดที่จะท้าทายว่าฉัน ต้องใช้ IP คงที่
ปัจจุบันฉันประสบความสำเร็จในการใช้ Multus กับ Pod ที่มี IP รองผ่าน MacVLAN
ข้าม Node ใน Kubernetes ของฉันแล้ว
ฉันมีสองเครือข่ายย่อย 192.168.15.0/24 (โซนสาธารณะ)
และ 192.168.16.0/24(โซนส่วนตัว)
สำหรับแต่ละ IP ที่อยู่ในโซน (ซับเน็ต) ของตนสามารถเชื่อมต่อระหว่าง Kubernetes Node ได้สำเร็จ ผู้ปฏิบัติงาน A มีพ็อด 192.168.15.10
สามารถ ping ไปที่ ผู้ปฏิบัติงาน B มีพ็อด 192.168.15.11
เพราะเป็นเครือข่ายย่อยเดียวกัน (MACVLAN เดียวกัน)
**แต่ผมต้องการให้ Pod ที่มี MACVLAN ต่างกัน (คนละ Subnet) เชื่อมต่อกันได้ ** แบบนี้ครับ ผู้ปฏิบัติงาน A มีพ็อด 192.168.15.10
สามารถ ping ไปที่ ผู้ปฏิบัติงาน B มีพ็อด 192.168.16.10
(เครือข่ายย่อยสาธารณะเชื่อมต่อกับโซนเครือข่ายย่อยที่ปลอดภัย)
ในแนวคิดเครือข่ายปกติเราจะต้อง เราเตอร์
ขวา ? เพราะตอนนี้โทโพโลยีของผมก็จะคล้ายๆ ภาพนี้
เครดิต: https://www.practicalnetworking.net/stand-alone/routing-between-vlans/
ภาพตัวอย่าง Logical Switch เมื่อใช้ VLAN
ดังที่เราเห็นในภาพ ขณะนี้เรามีเครือข่ายย่อยที่แตกต่างกัน และไม่มีสายเคเบิลเชื่อมต่อระหว่างสวิตช์ ดังนั้นจึงไม่สามารถกำหนดเส้นทาง/เชื่อมต่อได้ ฉันจะสร้างลอจิคัลเราเตอร์เพื่อให้ความพยายามนี้สำเร็จได้อย่างไร เป็นไปได้ไหม ? หรือฉันเข้าใจผิดในแนวคิดการออกแบบ Networking/Kubernetes ?
ในรูปนี้จะเห็นว่าฝักที่ติดกับ ส่วนต่อประสานเครือข่ายย่อยสาธารณะ
สามารถ ping/เชื่อมต่อกันข้าม Kubernetes Node ได้แล้วเนื่องจาก แมคแวล
แต่ถ้าฉันใช้บริดจ์จะต้องให้ทั้งคู่อยู่ในโฮสต์เดียวกัน
รูปภาพของ Pod และ Network Interface ของฉัน
ฉันต้องการลองทำสิ่งนี้เพราะฉันต้องการจำลองโทโพโลยีเครือข่ายที่คล้ายกับ Virtual Machine ภายในองค์กร เพื่อให้ฉันสามารถมี Migrate Virtual Machine แบบอัตโนมัติไปยัง Kubernetes ได้โดยไม่ต้องเปลี่ยนรหัสใดๆ (ตอนนี้ฉันได้สำรวจ KubeVirt ด้วย)
แต่ในบริบทของฉัน ฉันไม่มีโซลูชันระดับองค์กรอย่าง ESXI หรืออะไรทำนองนั้น เพียงแค่สแนปช็อต Virtual Machine และอัปโหลดไปยัง Kubernetes โดยใช้ KubeVirt เท่านั้น ดังนั้น Network Topology จึงเป็นรากฐานของการทดลองย้ายข้อมูลนี้
ขอบคุณมากสำหรับการตอบกลับความคิดใด ๆ / ความช่วยเหลือล่วงหน้า :)
นี่คือตัวอย่างของฉัน
ตัวอย่าง NetworkAttachmentDefinition ของฉัน
รุ่น api: k8s.cni.cncf.io/v1
ประเภท: NetworkAttachmentDefinition
ข้อมูลเมตา:
ชื่อ: macvlan-สาธารณะ
เนมสเปซ: บริษัทดั้งเดิม
ข้อมูลจำเพาะ:
การกำหนดค่า: >-
{
"cniVersion": "0.3.1",
"ประเภท": "macvlan",
"สะพาน": "macvlan-public-zone",
"ไอแพม": {
"ประเภท": "โฮสต์ท้องถิ่น",
"เครือข่ายย่อย": "192.168.15.0/24",
"rangeStart": "192.168.15.10",
"ช่วงสิ้นสุด": "192.168.15.200"
}
}
---
รุ่น api: k8s.cni.cncf.io/v1
ประเภท: NetworkAttachmentDefinition
ข้อมูลเมตา:
ชื่อ: macvlan-secure
เนมสเปซ: บริษัทดั้งเดิม
ข้อมูลจำเพาะ:
การกำหนดค่า: >-
{
"cniVersion": "0.3.1",
"ประเภท": "macvlan",
"บริดจ์": "macvlan-secure-zone",
"ไอแพม": {
"ประเภท": "โฮสต์ท้องถิ่น",
"เครือข่ายย่อย": "192.168.16.0/24",
"rangeStart": "192.168.16.10",
"ช่วงสิ้นสุด": "192.168.16.200"
}
}
---
ตัวอย่าง Pod ที่มีอินเทอร์เฟซเครือข่ายรอง Multus
ประเภท: การปรับใช้
apiVersion: แอป/v1
ข้อมูลเมตา:
ชื่อ: สะพานสาธารณะ
ป้ายกำกับ:
แอป: สะพานสาธารณะ
ข้อมูลจำเพาะ:
แบบจำลอง: 1
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
แอป: สะพานสาธารณะ
แม่แบบ:
ข้อมูลเมตา:
ป้ายกำกับ:
แอป: สะพานสาธารณะ
คำอธิบายประกอบ:
k8s.v1.cni.cncf.io/networks: '[
{ "ชื่อ": "macvlan-สาธารณะ"}]'
ข้อมูลจำเพาะ:
ตัวเลือกโหนด:
kubernetes.io/ชื่อโฮสต์: 10.111.147.164
serviceAccountName: ค่าเริ่มต้น
ตู้คอนเทนเนอร์:
- ชื่อสะพานสาธารณะ
รูปภาพ: "quay.io/linxianer12/nettool:0.0.4"
imagePullPolicy: เสมอ
บริบทความปลอดภัย:
ความสามารถ:
เพิ่ม:
- "NET_RAW"
นโยบายรีสตาร์ท: เสมอ
การสิ้นสุดGracePeriodวินาที: 30
นโยบาย DNS: ClusterFirst
---
ประเภท: การปรับใช้
apiVersion: แอป/v1
ข้อมูลเมตา:
ชื่อ: สะพานที่ปลอดภัย
ป้ายกำกับ:
แอป: สะพานที่ปลอดภัย
ข้อมูลจำเพาะ:
แบบจำลอง: 1
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
แอป: สะพานที่ปลอดภัย
แม่แบบ:
ข้อมูลเมตา:
ป้ายกำกับ:
แอป: สะพานที่ปลอดภัย
คำอธิบายประกอบ:
k8s.v1.cni.cncf.io/networks: '[
{ "ชื่อ": "macvlan-secure"}]'
ข้อมูลจำเพาะ:
serviceAccountName: ค่าเริ่มต้น
ตู้คอนเทนเนอร์:
- ชื่อ: สะพานที่ปลอดภัย
รูปภาพ: "quay.io/linxianer12/nettool:0.0.4"
imagePullPolicy: เสมอ
บริบทความปลอดภัย:
ความสามารถ:
เพิ่ม:
- "NET_RAW"