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

1. ทำบัญชี endpoint และเก็บทางกลับไว้

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

aws eks describe-cluster --region REGION --name CLUSTER \
  --query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'

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

2. เปิดการเข้าถึงแบบส่วนตัวเมื่อเส้นทางเครือข่ายพร้อม

การเปิดธงเป็นครึ่งที่ง่าย อุโมงค์ต้องมีเส้นทางไปยังที่อยู่ส่วนตัวของ endpoint และกลุ่มความปลอดภัยของคลัสเตอร์ต้องมี TCP 443 จากแหล่งที่ VPN นำเสนอจริง การเชื่อมโยง Client VPN เกตเวย์แบบ site-to-site และ VPC ที่ peer กันสามารถนำเสนอที่อยู่ต้นทางต่างกันได้ ดังนั้นใช้โมเดลที่คุณติดตั้งไว้แทนช่วงส่วนตัวทั่วไป

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true

aws eks describe-update --region REGION --name CLUSTER --update-id UPDATE_ID

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

เอกสาร endpoint ของ EKS คุ้มค่าที่จะอ่านให้ครบหนึ่งครั้ง เพราะระบุว่าการเข้าถึงแบบส่วนตัวเท่านั้นสามารถมาจาก VPC หรือเครือข่ายที่เชื่อมต่อ ประโยคนั้นคือเหตุผลทั้งหมดที่การย้ายนี้เป็นไปได้ และยังเป็นเหตุผลที่มีขั้นตอนถัดไป

3. พิสูจน์ว่าสถานีงานใช้เส้นทางส่วนตัว

เมื่อเปิดทั้งสอง endpoint แล้ว kubectl get ns ที่สำเร็จไม่ได้พิสูจน์อะไรว่าอันไหนตอบ แปลชื่อโฮสต์ของ endpoint และตรวจสอบว่าที่อยู่ที่คุณได้อยู่ในช่วงส่วนตัวหรือสาธารณะ หากเครือข่ายที่เชื่อมต่อของคุณไม่ได้รับมุมมองส่วนตัวผ่าน DNS คำสั่งจะสำเร็จผ่าน endpoint สาธารณะและคุณจะเลิกใช้เส้นทางสาธารณะบนหลักฐานเท็จ นี่คือวิธีที่การย้ายนี้ผิดพลาดบ่อยที่สุด และดูเหมือนความสำเร็จอย่างยิ่ง

nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s

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

4. เลิกใช้การเข้าถึงสาธารณะอย่างตั้งใจ

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

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

ในโหมดส่วนตัวเท่านั้น ชื่อ DNS สาธารณะจะแปลงเป็นที่อยู่ส่วนตัวของ endpoint จากภายใน VPC ดังนั้นการแปลงชื่อและการเข้าถึงจึงไม่ใช่สิ่งเดียวกันอีกต่อไป ทุกสิ่งที่พึ่งพาที่อยู่สาธารณะ รวมถึง CI runner หรือแล็ปท็อปในเครือข่ายอื่น ต้องมีเส้นทางเข้าของตัวเอง

5. แยกนโยบายเครือข่ายและนโยบายตัวตนออกจากกัน

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

ไม่มีสิ่งใดในนี้เปลี่ยน IAM หรือ Kubernetes RBAC การตั้งค่า endpoint เป็นการดำเนินการด้านการบริหาร และผู้ใช้ทั่วไปไม่ควรได้รับสิทธิ์ผ่อนขอบเขตเพียงเพื่อเข้าถึง API เขียนสถานะสุดท้าย วันที่ และเส้นทางกู้คืนลงใน runbook แล้วทดสอบเส้นทางกู้คืนหนึ่งครั้งในขณะที่ยังง่ายอยู่

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