Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

สวัสดี ฉันชื่อ Kostya Kramlikh ฉันเป็นหัวหน้าผู้พัฒนาแผนก Virtual Private Cloud ใน Yandex.Cloud ฉันเป็นเครือข่ายเสมือน และอย่างที่คุณเดาได้ ในบทความนี้ ฉันจะพูดถึงอุปกรณ์ Virtual Private Cloud (VPC) โดยทั่วไปและเครือข่ายเสมือนโดยเฉพาะ และคุณจะพบว่าเหตุใดเราซึ่งเป็นผู้พัฒนาบริการจึงให้ความสำคัญกับคำติชมจากผู้ใช้ของเรา แต่สิ่งแรกก่อน

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

VPC คืออะไร?

ในปัจจุบันมีตัวเลือกที่หลากหลายสำหรับการใช้บริการ ฉันแน่ใจว่ามีบางคนยังคงเก็บเซิร์ฟเวอร์ไว้ใต้โต๊ะทำงานของผู้ดูแลระบบ แม้ว่าฉันหวังว่าจะมีเรื่องราวเช่นนี้น้อยลง

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

เครือข่ายเสมือนมีลักษณะอย่างไรจากภายนอก

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

โดย VPC เราหมายถึงเครือข่ายซ้อนทับและบริการเครือข่ายเป็นหลัก เช่น VPNaaS, NATaas, LBaas เป็นต้น และทั้งหมดนี้ทำงานบนโครงสร้างพื้นฐานเครือข่ายที่ทนทานต่อความผิดพลาดซึ่งได้รับแล้ว บทความที่ดี ที่นี่บนHabré

มาดูเครือข่ายเสมือนและอุปกรณ์ให้ละเอียดยิ่งขึ้น

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

พิจารณาพื้นที่ว่างสองโซน เราให้บริการเครือข่ายเสมือน - สิ่งที่เราเรียกว่า VPC อันที่จริงแล้ว มันกำหนดช่องว่างของความเป็นเอกลักษณ์ของที่อยู่ "สีเทา" ของคุณ ภายในเครือข่ายเสมือนแต่ละเครือข่าย คุณสามารถควบคุมพื้นที่ของที่อยู่ที่คุณสามารถกำหนดให้กับทรัพยากรในการคำนวณได้อย่างสมบูรณ์

เครือข่ายมีอยู่ทั่วโลก ในเวลาเดียวกัน มันฉายไปยังแต่ละโซนความพร้อมใช้งานในรูปแบบของเอนทิตีที่เรียกว่าซับเน็ต สำหรับซับเน็ตแต่ละรายการ คุณกำหนด CIDR ขนาด 16 หรือน้อยกว่า สามารถมีเอนทิตีดังกล่าวได้มากกว่าหนึ่งรายการในแต่ละโซนความพร้อมใช้งาน และมีการกำหนดเส้นทางที่โปร่งใสระหว่างกันเสมอ ซึ่งหมายความว่าทรัพยากรทั้งหมดของคุณภายใน VPC เดียวกันสามารถ "พูดคุย" ซึ่งกันและกันได้ แม้ว่าทรัพยากรเหล่านั้นจะอยู่ใน Availability Zone ที่แตกต่างกันก็ตาม "สื่อสาร" โดยไม่ต้องเข้าถึงอินเทอร์เน็ตผ่านช่องทางภายในของเรา "คิด" ว่าพวกเขาอยู่ในเครือข่ายส่วนตัวเดียวกัน

แผนภาพด้านบนแสดงสถานการณ์ทั่วไป: VPC สองตัวที่ตัดกันในที่อยู่ ทั้งสองสามารถเป็นของคุณ ตัวอย่างเช่น หนึ่งรายการสำหรับการพัฒนา อีกรายการหนึ่งสำหรับการทดสอบ อาจมีผู้ใช้ต่างกัน - ในกรณีนี้ไม่สำคัญ และเสียบเครื่องเสมือนหนึ่งเครื่องเข้ากับ VPC แต่ละเครื่อง

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

มาทำให้โครงการแย่ลง คุณสามารถทำให้เครื่องเสมือนหนึ่งเครื่องติดอยู่ในเครือข่ายย่อยหลายเครือข่ายพร้อมกันได้ และไม่ใช่แค่แบบนั้น แต่ในเครือข่ายเสมือนที่แตกต่างกัน

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

ในขณะเดียวกัน หากคุณต้องการให้เครื่องเข้าถึงอินเทอร์เน็ต สามารถทำได้ผ่าน API หรือ UI ในการดำเนินการนี้ คุณต้องกำหนดค่าการแปล NAT ของที่อยู่ภายใน "สีเทา" ของคุณเป็น "สีขาว" - สาธารณะ คุณไม่สามารถเลือกที่อยู่ "สีขาว" ได้ ที่อยู่จะถูกกำหนดแบบสุ่มจากกลุ่มที่อยู่ของเรา ทันทีที่คุณหยุดใช้ IP ภายนอก IP นั้นจะถูกส่งกลับไปยังพูล คุณจ่ายเฉพาะเวลาที่ใช้ที่อยู่ "สีขาว"

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

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

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

แต่ถึงแม้จะมีอิมเมจ NAT ที่พร้อมใช้งาน การตั้งค่าก็อาจยุ่งยากได้ เราเข้าใจดีว่าตัวเลือกนี้ไม่ใช่ตัวเลือกที่สะดวกที่สุดสำหรับผู้ใช้บางราย ดังนั้นในท้ายที่สุด เราจึงทำให้สามารถเปิดใช้งาน NAT สำหรับซับเน็ตที่ต้องการได้ในคลิกเดียว คุณลักษณะนี้ยังคงอยู่ในการเข้าถึงการแสดงตัวอย่างแบบปิด ซึ่งได้รับการทดสอบด้วยความช่วยเหลือจากสมาชิกในชุมชน

วิธีการจัดเรียงเครือข่ายเสมือนจากภายใน

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

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

เราเขียนสถานะที่ต้องการไปยัง Yandex Database และไปกำหนดค่าส่วนต่าง ๆ ของ VPC ของเรา เครือข่ายโอเวอร์เลย์ใน Yandex.Cloud ใช้ส่วนประกอบที่เลือกของ OpenContrail ซึ่งเพิ่งเรียกว่า Tungsten Fabric บริการเครือข่ายถูกนำมาใช้บนแพลตฟอร์ม CloudGate เดียว ใน CloudGate เรายังใช้คอมโพเนนต์โอเพ่นซอร์สจำนวนหนึ่ง: GoBGP - เพื่อเข้าถึงข้อมูลการควบคุม เช่นเดียวกับ VPP - เพื่อใช้เราเตอร์ซอฟต์แวร์ที่ทำงานบน DPDK สำหรับเส้นทางข้อมูล

ผ้าทังสเตนสื่อสารกับ CloudGate ผ่าน GoBGP บอกสิ่งที่เกิดขึ้นในเครือข่ายโอเวอร์เลย์ ในทางกลับกัน CloudGate เชื่อมต่อเครือข่ายซ้อนทับระหว่างกันและกับอินเทอร์เน็ต

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

มาดูกันว่าเครือข่ายเสมือนช่วยแก้ปัญหาการปรับขยายและความพร้อมใช้งานได้อย่างไร ลองพิจารณากรณีง่ายๆ มีโซนความพร้อมใช้งานหนึ่งโซนและ VPC สองตัวถูกสร้างขึ้นในนั้น เราใช้งานอินสแตนซ์ Tungsten Fabric หนึ่งอินสแตนซ์ และดึงเครือข่ายหลายหมื่นเครือข่าย เครือข่ายสื่อสารกับ CloudGate ดังที่เราได้กล่าวไปแล้ว CloudGate ช่วยให้มั่นใจได้ถึงการเชื่อมต่อซึ่งกันและกันและกับอินเทอร์เน็ต

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

สมมติว่ามีการเพิ่ม Availability Zone ที่สอง มันควรจะล้มเหลวอย่างสมบูรณ์โดยไม่ขึ้นกับครั้งแรก ดังนั้น ใน Availability Zone ที่สอง เราต้องติดตั้งอินสแตนซ์ Tungsten Fabric แยกต่างหาก นี่จะเป็นระบบแยกต่างหากที่เกี่ยวข้องกับการซ้อนทับและรู้เพียงเล็กน้อยเกี่ยวกับระบบแรก และการที่มองเห็นได้ว่าเครือข่ายเสมือนของเรามีอยู่ทั่วโลก อันที่จริงแล้วสร้าง VPC API ของเรา นี่คืองานของเขา

VPC1 ได้รับการแมปกับ Availability Zone B หากมีทรัพยากรใน Availability Zone B ที่พุชไปยัง VPC1 หากไม่มีทรัพยากรจาก VPC2 ในโซนความพร้อมใช้งาน B เราจะไม่ทำให้ VPC2 เป็นจริงในโซนนี้ ในทางกลับกัน เนื่องจากทรัพยากรจาก VPC3 มีอยู่เฉพาะในโซน B เท่านั้น VPC3 จึงไม่มีอยู่ในโซน A ทุกอย่างเรียบง่ายและสมเหตุสมผล

เรามาเจาะลึกกันอีกหน่อยและดูว่าโฮสต์เฉพาะใน Y.Cloud ทำงานอย่างไร สิ่งสำคัญที่ฉันต้องการทราบคือโฮสต์ทั้งหมดได้รับการจัดในลักษณะเดียวกัน เราทำให้เฉพาะบริการขั้นต่ำที่จำเป็นทำงานบนฮาร์ดแวร์ ส่วนที่เหลือทั้งหมดทำงานบนเครื่องเสมือน เราสร้างบริการที่มีลำดับสูงขึ้นโดยใช้บริการโครงสร้างพื้นฐาน และยังใช้ระบบคลาวด์เพื่อแก้ปัญหาทางวิศวกรรมบางอย่าง เช่น ภายในกรอบของการบูรณาการอย่างต่อเนื่อง

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

หากเราดูที่โฮสต์เฉพาะ เราจะเห็นว่ามีส่วนประกอบสามส่วนที่ทำงานบนระบบปฏิบัติการโฮสต์:

  • คำนวณ - ส่วนที่รับผิดชอบในการกระจายทรัพยากรการประมวลผลบนโฮสต์
  • VRouter เป็นส่วนหนึ่งของทังสเตนแฟบริคที่จัดระเบียบโอเวอร์เลย์ นั่นคือมันอุโมงค์แพ็กเก็ตผ่านอันเดอร์เลย์
  • VDisks เป็นส่วนของสตอเรจเวอร์ชวลไลเซชั่น

นอกจากนี้ยังมีการเปิดตัวบริการในเครื่องเสมือน: บริการโครงสร้างพื้นฐานระบบคลาวด์ บริการแพลตฟอร์ม และความจุของลูกค้า ความจุของลูกค้าและบริการแพลตฟอร์มไปที่โอเวอร์เลย์เสมอผ่าน VRouter

บริการโครงสร้างพื้นฐานสามารถติดอยู่ในโอเวอร์เลย์ได้ แต่โดยพื้นฐานแล้วพวกเขาต้องการทำงานในอันเดอร์เลย์ พวกเขาติดอยู่ในอันเดอร์เลย์ด้วยความช่วยเหลือของ SR-IOV ในความเป็นจริง เราตัดการ์ดเป็นการ์ดเครือข่ายเสมือน (ฟังก์ชันเสมือน) และใส่ลงในเครื่องเสมือนโครงสร้างพื้นฐานเพื่อไม่ให้สูญเสียประสิทธิภาพ ตัวอย่างเช่น CloudGate เดียวกันเปิดตัวเป็นหนึ่งในเครื่องเสมือนโครงสร้างพื้นฐานเหล่านี้

ตอนนี้เราได้อธิบายงานส่วนกลางของเครือข่ายเสมือนและโครงสร้างขององค์ประกอบพื้นฐานของระบบคลาวด์แล้ว มาดูกันว่าส่วนต่างๆ ของเครือข่ายเสมือนมีปฏิสัมพันธ์กันอย่างไร

เราแยกแยะสามชั้นในระบบของเรา:

  • Config Plane - กำหนดสถานะเป้าหมายของระบบ นี่คือสิ่งที่ผู้ใช้กำหนดค่าผ่าน API
  • Control Plane - จัดเตรียมความหมายที่ผู้ใช้กำหนด นั่นคือ นำสถานะ Data Plane ไปสู่สิ่งที่ผู้ใช้อธิบายไว้ใน Config Plane
  • Data Plane - ประมวลผลแพ็คเก็ตของผู้ใช้โดยตรง

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

ดังที่ฉันได้กล่าวไว้ข้างต้น ทุกอย่างเริ่มต้นด้วยข้อเท็จจริงที่ว่าผู้ใช้หรือบริการแพลตฟอร์มภายในมาที่ API และอธิบายสถานะเป้าหมายบางอย่าง

สถานะนี้ถูกเขียนไปยัง Yandex Database ทันที ส่งคืน ID การทำงานแบบอะซิงโครนัสผ่าน API และเริ่มการทำงานของเครื่องจักรภายในของเราเพื่อส่งคืนสถานะที่ผู้ใช้ต้องการ งานการกำหนดค่าไปที่คอนโทรลเลอร์ SDN และบอกทังสเตนแฟบริคว่าต้องทำอะไรในโอเวอร์เลย์ ตัวอย่างเช่น พวกเขาสำรองพอร์ต เครือข่ายเสมือน และอื่นๆ

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

Config Plane ในผ้าทังสเตนส่งสถานะที่ต้องการไปยัง Control Plane ด้วยวิธีนี้ Config Plane จะสื่อสารกับโฮสต์โดยบอกว่าอะไรจะเกิดขึ้นกับพวกเขาในไม่ช้า

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

ตอนนี้เรามาดูกันว่าระบบมีลักษณะอย่างไรกับโฮสต์ เครื่องเสมือนมีอะแดปเตอร์เครือข่ายเสียบเข้ากับ VRouter VRouter เป็นโมดูลผ้าทังสเตนแกนหลักที่ดูแพ็กเก็ต หากมีโฟลว์อยู่แล้วสำหรับบางแพ็กเกจ โมดูลจะประมวลผล หากไม่มีโฟลว์ โมดูลจะทำการ punting นั่นคือจะส่งแพ็กเก็ตไปยังกระบวนการ usermod กระบวนการแยกวิเคราะห์แพ็กเก็ตและตอบสนองด้วยตัวเอง เช่น DHCP และ DNS หรือบอก VRouter ว่าจะทำอย่างไรกับมัน หลังจากนั้น VRouter จะสามารถประมวลผลแพ็กเก็ตได้

นอกจากนี้ ทราฟฟิกระหว่างเครื่องเสมือนภายในเครือข่ายเสมือนเดียวกันจะดำเนินไปอย่างโปร่งใส ไม่ได้ส่งไปยัง CloudGate โฮสต์ที่ใช้เครื่องเสมือนสื่อสารกันโดยตรง พวกเขาอุโมงค์รับส่งข้อมูลและส่งต่อให้กันและกันผ่านทางอันเดอร์เลย์

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

Control Plane สื่อสารกันระหว่าง Availability Zone ผ่าน BGP เช่นเดียวกับเราเตอร์อื่น พวกเขาบอกว่าเครื่องใดอยู่ที่ใดเพื่อให้ VM ในโซนหนึ่งสามารถสื่อสารโดยตรงกับ VM อื่น ๆ

Yandex.Cloud ทำงานร่วมกับ Virtual Private Cloud อย่างไร และผู้ใช้ของเราช่วยเรานำฟีเจอร์ที่มีประโยชน์ไปใช้อย่างไร

และ Control Plane สื่อสารกับ CloudGate ในทำนองเดียวกัน จะรายงานว่าเครื่องเสมือนถูกยกขึ้นที่ไหนและเครื่องใด มีที่อยู่ใด ซึ่งช่วยให้คุณกำหนดทิศทางการรับส่งข้อมูลภายนอกและการรับส่งข้อมูลจากบาลานเซอร์ไปยังพวกเขาได้

ทราฟฟิกที่ออกจาก VPC มาที่ CloudGate ไปยังเส้นทางข้อมูล โดยที่ VPP ที่มีปลั๊กอินของเราถูกบดบังอย่างรวดเร็ว จากนั้นทราฟฟิกจะถูกส่งไปยัง VPC อื่นหรือภายนอก ไปยังเราเตอร์ชายแดนที่กำหนดค่าผ่าน Control Plane ของ CloudGate เอง

แผนสำหรับอนาคตอันใกล้

หากเราสรุปทุกสิ่งที่กล่าวไว้ข้างต้นในไม่กี่ประโยค เราสามารถพูดได้ว่า VPC ใน Yandex.Cloud แก้ปัญหาสำคัญสองอย่าง:

  • ให้การแยกระหว่างไคลเอ็นต์ต่างๆ
  • รวมทรัพยากร โครงสร้างพื้นฐาน บริการแพลตฟอร์ม คลาวด์อื่นๆ และภายในองค์กรเป็นเครือข่ายเดียว

และเพื่อที่จะแก้ปัญหาเหล่านี้ได้ดี คุณต้องจัดเตรียมความสามารถในการปรับขนาดและความทนทานต่อข้อผิดพลาดที่ระดับของสถาปัตยกรรมภายใน ซึ่ง VPC ทำ

VPC ได้รับฟังก์ชันทีละน้อย เราใช้คุณสมบัติใหม่ เราพยายามปรับปรุงบางอย่างในแง่ของความสะดวกสบายของผู้ใช้ ความคิดบางอย่างถูกเปล่งออกมาและอยู่ในรายการลำดับความสำคัญ ขอบคุณสมาชิกในชุมชนของเรา

ขณะนี้เรามีรายการแผนต่อไปนี้สำหรับอนาคตอันใกล้:

  • VPN เป็นบริการ
  • อินสแตนซ์ DNS ส่วนตัวคืออิมเมจสำหรับการตั้งค่าเครื่องเสมือนอย่างรวดเร็วด้วยเซิร์ฟเวอร์ DNS ที่กำหนดค่าไว้ล่วงหน้า
  • DNS เป็นบริการ
  • Внутренний балансировщик нагрузки.
  • การเพิ่มที่อยู่ IP "สีขาว" โดยไม่ต้องสร้างเครื่องเสมือนใหม่

บาลานเซอร์และความสามารถในการเปลี่ยนที่อยู่ IP สำหรับเครื่องเสมือนที่สร้างไว้แล้วอยู่ในรายการนี้ตามคำร้องขอของผู้ใช้ ด้วยความสัตย์จริง หากไม่มีความคิดเห็นที่ชัดเจน เราคงใช้ฟังก์ชันเหล่านี้ในภายหลัง ดังนั้นเราจึงกำลังแก้ไขปัญหาเกี่ยวกับที่อยู่

ในขั้นต้น สามารถเพิ่มที่อยู่ IP "สีขาว" ได้เมื่อสร้างเครื่องเท่านั้น หากผู้ใช้ลืมทำสิ่งนี้ จะต้องสร้างเครื่องเสมือนใหม่ เหมือนกันและหากจำเป็นให้ลบ IP ภายนอก อีกไม่นานจะสามารถเปิดและปิด IP สาธารณะได้โดยไม่ต้องสร้างเครื่องใหม่

รู้สึกอิสระที่จะแสดงความของคุณ ความคิดและข้อเสนอแนะสนับสนุน ผู้ใช้รายอื่น คุณช่วยเราปรับปรุงระบบคลาวด์ให้ดีขึ้นและรับฟีเจอร์ที่สำคัญและมีประโยชน์เร็วขึ้น!

ที่มา: will.com

เพิ่มความคิดเห็น