الحد من نسبة استخدام الشبكة باستخدام Azure Firewall في خدمة Azure Kubernetes (AKS)
تعرف على كيفية استخدام الشبكة الصادرة وقواعد FQDN لمجموعات AKS للتحكم في حركة الخروج باستخدام جدار حماية Azure في AKS. لتبسيط هذا التكوين، يوفر Azure Firewall علامة Azure Kubernetes Service (AzureKubernetesService
) اسم المجال المؤهل بالكامل (FQDN) التي تقيد نسبة استخدام الشبكة الصادرة من نظام مجموعة AKS. توضح هذه المقالة كيف يمكنك تكوين قواعد حركة مرور نظام مجموعة AKS من خلال جدار حماية Azure.
إشعار
تحتوي علامة FQDN على جميع FQDNs المدرجة في الشبكة الصادرة وقواعد FQDN لمجموعات AKS ويتم تحديثها تلقائيا.
بالنسبة لسيناريوهات الإنتاج، نوصي بوجود 20 عنوان IP للواجهة الأمامية كحد أدنى على جدار حماية Azure لتجنب مشكلات استنفاد منفذ SNAT.
توفر المعلومات التالية مثالا على بنية التوزيع:
- يجبر الدخول العام على التدفق من خلال عوامل تصفية جدار الحماية
- يتم عزل عقد عامل AKS في شبكة فرعية مخصصة
- يتم نشر Azure Firewall في شبكته الفرعية الخاصة
- تترجم قاعدة DNAT عنوان IP العام لجدار الحماية إلى عنوان IP للواجهة الأمامية لموازن التحميل
- تبدأ الطلبات الصادرة من عقد العامل إلى عنوان IP الداخلي لجدار حماية Azure باستخدام مسار محدد من قبل المستخدم (UDR)
- تتبع الطلبات من عقد عامل AKS UDR الذي تم وضعه على الشبكة الفرعية التي تم نشر نظام مجموعة AKS فيها
- يخرج Azure Firewall من الشبكة الافتراضية من واجهة IP عامة
- يتدفق الوصول إلى الإنترنت العام أو خدمات Azure الأخرى من وإلى عنوان IP الأمامي لجدار الحماية
- يمكن حماية الوصول إلى وحدة التحكم AKS بواسطة نطاقات IP المعتمدة لخادم API، بما في ذلك عنوان IP العام لجدار الحماية
- حركة المرور الداخلية
- يمكنك استخدام موازن تحميل داخلي لحركة المرور الداخلية، والتي يمكنك عزلها على الشبكة الفرعية الخاصة بها، بدلا من موازن التحميل العام أو جنبا إلى جنب
تكوين متغيرات البيئة
تعريف مجموعة من متغيرات البيئة لاستخدامها في إنشاءات الموارد.
PREFIX="aks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
PLUGIN=azure
AKSNAME="${PREFIX}"
VNET_NAME="${PREFIX}-vnet"
AKSSUBNET_NAME="aks-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_TABLE_NAME="${PREFIX}-fwrt"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"
إنشاء شبكة اتصال ظاهرية مع شبكات فرعية متعددة
توفير شبكة ظاهرية مع شبكتين فرعيتين منفصلتين: واحدة للمجموعة والأخرى لجدار الحماية. اختياريا، يمكنك إنشاء واحد للدخول الداخلي للخدمة.
إنشاء مجموعة موارد باستخدام
az group create
الأمر .az group create --name $RG --location $LOC
إنشاء شبكة ظاهرية مع شبكتين فرعيتين لاستضافة نظام مجموعة AKS وجدار حماية Azure باستخدام
az network vnet create
الأمرين وaz network vnet subnet create
.# Dedicated virtual network with AKS subnet az network vnet create \ --resource-group $RG \ --name $VNET_NAME \ --location $LOC \ --address-prefixes 10.42.0.0/16 \ --subnet-name $AKSSUBNET_NAME \ --subnet-prefix 10.42.1.0/24 # Dedicated subnet for Azure Firewall (Firewall name can't be changed) az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.42.2.0/24
إنشاء جدار حماية Azure وإعداده
تحتاج إلى تكوين قواعد Azure Firewall الواردة والصادرة. الغرض الرئيسي من جدار الحماية هو تمكين المؤسسات من تكوين قواعد حركة مرور الدخول والخروج الدقيقة من نظام مجموعة AKS وخارجها.
هام
إذا قام نظام المجموعة أو التطبيق بإنشاء عدد كبير من الاتصالات الصادرة الموجهة إلى نفس الوجهات أو مجموعة فرعية صغيرة من الوجهات، فقد تحتاج إلى المزيد من عناوين IP الأمامية لجدار الحماية لتجنب الحد الأقصى للمنافذ لكل عنوان IP للواجهة الأمامية.
لمزيد من المعلومات حول كيفية إنشاء جدار حماية Azure باستخدام عناوين IP متعددة، راجع إنشاء جدار حماية Azure بعناوين IP عامة متعددة باستخدام Bicep.
إنشاء مورد IP عام SKU قياسي باستخدام
az network public-ip create
الأمر . سيتم استخدام هذا المورد كعنوان واجهة Azure Firewall الأمامية.az network public-ip create --resource-group $RG -n $FWPUBLICIP_NAME --location $LOC --sku "Standard"
سجل ملحق Azure Firewall CLI لإنشاء جدار حماية Azure باستخدام
az extension add
الأمر .az extension add --name azure-firewall
إنشاء جدار حماية Azure وتمكين وكيل DNS باستخدام
az network firewall create
الأمر وتعيين--enable-dns-proxy
إلىtrue
.az network firewall create --resource-group $RG --name $FWNAME --location $LOC --enable-dns-proxy true
قد يستغرق إعداد عنوان IP العام إلى جدار حماية Azure بضع دقائق. بمجرد أن يصبح جاهزا، يمكن تعيين عنوان IP الذي تم إنشاؤه مسبقا إلى الواجهة الأمامية لجدار الحماية.
إشعار
للاستفادة من FQDN على قواعد الشبكة، نحتاج إلى تمكين وكيل DNS. عند تمكين وكيل DNS، يستمع جدار الحماية على المنفذ 53 ويعيد توجيه طلبات DNS إلى خادم DNS المحدد أعلاه. يسمح هذا لجدار الحماية بترجمة FQDN تلقائيا.
إنشاء تكوين عنوان IP لجدار حماية Azure باستخدام
az network firewall ip-config create
الأمر .az network firewall ip-config create --resource-group $RG --firewall-name $FWNAME --name $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
بمجرد نجاح الأمر السابق، احفظ عنوان IP الأمامي لجدار الحماية للتكوين لاحقا.
FWPUBLIC_IP=$(az network public-ip show --resource-group $RG --name $FWPUBLICIP_NAME --query "ipAddress" -o tsv) FWPRIVATE_IP=$(az network firewall show --resource-group $RG --name $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
إشعار
إذا كنت تستخدم الوصول الآمن إلى خادم AKS API باستخدام نطاقات عناوين IP المعتمدة، فستحتاج إلى إضافة IP العام لجدار الحماية إلى نطاق IP المعتمد.
إنشاء مسار بوثبة إلى Azure Firewall
يوجه Azure حركة المرور تلقائيًا بين الشبكات الفرعية Azure والشبكات الظاهرية والشبكات المحلية. إذا كنت ترغب في تغيير أي من التوجيه الافتراضي ل Azure، يمكنك إنشاء جدول توجيه.
هام
يتطلب النوع الصادر من UDR (userDefinedRouting
) مسارا ل 0.0.0.0/0 ووجهة القفز التالية من NVA في جدول التوجيه.
يحتوي جدول التوجيه بالفعل على 0.0.0.0/0 افتراضي على الإنترنت. بدون عنوان IP عام ل Azure لاستخدامه في ترجمة عناوين الشبكة المصدر (SNAT)، ما عليك سوى إضافة هذا المسار لن يوفر لك اتصالا صادرا بالإنترنت. تتحقق AKS من أنك لا تنشئ مسار 0.0.0.0/0 يشير إلى الإنترنت ولكن بدلا من ذلك إلى بوابة أو NVA وما إلى ذلك. عند استخدام نوع صادر من UDR، لا يتم إنشاء عنوان IP عام لموازن التحميل للطلبات الواردة ما لم تقم بتكوين خدمة من نوع loadbalancer. لا تقوم AKS أبدا بإنشاء عنوان IP عام للطلبات الصادرة إذا قمت بتعيين نوع صادر من UDR.
لمزيد من المعلومات، راجع القواعد الصادرة ل Azure Load Balancer.
إنشاء جدول توجيه فارغ ليتم ربطه بشبكة فرعية معينة باستخدام
az network route-table create
الأمر . سيحدد جدول التوجيه القفزة التالية مثل جدار حماية Azure الذي تم إنشاؤه أعلاه. يمكن أن يكون لكل شبكة فرعية جدول توجيه واحد مقترن بها أو أن تكون بدون جداول توجيه.az network route-table create --resource-group $RG --location $LOC --name $FWROUTE_TABLE_NAME
إنشاء مسارات في جدول التوجيه للشبكات الفرعية باستخدام
az network route-table route create
الأمر .az network route-table route create --resource-group $RG --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP az network route-table route create --resource-group $RG --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet
للحصول على معلومات حول كيفية تجاوز مسارات النظام الافتراضية ل Azure أو إضافة مسارات إضافية إلى جدول توجيه الشبكة الفرعية، راجع وثائق جدول توجيه الشبكة الظاهرية.
إضافة قواعد جدار الحماية
إشعار
بالنسبة للتطبيقات خارج kube-system أو gatekeeper-system namespaces التي تحتاج إلى التحدث إلى خادم API، يلزم وجود قاعدة شبكة إضافية للسماح لاتصال TCP بالمنفذ 443 لعنقب IP لخادم API بالإضافة إلى إضافة قاعدة التطبيق لعلامة AzureKubernetesService
fqdn.
يغطي هذا القسم ثلاث قواعد شبكة وقاعدة تطبيق يمكنك استخدامها للتكوين على جدار الحماية الخاص بك. قد تحتاج إلى تكييف هذه القواعد بناء على التوزيع الخاص بك.
- تسمح قاعدة الشبكة الأولى بالوصول إلى المنفذ 9000 عبر TCP.
- تسمح قاعدة الشبكة الثانية بالوصول إلى المنفذ 1194 و123 عبر UDP. إذا كنت تقوم بالنشر إلى Microsoft Azure المشغل بواسطة 21Vianet، فشاهد Azure المشغل بواسطة قواعد الشبكة المطلوبة 21Vianet. ستسمح كلتا القاعدتين فقط بحركة المرور الموجهة إلى منطقة Azure CIDR في هذه المقالة، وهي شرق الولايات المتحدة.
- تفتح قاعدة الشبكة الثالثة المنفذ 123 إلى
ntp.ubuntu.com
FQDN عبر UDP. تعد إضافة FQDN كقاعدة شبكة واحدة من الميزات المحددة لجدار حماية Azure، لذلك ستحتاج إلى تكييفه عند استخدام الخيارات الخاصة بك. - تسمح قواعد الشبكة الرابعة والخامسة بالوصول إلى سحب الحاويات من سجل حاويات GitHub (ghcr.io) ومركز Docker (docker.io).
إنشاء قواعد الشبكة باستخدام
az network firewall network-rule create
الأمر .az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'ghcr' --protocols 'TCP' --source-addresses '*' --destination-fqdns ghcr.io pkg-containers.githubusercontent.com --destination-ports '443' az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'docker' --protocols 'TCP' --source-addresses '*' --destination-fqdns docker.io registry-1.docker.io production.cloudflare.docker.com --destination-ports '443'
إنشاء قاعدة التطبيق باستخدام
az network firewall application-rule create
الأمر .az network firewall application-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwar' --name 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100
لمعرفة المزيد حول Azure Firewall، راجع وثائق Azure Firewall.
إقران جدول المسار بـ AKS
لربط نظام المجموعة بجدار الحماية، يجب أن تشير الشبكة الفرعية المخصصة للشبكة الفرعية لنظام المجموعة إلى جدول التوجيه الذي تم إنشاؤه أعلاه. az network vnet subnet update
استخدم الأمر لربط جدول التوجيه ب AKS.
az network vnet subnet update --resource-group $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME
نشر نظام مجموعة AKS الذي يتبع القواعد الصادرة
الآن، يمكنك نشر نظام مجموعة AKS في الشبكة الظاهرية الموجودة. ستستخدم userDefinedRouting
النوع الصادر، الذي يضمن فرض أي حركة مرور صادرة من خلال جدار الحماية ولن توجد مسارات خروج أخرى. loadBalancer
يمكن أيضا استخدام النوع الصادر.
يتم تعريف الشبكة الفرعية المستهدف نشرها في مع متغير البيئة، $SUBNETID
. تعيين قيمة معرف الشبكة الفرعية باستخدام الأمر التالي:
SUBNETID=$(az network vnet subnet show --resource-group $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)
ستقوم بتعريف النوع الصادر لاستخدام UDR الموجود مسبقًا على الشبكة الفرعية. سيمكن هذا التكوين AKS من تخطي الإعداد وتوفير IP لموازن التحميل.
تلميح
يمكنك إضافة ميزات إضافية إلى نشر نظام المجموعة، مثل المجموعات الخاصة.
يمكنك إضافة ميزة AKS لنطاقات IP المعتمدة لخادم API للحد من وصول خادم واجهة برمجة التطبيقات إلى نقطة النهاية العامة لجدار الحماية فقط. تتم الإشارة إلى ميزة نطاقات IP المعتمدة في الرسم التخطيطي كخيار. عند تمكين ميزة نطاق IP المعتمدة للحد من الوصول إلى خادم API، يجب أن تستخدم أدوات المطور مربع انتقال من الشبكة الظاهرية لجدار الحماية، أو يجب إضافة جميع نقاط نهاية المطور إلى نطاق IP المعتمد.
- إنشاء نظام مجموعة AKS مع الهويات المعينة من قبل النظام
- إنشاء نظام مجموعة AKS مع الهويات المعينة من قبل المستخدم
إشعار
ستقوم AKS بإنشاء هوية kubelet معينة من قبل النظام في مجموعة موارد العقدة إذا لم تحدد هوية kubelet المدارة الخاصة بك.
بالنسبة للتوجيه المعرف من قبل المستخدم، تدعم الهوية المعينة من قبل النظام فقط المكون الإضافي لشبكة CNI.
إنشاء نظام مجموعة AKS باستخدام هوية مدارة معينة من قبل النظام مع المكون الإضافي لشبكة CNI باستخدام az aks create
الأمر .
az aks create --resource-group $RG --name $AKSNAME --location $LOC \
--node-count 3 \
--network-plugin azure \
--outbound-type userDefinedRouting \
--vnet-subnet-id $SUBNETID \
--api-server-authorized-ip-ranges $FWPUBLIC_IP \
--generate-ssh-keys
تمكين وصول المطور إلى خادم API
إذا استخدمت نطاقات IP المعتمدة لنظام المجموعة الخاص بك في الخطوة السابقة، فأنت بحاجة إلى إضافة عناوين IP أدوات المطور إلى قائمة نظام مجموعة AKS لنطاقات IP المعتمدة حتى تتمكن من الوصول إلى خادم API من هناك. يمكنك أيضا تكوين jumpbox باستخدام الأدوات المطلوبة داخل شبكة فرعية منفصلة في الشبكة الظاهرية لجدار الحماية.
استرداد عنوان IP الخاص بك باستخدام الأمر التالي:
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
أضف عنوان IP إلى النطاقات المعتمدة باستخدام
az aks update
الأمر .az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32
قم بتكوين
kubectl
للاتصال بمجموعة AKS الخاصة بك باستخدامaz aks get-credentials
الأمر .az aks get-credentials --resource-group $RG --name $AKSNAME
نشر خدمة عامة على AKS
يمكنك الآن بدء عرض الخدمات ونشر التطبيقات إلى نظام المجموعة هذا. في هذا المثال، سنكشف عن خدمة عامة، ولكن قد ترغب أيضا في كشف خدمة داخلية باستخدام موازن تحميل داخلي.
راجع بيان التشغيل السريع ل AKS Store Demo لمشاهدة جميع الموارد التي سيتم إنشاؤها.
نشر الخدمة باستخدام
kubectl apply
الأمر .kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-quickstart.yaml
السماح بنسبة استخدام الشبكة الواردة من خلال Azure Firewall
هام
عند استخدام جدار حماية Azure لتقييد نسبة استخدام الشبكة الخارجة وإنشاء UDR لفرض حركة مرور الخروج بالكامل، تأكد من إنشاء قاعدة DNAT مناسبة في جدار حماية Azure للسماح بشكل صحيح بنسبة استخدام الشبكة للدخول. استخدام Azure Firewall مع UDR يقطع إعداد الدخول بسبب التوجيه غير المتماثل. تحدث المشكلة إذا كانت شبكة AKS الفرعية تحتوي على مسار افتراضي ينتقل إلى عنوان IP الخاص بجدار الحماية، ولكنك تستخدم موازن تحميل عام - خدمة الدخول أو Kubernetes من النوع loadBalancer
. في هذه الحالة، يتم تلقي حركة مرور موازن التحميل الواردة عبر عنوان IP العام الخاص به، ولكن مسار الإرجاع يمر عبر عنوان IP الخاص بجدار الحماية. لأن جدار الحماية هو stateful، فإنه يسقط الحزمة العائدة لأن جدار الحماية غير مدرك لجلسة العمل المقررة. لمعرفة كيفية دمج Azure Firewall مع موازن تحميل الدخول أو الخدمة، راجع دمج Azure Firewall مع Azure Standard Load Balancer.
لتكوين الاتصال الوارد، تحتاج إلى كتابة قاعدة DNAT إلى جدار حماية Azure. لاختبار الاتصال بنظام المجموعة الخاص بك، يتم تعريف قاعدة لعنوان IP العام الخاص بجدار الحماية بغرض توجيه IP الداخلية التي تعرضها الخدمة الداخلية. يمكن تخصيص عنوان الوجهة. يجب أن يكون العنوان المترجم عنوان IP لموازن التحميل الداخلي. يجب أن يكون المنفذ المترجم هو المنفذ المكشوف لخدمة Kubernetes. تحتاج أيضا إلى تحديد عنوان IP الداخلي المعين لموازن التحميل الذي أنشأته خدمة Kubernetes.
احصل على عنوان IP الداخلي المعين لموازن التحميل باستخدام
kubectl get services
الأمر .kubectl get services
سيتم سرد عنوان IP في
EXTERNAL-IP
العمود، كما هو موضح في إخراج المثال التالي:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 9m10s order-service ClusterIP 10.0.104.144 <none> 3000/TCP 11s product-service ClusterIP 10.0.237.60 <none> 3002/TCP 10s rabbitmq ClusterIP 10.0.161.128 <none> 5672/TCP,15672/TCP 11s store-front LoadBalancer 10.0.89.139 20.39.18.6 80:32271/TCP 10s
احصل على عنوان IP للخدمة
kubectl get svc store-front
باستخدام الأمر .SERVICE_IP=$(kubectl get svc store-front -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
أضف قاعدة NAT باستخدام
az network firewall nat-rule create
الأمر .az network firewall nat-rule create --collection-name exampleset --destination-addresses $FWPUBLIC_IP --destination-ports 80 --firewall-name $FWNAME --name inboundrule --protocols Any --resource-group $RG --source-addresses '*' --translated-port 80 --action Dnat --priority 100 --translated-address $SERVICE_IP
التحقق من صحة الاتصال
انتقل إلى عنوان IP الأمامي لجدار حماية Azure في مستعرض للتحقق من صحة الاتصال.
يجب أن تشاهد تطبيق مخزن AKS. في هذا المثال، كان 52.253.228.132
عنوان IP العام لجدار الحماية .
في هذه الصفحة، يمكنك عرض المنتجات وإضافتها إلى سلة التسوق الخاصة بك، ثم تقديم طلب.
تنظيف الموارد
لتنظيف موارد Azure، احذف مجموعة موارد AKS باستخدام az group delete
الأمر .
az group delete --name $RG
الخطوات التالية
في هذه المقالة، تعلمت كيفية تأمين نسبة استخدام الشبكة الصادرة باستخدام Azure Firewall. إذا لزم الأمر، يمكنك تعميم الخطوات أعلاه لإعادة توجيه نسبة استخدام الشبكة إلى حل الخروج المفضل لديك بعد وثائق النوع userDefinedRoute
الصادر.
Azure Kubernetes Service