ضع واجهة EKS البرمجية خلف VPN: ترتيب العمليات
فعّل نقطة النهاية الخاصة، وأثبت أن kubectl وصل إليها، ثم أغلق العامة. دليل تشغيل مرحلي مع الأوامر والفحوص بين كل خطوة.
النسخة الخطرة من هذا التغيير هي أمر واحد يقلب نقطة النهاية ويقفل كل المسؤولين في الوقت نفسه. أما النسخة الآمنة فتُبقي المسارين مفتوحين، وتُثبت أن المسار الخاص يعمل من خلال VPN، وبعد ذلك فقط تُقاعد نقطة النهاية العامة. افترض وجود عنقود قائم ونفق معتمد إلى VPC الخاص به وملف kubeconfig يعمل بالفعل؛ فالمهمة هي الوصول الخاص إلى واجهة Kubernetes البرمجية، وليست عُقدًا خاصة ولا نموذج أذونات جديدًا. كل خطوة أدناه لها فحص يمكن أن تفشل بأمان عنده.
1. جرد نقطة النهاية واحتفظ بطريق للعودة
سجّل الحالة الحالية قبل تغييرها، بما في ذلك قائمة 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. فعّل الوصول الخاص مع وجود مسار الشبكة
تشغيل الإشارة هو النصف السهل. يحتاج النفق إلى مسار إلى العناوين الخاصة لنقطة النهاية، وتحتاج مجموعة أمان العنقود إلى TCP 443 من المصدر الذي يقدمه VPN فعليًا. يمكن لارتباط Client VPN وبوابة موقع-إلى-موقع وVPC مترابط أن تقدم جميعها عناوين مصدر مختلفة، لذا استخدم النموذج الذي نشرته بدلًا من نطاق خاص عام.
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
التحديث غير متزامن. استطلع معرّف التحديث حتى يبلغ عن النجاح بدلًا من الانتظار عددًا ثابتًا من الثواني والافتراض. اترك حركة العُقد وطبقة التحكم كما هي أثناء ذلك: استبدال مجموعة الأمان الكاملة للعنقود بقاعدة من أجل حاسوبك المحمول هو الطريق لكي تصبح طبقة بيانات عاملة حادثة ثانية.
إن توثيق نقاط نهاية EKS يستحق القراءة مرة كاملة، لأنه يقول إن الوصول الخاص فقط يمكن أن يأتي من VPC أو من شبكة متصلة. هذه الجملة هي السبب الكامل وراء إمكان هذه الهجرة، وهي أيضًا سبب وجود الخطوة التالية.
3. أثبت أن محطة العمل استخدمت المسار الخاص
مع تمكين نقطتي النهاية، لا يثبت نجاح kubectl get ns شيئًا عن أيّهما أجاب. حلّل اسم المضيف لنقطة النهاية وتحقق مما إذا كان العنوان الذي حصلت عليه ينتمي إلى النطاق الخاص أم العام. إذا لم تتلقَ شبكتك المتصلة الرؤية الخاصة عبر DNS، سينجح الأمر عبر نقطة النهاية العامة وستُقاعد المسار العام بناءً على دليل زائف. هذه هي الطريقة الأكثر شيوعًا التي تفشل بها هذه الهجرة، وهي تشبه النجاح تمامًا.
nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s
أبقِ اسم المضيف والتحقق من الشهادة كما هما بالضبط. استبدال عنوان IP خاص في kubeconfig وتخطي التحقق من TLS ليس الهجرة التي وصفتها في سجل التغيير، وسيفشل مرة أخرى في اللحظة التي تدور فيها نقطة النهاية.
4. قاعد الوصول العام عن قصد
بمجرد إثبات المسار الخاص واعتماد سير عمل الاسترداد، أغلق نقطة النهاية العامة. هذا تغيير حقيقي وليس معاينة، لذا نفّذه على الحساب والإعدادات التي تقصدها فعلًا.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true
في وضع الخاص فقط، يُحلّل اسم DNS العام إلى العناوين الخاصة لنقطة النهاية من داخل VPC، لذا يتوقف الحل وإمكانية الوصول عن كونهما الشيء نفسه. أي شيء اعتمد على العنوان العام، بما في ذلك مشغّلات CI أو حاسوب محمول على شبكة مختلفة، يحتاج الآن إلى مساره الخاص للدخول.
5. افصل سياسة الشبكة عن سياسة الهوية
قائمة CIDR للوصول العام تحكم نقطة النهاية العامة فقط. وهي لا تقيّد نقطة النهاية الخاصة، التي يحدّها بدلًا من ذلك مجموعة أمان العنقود وسياسة الشبكة المتصلة. إذا أبقيت نقطة النهاية العامة، فيجب أن تطابق قائمتها المسموح بها الخروج العام الذي تستخدمه عملاء API والعُقد فعليًا؛ وعنوان تجمّع VPN نادرًا ما يكون ذلك المصدر.
لا شيء من هذا يغيّر IAM أو Kubernetes RBAC. إعدادات نقطة النهاية إجراء إداري، ولا ينبغي أن يحصل المستخدمون العاديون على إذن بتخفيف الحدود لمجرد الوصول إلى API. اكتب الحالة النهائية والتاريخ ومسار الاسترداد في دليل التشغيل، ثم اختبر مسار الاسترداد مرة واحدة بينما لا يزال سهلًا.