WIUNIX ACADEMY
آزمایش NetworkPolicy در Kubernetes؛ منع پیشفرض با دسترسی محدود به DNS و API
صفحهٔ 3 از 3؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من4 مقدار قابلتغییر
قدم بعدی
موفقیت کلاینت مجاز و شکست کلاینت نامجاز را کنار هم بسنجید
کلاینت مجاز باید نام API را پیدا کند و پاسخ بگیرد. stranger میتواند DNS داشته باشد، اما نباید به API برسد. IP مستقیم را هم آزمایش کنید تا شکست DNS با منع برنامه اشتباه نشود. اگر stranger پاسخ گرفت، همهٔ سیاستها و برچسبها را بررسی کنید؛ سیاست محدودتر، مجوز سیاست دیگر را خنثی نمیکند و استاندارد اولویت deny ندارد.
nslookup موجود در BusyBox انتقال پیشفرض DNS را میسنجد و آزمون صریح TCP نیست. هر دو پروتکل در سیاست مجاز شدهاند؛ برای پذیرش واقعی TCP، در محیط خود از ابزار مجاز دارای پرسوجوی TCP مانند dig استفاده کنید.
خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید
cd '/tmp/academy-netpol' || exit 1
kubectl --context='lab' create -f allow.yaml
kubectl --context='lab' -n 'academy-lab' exec client -- nslookup api
kubectl --context='lab' -n 'academy-lab' exec client -- wget -Y off -T 3 -qO- http://api:8080/hostname
kubectl --context='lab' -n 'academy-lab' exec stranger -- nslookup api
kubectl --context='lab' -n 'academy-lab' exec stranger -- wget -Y off -T 3 -qO- 'http://10.96.20.30:8080/hostname'
kubectl --context='lab' -n 'academy-lab' get networkpolicy -o yamlکلاینت مجاز پاسخ API بگیرد و stranger، با وجود DNS سالم، از نام و IP نتواند به آن برسد. نتیجهٔ TCP DNS را بدون آزمون مستقل تأییدشده اعلام نکنید.
قدم بعدی
فقط سیاستها و محیطی را حذف کنید که خودتان ساختهاید
بازگشت اختیاری فقط همین اشیای سیاست را حذف میکند و باید وضعیت پیش از اعمال سیاست را برگرداند؛ وجود سیاست سراسری ممکن است همچنان محدودیت ایجاد کند. فرمان پایانی فضای نام و همهٔ محتوای آن را حذف میکند. پیش از اجرا، برچسب آزمایش و فهرست منابع را بررسی کنید و هرگز نام فضای مشترک را جایگزین نکنید. ابتدا جدول نتایج را نگه دارید.
خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید
cd '/tmp/academy-netpol' || exit 1
kubectl --context='lab' delete -f allow.yaml -f deny.yaml
kubectl --context='lab' -n 'academy-lab' exec stranger -- wget -Y off -T 3 -qO- http://api:8080/hostname
kubectl --context='lab' get namespace 'academy-lab' --show-labels
kubectl --context='lab' -n 'academy-lab' get all
# Only after confirming this is exclusively the disposable lab:
kubectl --context='lab' delete namespace 'academy-lab'حذف سیاستها وضعیت پیش از اعمال سیاست را برگرداند؛ حذف نهایی فقط پس از تأیید مالکیت و نگهداری نتایج انجام شود.
نتیجهٔ آزمایش را بیش از دامنهٔ آن تعمیم ندهید
این دستورالعمل در زمان نگارش روی CNI شما اجرا نشده است. موفقیت تمرین فقط همین برچسبها، پورتها و اتصالهای تازه را تأیید میکند؛ نه هویت برنامه، مجوز TLS، همهٔ ترافیک میزبان یا تمام پیادهسازیها را. سیاست حداقلی را از مسیر بازبینی و انتشار معمول ببرید و آزمون وابستگیها و DNS را در تغییرهای بعدی نگه دارید.
پشتوانهٔ این آموزش
منابع رسمی
وضعیت بررسی هر محیط بالای صفحه مشخص است؛ بررسی مستندات به معنی اجرای عملی همهٔ نسخهها نیست.