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

ทำไมที่อยู่เดียวกันบนทุกโหนดจึงทำงานได้

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

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

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

กำหนดให้กับ loopback ไม่ใช่อุโมงค์

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

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

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

ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev lo

ดันเส้นทางเดียวและหมายถึงปลายทางเดียว

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

ตรวจสอบว่าไคลเอนต์ติดตั้งอะไรไว้ก่อนโทษบริการ

ip route get 10.250.0.1

สำหรับบริการ HTTP ให้ที่อยู่มีชื่อและใบรับรองสำหรับชื่อนั้น IP ที่ใช้ร่วมกันไม่ใช่ตัวตน และไม่ได้ลบการตรวจสอบ TLS และไม่ได้ทำให้การคัดลอกคีย์ส่วนตัวหนึ่งดอกไปทุกโหนดเป็นเรื่องชอบธรรม ชื่อที่แปลงไปยังที่อยู่ร่วมกันทำให้เรื่องใบรับรองเป็นเรื่องปกติและให้คุณเก็บตัวตนแยกตามโหนดได้หากต้องการ

สิ่งที่ที่อยู่ร่วมกันทำไม่ได้

มันไม่ได้ให้การสลับเมื่อเกิดความล้มเหลว หากโหนดที่เลือกตาย ที่อยู่ก็ตายไปด้วย และไคลเอนต์ต้องเชื่อมต่อใหม่ที่อื่น

มันไม่ได้ย้ายเซสชัน TCP ที่ยังมีชีวิต เพราะการเชื่อมต่อใหม่ไปสิ้นสุดที่โฮสต์อื่นซึ่งไม่รู้เรื่องของอันเก่าเลย

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

เก็บตัวตนของบริการไว้กับชื่อ

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

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

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

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

การตัดสินใจตั้งแต่เนิ่น ๆ ทำให้ที่อยู่ร่วมกันยังคงเป็นสิ่งที่มันเป็น คือป้ายกำกับที่สะดวก ไม่ใช่ส่วนประกอบที่ถูกคาดหวังเงียบ ๆ ให้ทำงานที่มันไม่เคยถูกออกแบบมาเพื่อ

บทความที่เกี่ยวข้อง