إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذا المقال، تقوم بنشر Yelb application على عنقود خدمة Azure Kubernetes (AKS) الذي أنشأته في article السابق.
التحقق من البيئة
قبل نشر التطبيق، تأكد من أن عنقود AKS الخاص بك مهيأ بشكل صحيح باستخدام الأوامر التالية:
قم بإدراج المساحات الاسمية في المجموعة باستخدام الأمر.
kubectl get namespacekubectl get namespaceإذا قمت بتثبيت وحدة تحكم الدخول NGINX باستخدام إضافة توجيه التطبيق، يجب أن ترى
app-routing-systemمساحة الأسماء في المخرج:NAME STATUS AGE app-routing-system Active 4h28m cert-manager Active 109s dapr-system Active 4h18m default Active 4h29m gatekeeper-system Active 4h28m kube-node-lease Active 4h29m kube-public Active 4h29m kube-system Active 4h29mإذا قمت بتثبيت وحدة تحكم الدخول NGINX عبر Helm، يجب أن ترى
ingress-basicمساحة الأسماء في المخرج:NAME STATUS AGE cert-manager Active 7m42s dapr-system Active 11m default Active 21m gatekeeper-system Active 20m ingress-basic Active 7m19s kube-node-lease Active 21m kube-public Active 21m kube-system Active 21m prometheus Active 8m9sاحصل على تفاصيل الخدمة في
app-routing-systemingress-basicمساحة الأسماء باستخدام .kubectl get service commandkubectl get service --namespace <namespace-name> -o wideإذا استخدمت إضافة توجيه التطبيقات، يجب أن ترى أن
EXTERNAL-IPnginxعنوان IP الخاص للخدمة. هذا العنوان هو عنوان IP الخاص لتكوين IP في الواجهة الأماميةkubernetes-internalفي موازن التحميل الخاص بعنقود AKS الخاص بك:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx LoadBalancer 172.16.55.104 10.240.0.7 80:31447/TCP,443:31772/TCP,10254:30459/TCP 4h28m app=nginxإذا استخدمت Helm، يجب أن ترى أن
EXTERNAL-IPعنوان IPnginx-ingress-ingress-nginx-controllerالخاص للخدمة. هذا العنوان هو عنوان IP الخاص لتكوين IP في الواجهة الأماميةkubernetes-internalفي موازن التحميل الخاص في عنقود AKS الخاص بك.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ingress-ingress-nginx-controller LoadBalancer 172.16.42.152 10.240.0.7 80:32117/TCP,443:32513/TCP 7m31s nginx-ingress-ingress-nginx-controller-admission ClusterIP 172.16.78.85 <none> 443/TCP 7m31s nginx-ingress-ingress-nginx-controller-metrics ClusterIP 172.16.109.138 <none> 10254/TCP 7m31s
استعد لنشر تطبيق يلب
إذا أردت نشر العينة باستخدام إنهاء TLS عند Application Gateway واستدعاء Yelb عبر نهج HTTP ، يمكنك العثور على سكريبتات Bash وقوالب YAML لنشر تطبيق Yelb في المجلد http .
إذا كنت ترغب في نشر العينة باستخدام تنفيذ TLS من الطرف إلى الطرف باستخدام بنية Azure Application Gateway، يمكنك العثور على سكريبتات Bash وقوالب YAML لنشر تطبيق الويب في مجلد https.
في الأقسام المتبقية من هذا المقال، نرشدك خلال عملية نشر التطبيق النموذجي باستخدام نهج TLS من الطرف إلى الطرف.
تخصيص المتغيرات
قبل تشغيل أي سكريبت، تحتاج إلى تخصيص قيم المتغيرات في
00-variables.shالملف. هذا الملف مدرج في جميع السكربتات ويحتوي على المتغيرات التالية:# Azure subscription and tenant RESOURCE_GROUP_NAME="<aks-resource-group>" SUBSCRIPTION_ID="$(az account show --query id --output tsv)" SUBSCRIPTION_NAME="$(az account show --query name --output tsv)" TENANT_ID="$(az account show --query tenantId --output tsv)" AKS_CLUSTER_NAME="<aks-name>" AGW_NAME="<application-gateway-name>" AGW_PUBLIC_IP_NAME="<application-gateway-public-ip-name>" DNS_ZONE_NAME="<your-azure-dns-zone-name-eg-contoso.com>" DNS_ZONE_RESOURCE_GROUP_NAME="<your-azure-dns-zone-resource-group-name>" DNS_ZONE_SUBSCRIPTION_ID="<your-azure-dns-zone-subscription-id>" # NGINX ingress controller installed via Helm NGINX_NAMESPACE="ingress-basic" NGINX_REPO_NAME="ingress-nginx" NGINX_REPO_URL="https://kubernetes.github.io/ingress-nginx" NGINX_CHART_NAME="ingress-nginx" NGINX_RELEASE_NAME="ingress-nginx" NGINX_REPLICA_COUNT=3 # Specify the ingress class name for the ingress controller # - nginx: Unmanaged NGINX ingress controller installed via Helm # - webapprouting.kubernetes.azure.com: Managed NGINX ingress controller installed via AKS application routing add-on INGRESS_CLASS_NAME="webapprouting.kubernetes.azure.com" # Subdomain of the Yelb UI service SUBDOMAIN="<yelb-application-subdomain>" # URL of the Yelb UI service URL="https://$SUBDOMAIN.$DNS_ZONE_NAME" # Secret provider class KEY_VAULT_NAME="<key-vault-name>" KEY_VAULT_CERTIFICATE_NAME="<key-vault-resource-group-name>" KEY_VAULT_SECRET_PROVIDER_IDENTITY_CLIENT_ID="<key-vault-secret-provider-identity-client-id>" TLS_SECRET_NAME="yelb-tls-secret" NAMESPACE="yelb"يمكنك تشغيل الأمر التالي
az aks show لاسترجاعمن user-assign-user identity identity <المستخدم في برنامج CSI DriverAzure Key Vault>.keyVault.bicepدور مسؤول Key Vault في وحدة الوحدة إلى الهوية المدارة المعينة من قبل المستخدم للإضافة للسماح لها باسترجاع الشهادة التي استخدمها Kubernetes Ingress لكشف الخدمةyelb-uiعبر وحدة تحكم الدخول NGINX.az aks show \ --name <aks-name> \ --resource-group <aks-resource-group-name> \ --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId \ --output tsv \ --only-show-errorsإذا قمت بنشر بنية Azure التحتية باستخدام وحدات Bicep المرفقة مع هذه العينة، يمكنك الانتقال إلى deploy تطبيق Yelb. إذا كنت ترغب في نشر التطبيق في عنقود AKS الخاص بك، يمكنك استخدام السكريبتات التالية لتكوين بيئتك. يمكنك استخدام جهاز
02-create-nginx-ingress-controller.shتثبيت وحدة تحكم الدخول NGINX مع تفعيل جدار الحماية لتطبيقات الويب مفتوحة المصدر (WAF) من ModSecurity .#!/bin/bash # Variables source ./00-variables.sh # Check if the NGINX ingress controller Helm chart is already installed result=$(helm list -n $NGINX_NAMESPACE | grep $NGINX_RELEASE_NAME | awk '{print $1}') if [[ -n $result ]]; then echo "[$NGINX_RELEASE_NAME] NGINX ingress controller release already exists in the [$NGINX_NAMESPACE] namespace" else # Check if the NGINX ingress controller repository is not already added result=$(helm repo list | grep $NGINX_REPO_NAME | awk '{print $1}') if [[ -n $result ]]; then echo "[$NGINX_REPO_NAME] Helm repo already exists" else # Add the NGINX ingress controller repository echo "Adding [$NGINX_REPO_NAME] Helm repo..." helm repo add $NGINX_REPO_NAME $NGINX_REPO_URL fi # Update your local Helm chart repository cache echo 'Updating Helm repos...' helm repo update # Deploy NGINX ingress controller echo "Deploying [$NGINX_RELEASE_NAME] NGINX ingress controller to the [$NGINX_NAMESPACE] namespace..." helm install $NGINX_RELEASE_NAME $NGINX_REPO_NAME/$nginxChartName \ --create-namespace \ --namespace $NGINX_NAMESPACE \ --set controller.nodeSelector."kubernetes\.io/os"=linux \ --set controller.replicaCount=$NGINX_REPLICA_COUNT \ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz fi # Get values helm get values $NGINX_RELEASE_NAME --namespace $NGINX_NAMESPACE
قم بنشر التطبيق
شغل السكربت التالي
03-deploy-yelb.shلنشر تطبيق Yelb وكائن Kubernetes Ingress لجعلyelb-uiالخدمة متاحة للإنترنت العام.#!/bin/bash # Variables source ./00-variables.sh # Check if namespace exists in the cluster result=$(kubectl get namespace -o jsonpath="{.items[?(@.metadata.name=='$NAMESPACE')].metadata.name}") if [[ -n $result ]]; then echo "$NAMESPACE namespace already exists in the cluster" else echo "$NAMESPACE namespace does not exist in the cluster" echo "creating $NAMESPACE namespace in the cluster..." kubectl create namespace $NAMESPACE fi # Create the Secret Provider Class object echo "Creating the secret provider class object..." cat <<EOF | kubectl apply -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: namespace: $NAMESPACE name: yelb spec: provider: azure secretObjects: - secretName: $TLS_SECRET_NAME type: kubernetes.io/tls data: - objectName: $KEY_VAULT_CERTIFICATE_NAME key: tls.key - objectName: $KEY_VAULT_CERTIFICATE_NAME key: tls.crt parameters: usePodIdentity: "false" useVMManagedIdentity: "true" userAssignedIdentityID: $KEY_VAULT_SECRET_PROVIDER_IDENTITY_CLIENT_ID keyvaultName: $KEY_VAULT_NAME objects: | array: - | objectName: $KEY_VAULT_CERTIFICATE_NAME objectType: secret tenantId: $TENANT_ID EOF # Apply the YAML configuration kubectl apply -f yelb.yml echo "waiting for secret $TLS_SECRET_NAME in namespace $namespace..." while true; do if kubectl get secret -n $NAMESPACE $TLS_SECRET_NAME >/dev/null 2>&1; then echo "secret $TLS_SECRET_NAME found!" break else printf "." sleep 3 fi done # Create chat-ingress cat ingress.yml | yq "(.spec.ingressClassName)|="\""$INGRESS_CLASS_NAME"\" | yq "(.spec.tls[0].hosts[0])|="\""$SUBDOMAIN.$DNS_ZONE_NAME"\" | yq "(.spec.tls[0].secretName)|="\""$TLS_SECRET_NAME"\" | yq "(.spec.rules[0].host)|="\""$SUBDOMAIN.$DNS_ZONE_NAME"\" | kubectl apply -f - # Check the deployed resources within the yelb namespace: kubectl get all -n yelbقم بتحديث ملف
yelb-uiYAML ليشمل تعريفcsi volumeوvolume mountلقراءة الشهادة كسر من Azure Key Vault.
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: yelb
name: yelb-ui
spec:
replicas: 1
selector:
matchLabels:
app: yelb-ui
tier: frontend
template:
metadata:
labels:
app: yelb-ui
tier: frontend
spec:
containers:
- name: yelb-ui
image: mreferre/yelb-ui:0.7
ports:
- containerPort: 80
volumeMounts:
- name: secrets-store-inline
mountPath: "/mnt/secrets-store"
readOnly: true
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: yelb
يمكنك الآن نشر التطبيق. يستخدم السكربت بيان
yelb.ymlYAML لنشر التطبيق ولإنشاءingress.ymlكائن الدخول. إذا استخدمت Azure منطقة DNS العامة لحل أسماء النطاقات، يمكنك استخدام سكريبت04-configure-dns.sh. يربط هذا السكربت عنوان IP العام لوحدة تحكم الدخول NGINX بالنطاق المستخدم من قبل كائن الدخول، مما يكشف الخدمةyelb-ui. يقوم البرنامج النصي بالخطوات التالية:- يسترجع العنوان العام لعنوان IP العام ل Azure المستخدم في تكوين عنوان IP الأمامي لبوابة التطبيق.
- يتحقق مما إذا كان
Aهناك سجل للنطاق الفرعي المستخدم من قبلyelb-uiالخدمة. - إذا لم يكن السجل
Aموجودا، يقوم السكربت بإنشائه.
source ./00-variables.sh
# Get the address of the Application Gateway Public IP
echo "Retrieving the address of the [$AGW_PUBLIC_IP_NAME] public IP address of the [$AGW_NAME] Application Gateway..."
PUBLIC_IP_ADDRESS=$(az network public-ip show \
--resource-group $RESOURCE_GROUP_NAME \
--name $AGW_PUBLIC_IP_NAME \
--query ipAddress \
--output tsv \
--only-show-errors)
if [[ -n $PUBLIC_IP_ADDRESS ]]; then
echo "[$PUBLIC_IP_ADDRESS] public IP address successfully retrieved for the [$AGW_NAME] Application Gateway"
else
echo "Failed to retrieve the public IP address of the [$AGW_NAME] Application Gateway"
exit
fi
# Check if an A record for todolist subdomain exists in the DNS Zone
echo "Retrieving the A record for the [$SUBDOMAIN] subdomain from the [$DNS_ZONE_NAME] DNS zone..."
IPV4_ADDRESS=$(az network dns record-set a list \
--zone-name $DNS_ZONE_NAME \
--resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
--subscription $DNS_ZONE_SUBSCRIPTION_ID \
--query "[?name=='$SUBDOMAIN'].ARecords[].IPV4_ADDRESS" \
--output tsv \
--only-show-errors)
if [[ -n $IPV4_ADDRESS ]]; then
echo "An A record already exists in [$DNS_ZONE_NAME] DNS zone for the [$SUBDOMAIN] subdomain with [$IPV4_ADDRESS] IP address"
if [[ $IPV4_ADDRESS == $PUBLIC_IP_ADDRESS ]]; then
echo "The [$IPV4_ADDRESS] ip address of the existing A record is equal to the ip address of the ingress"
echo "No additional step is required"
continue
else
echo "The [$IPV4_ADDRESS] ip address of the existing A record is different than the ip address of the ingress"
fi
# Retrieving name of the record set relative to the zone
echo "Retrieving the name of the record set relative to the [$DNS_ZONE_NAME] zone..."
RECORDSET_NAME=$(az network dns record-set a list \
--zone-name $DNS_ZONE_NAME \
--resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
--subscription $DNS_ZONE_SUBSCRIPTION_ID \
--query "[?name=='$SUBDOMAIN'].name" \
--output tsv \
--only-show-errors 2>/dev/null)
if [[ -n $RECORDSET_NAME ]]; then
echo "[$RECORDSET_NAME] record set name successfully retrieved"
else
echo "Failed to retrieve the name of the record set relative to the [$DNS_ZONE_NAME] zone"
exit
fi
# Remove the A record
echo "Removing the A record from the record set relative to the [$DNS_ZONE_NAME] zone..."
az network dns record-set a remove-record \
--ipv4-address $IPV4_ADDRESS \
--record-set-name $RECORDSET_NAME \
--zone-name $DNS_ZONE_NAME \
--resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
--subscription $DNS_ZONE_SUBSCRIPTION_ID \
--only-show-errors 1>/dev/null
if [[ $? == 0 ]]; then
echo "[$IPV4_ADDRESS] ip address successfully removed from the [$RECORDSET_NAME] record set"
else
echo "Failed to remove the [$IPV4_ADDRESS] ip address from the [$RECORDSET_NAME] record set"
exit
fi
fi
# Create the A record
echo "Creating an A record in [$DNS_ZONE_NAME] DNS zone for the [$SUBDOMAIN] subdomain with [$PUBLIC_IP_ADDRESS] IP address..."
az network dns record-set a add-record \
--zone-name $DNS_ZONE_NAME \
--resource-group $DNS_ZONE_RESOURCE_GROUP_NAME \
--subscription $DNS_ZONE_SUBSCRIPTION_ID \
--record-set-name $SUBDOMAIN \
--ipv4-address $PUBLIC_IP_ADDRESS \
--only-show-errors 1>/dev/null
if [[ $? == 0 ]]; then
echo "A record for the [$SUBDOMAIN] subdomain with [$PUBLIC_IP_ADDRESS] IP address successfully created in [$DNS_ZONE_NAME] DNS zone"
else
echo "Failed to create an A record for the $SUBDOMAIN subdomain with [$PUBLIC_IP_ADDRESS] IP address in [$DNS_ZONE_NAME] DNS zone"
fi
Note
قبل نشر تطبيق Yelb وإنشاء كائن ingress، يقوم السكربت بإنشاء SecretProviderClass لاسترجاع شهادة TLS من Azure Key Vault وتوليد سر Kubernetes لكائن ingress. من المهم ملاحظة أن برنامج تشغيل CSI الخاص بمخزن Secrets Store ل Key Vault ينشئ سر Kubernetes الذي يحتوي على شهادة TLS فقط عندما يتم تضمين SecretProviderClass وتعريف المجلدات في deployment. لضمان استرجاع شهادة TLS بشكل صحيح من Azure Key Vault وتخزينها في سر Kubernetes المستخدم في كائن ingress، نحتاج إلى إجراء التعديلات التالية على بيان YAML لنشر yelb-ui:
- أضف تعريف
csi volumeباستخدام تعريفsecrets-store.csi.k8s.io، الذي يشير إلى كائنSecretProviderClassالمسؤول عن استرجاع شهادة TLS من Azure Key Vault. - أرفق
volume mountلقراءة الشهادة كسر عن Azure Key Vault.
لمزيد من المعلومات، راجع إعداد برنامج تشغيل CSI لتخزين الأسرار لتمكين وحدة تحكم الدخول NGINX باستخدام TLS.
اختبار التطبيق
استخدم السكربت 05-call-yelb-ui.sh لاستدعاء الخدمة yelb-ui ، ومحاكاة حقن SQL، وهجمات XSS، ومراقبة كيف تقوم مجموعة القواعد المدارة في ModSecurity بحجب الطلبات الخبيثة.
#!/bin/bash
# Variables
source ./00-variables.sh
# Call REST API
echo "Calling Yelb UI service at $URL..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL
# Simulate SQL injection
echo "Simulating SQL injection when calling $URL..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL/?users=ExampleSQLInjection%27%20--
# Simulate XSS
echo "Simulating XSS when calling $URL..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL/?users=ExampleXSS%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E
# A custom rule blocks any request with the word blockme in the querystring.
echo "Simulating query string manipulation with the 'blockme' word in the query string..."
curl -w 'HTTP Status: %{http_code}\n' -s -o /dev/null $URL/?users?task=blockme
يجب أن ينتج سكريبت Bash الناتج التالي، حيث تنجح المكالمة الأولى، بينما تحظر قواعد ModSecurity الاستدعاءين التاليين:
Calling Yelb UI service at https://yelb.contoso.com...
HTTP Status: 200
Simulating SQL injection when calling https://yelb.contoso.com...
HTTP Status: 403
Simulating XSS when calling https://yelb.contoso.com...
HTTP Status: 403
Simulating query string manipulation with the 'blockme' word in the query string...
HTTP Status: 403
مراقبة التطبيق
في الحل المقترح، تقوم عملية النشر تلقائيا بتكوين مورد Azure Application Gateway لجمع سجلات التشخيص والمقاييس إلى مساحة عمل Azure Log Analytics Workspace. من خلال تفعيل السجلات، يمكنك الحصول على رؤى قيمة حول التقييمات والتطابقات والكتل التي تجريها Azure Web Application Firewall (WAF) داخل بوابة التطبيقات. لمزيد من المعلومات، راجع سجلات التشخيص لبوابة التطبيق. يمكنك أيضا استخدام Log Analytics لفحص البيانات داخل سجلات جدار الحماية. عندما تكون سجلات جدار الحماية في مساحة عمل Log Analytics الخاصة بك، يمكنك عرض البيانات، وكتابة الاستعلامات، وإنشاء التصورات، وإضافتها إلى لوحة تحكم البوابة الخاصة بك. للحصول على معلومات مفصلة حول استعلامات السجلات، انظر نظرة عامة على استعلامات السجل في Azure Monitor.
استكشف البيانات باستخدام استعلامات Kusto
في الحل المقترح، تقوم عملية النشر تلقائيا بتكوين مورد Azure Application Gateway لجمع سجلات ومقاييس التشخيص إلى مساحة عمل Azure Log Analytics. من خلال تفعيل السجلات، يمكنك الحصول على رؤى حول التقييمات والتطابقات والكتل التي أجرتها Azure Web Application Firewall (WAF) داخل بوابة التطبيقات. لمزيد من المعلومات، راجع سجلات التشخيص لبوابة التطبيق.
يمكنك أيضا استخدام Log Analytics لفحص البيانات داخل سجلات جدار الحماية. عندما تكون سجلات جدار الحماية في مساحة عمل Log Analytics الخاصة بك، يمكنك عرض البيانات، وكتابة الاستعلامات، وإنشاء التصورات، وإضافتها إلى لوحة تحكم البوابة الخاصة بك. لمزيد من المعلومات حول استعلامات السجل، انظر نظرة عامة على استعلامات السجل في Azure Monitor.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| limit 10
بدلا من ذلك، عند العمل مع الجدول الخاص بالمورد ، يمكن الوصول إلى بيانات سجل جدار الحماية الخام باستخدام الاستعلام التالي. لمعرفة المزيد عن الجداول الخاصة بالموارد، يرجى الرجوع إلى وثائق مرجعية بيانات المراقبة .
AGWFirewallLogs
| limit 10
بمجرد أن تحصل على البيانات، يمكنك التعمق أكثر وإنشاء رسوم بيانية أو تصورات. إليك بعض الأمثلة الإضافية على استعلامات KQL التي يمكن استخدامها:
الطلبات المتطابقة/المحظورة بواسطة IP
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize count() by clientIp_s, bin(TimeGenerated, 1m)
| render timechart
الطلبات المطابقة/المحظورة بواسطة URI
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize count() by requestUri_s, bin(TimeGenerated, 1m)
| render timechart
أعلى القواعد المتطابقة
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize count() by ruleId_s, bin(TimeGenerated, 1m)
| where count_ > 10
| render timechart
أفضل خمس مجموعات قواعد متطابقة
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| summarize Count=count() by details_file_s, action_s
| top 5 by Count desc
| render piechart
مراجعة الموارد الموزعة
يمكنك استخدام Azure CLI أو Azure PowerShell لإدراج الموارد المنتشرة في مجموعة الموارد.
قم بإدراج الموارد المنشورة في مجموعة الموارد باستخدام أمر [az resource list][az-resource-list].
az resource list --resource-group <resource-group-name>
يمكنك استخدام Azure CLI أو Azure PowerShell لحذف مجموعة الموارد عندما لا تحتاج إلى الموارد التي أنشأتها في هذا الدرس.
احذف مجموعة الموارد ومواردها المرتبطة باستخدام az group delete الأمر.
az group delete --name <resource-group-name>
الخطوات التالية
يمكنك زيادة الأمان وحماية التهديدات للحل باستخدام Azure DDoS Protection و Azure Firewall. لمزيد من المعلومات، راجع المقالات التالية:
- Tutorial: احم بوابة التطبيق الخاصة بك باستخدام Azure DDoS Network Protection
- جدار الحماية وبوابة التطبيق للشبكات الظاهرية
- ثقة معدومة شبكة لتطبيقات الويب مع Azure Firewall وبوابة التطبيق
إذا كنت تستخدم وحدة تحكم الدخول NGINX أو أي وحدة تحكم دخول أخرى مستضافة من AKS بدلا من Azure Application Gateway، يمكنك استخدام Azure Firewall لفحص حركة المرور من وإلى عنقود AKS وحماية العنقود من تسرب البيانات وحركة المرور غير المرغوب فيها في الشبكة. لمزيد من المعلومات، راجع المقالات التالية:
- استخدم Azure Firewall لحماية خدمة Azure Kubernetes (AKS) العناصر
- استخدم Azure Firewall للمساعدة في حماية مجموعة خدمة Azure Kubernetes (AKS)
Contributors
تحافظ Microsoft على هذا المقال. قام المساهمون التاليون بكتابته في الأصل:
الكاتب الرئيسي:
- باولو سالفاتوري | مهندس العملاء الرئيسي
مساهمون آخرون:
- كين كيلتي | الوحدة النمطية للنظام الأساسي الموثوق به
- راسل دي بينا | الوحدة النمطية للنظام الأساسي الموثوق به
- إيرين شيفر | مطور المحتوى 2