انتقل إلى المحتوى الرئيسي

المختبر 8.4 - النطاقات المتعددة والمضيفون الافتراضيون

أهداف المختبر​

في نهاية هذا المختبر، ستكون قادرًا على:

  • تكوين عدة نطاقات في Ingress واحد.
  • توجيه حركة المرور إلى تطبيقات مختلفة حسب النطاق.
  • فهم المضيفون الافتراضيون.
  • تكوين TLS لعدة نطاقات.
  • اختبار الوصول إلى عدة نطاقات.

المدة المقدرة​

45-60 دقيقة

المتطلبات الأساسية​

  • تثبيت وتكوين kubectl.
  • عنقود Kubernetes مع Ingress Controller.
  • معرفة بـ Ingress (المختبرات السابقة).

الجزء 1: نشر عدة تطبيقات​

لنقم بنشر ثلاث تطبيقات مختلفة لثلاثة نطاقات.

الخطوة 1.1: تطبيق للنطاق الأول​

قم بإنشاء app1-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: app1
spec:
replicas: 2
selector:
matchLabels:
app: app1
template:
metadata:
labels:
app: app1
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app1-service
spec:
selector:
app: app1
ports:
- port: 80
targetPort: 80

الخطوة 1.2: تطبيق للنطاق الثاني​

قم بإنشاء app2-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: app2
spec:
replicas: 2
selector:
matchLabels:
app: app2
template:
metadata:
labels:
app: app2
spec:
containers:
- name: httpd
image: httpd:2.4
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app2-service
spec:
selector:
app: app2
ports:
- port: 80
targetPort: 80

الخطوة 1.3: تطبيق للنطاق الثالث​

قم بإنشاء app3-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: app3
spec:
replicas: 2
selector:
matchLabels:
app: app3
template:
metadata:
labels:
app: app3
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app3-service
spec:
selector:
app: app3
ports:
- port: 80
targetPort: 80

قم بتطبيق جميع عمليات النشر:

kubectl apply -f app1-deployment.yaml
kubectl apply -f app2-deployment.yaml
kubectl apply -f app3-deployment.yaml

الجزء 2: تكوين Ingress للنطاقات المتعددة​

الخطوة 2.1: إنشاء Ingress مع عدة نطاقات​

قم بإنشاء ingress-multi-domain.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-domain-ingress
spec:
ingressClassName: nginx
rules:
# النطاق الأول
- host: app1.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
# النطاق الثاني
- host: app2.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
# النطاق الثالث
- host: app3.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 80

قم بتطبيق Ingress:

kubectl apply -f ingress-multi-domain.yaml

الجزء 3: تكوين أسماء المضيفين​

الخطوة 3.1: إضافة الإدخالات في /etc/hosts​

أضف النطاقات الثلاثة في ملف /etc/hosts (أو ما يعادله في Windows):

<INGRESS_IP> app1.local
<INGRESS_IP> app2.local
<INGRESS_IP> app3.local

استبدل <INGRESS_IP> بعنوان IP الخاص بـ Ingress Controller.


الجزء 4: اختبار النطاقات​

الخطوة 4.1: اختبار كل نطاق​

اختبر الوصول إلى كل نطاق:

# اختبار app1.local
curl http://app1.local

# اختبار app2.local
curl http://app2.local

# اختبار app3.local
curl http://app3.local

يجب أن ترى ردودًا مختلفة حسب النطاق.

الخطوة 4.2: التحقق باستخدام Header Host​

يمكنك أيضًا الاختبار باستخدام Header Host:

curl -H "Host: app1.local" http://<INGRESS_IP>
curl -H "Host: app2.local" http://<INGRESS_IP>
curl -H "Host: app3.local" http://<INGRESS_IP>

الجزء 5: TLS لعدة نطاقات​

الخطوة 5.1: إنشاء شهادات لكل نطاق​

إذا كنت تستخدم cert-manager، قم بإنشاء شهادات لكل نطاق:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app1-tls-cert
spec:
secretName: app1-tls-secret
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app1.local
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app2-tls-cert
spec:
secretName: app2-tls-secret
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app2.local
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app3-tls-cert
spec:
secretName: app3-tls-secret
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app3.local

الخطوة 5.2: تكوين TLS في Ingress​

قم بتعديل Ingress لتضمين TLS:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-domain-ingress-tls
spec:
ingressClassName: nginx
tls:
- hosts:
- app1.local
secretName: app1-tls-secret
- hosts:
- app2.local
secretName: app2-tls-secret
- hosts:
- app3.local
secretName: app3-tls-secret
rules:
- host: app1.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- host: app2.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
- host: app3.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 80

الجزء 6: التنظيف​

قم بحذف الموارد:

kubectl delete ingress multi-domain-ingress
kubectl delete -f app1-deployment.yaml
kubectl delete -f app2-deployment.yaml
kubectl delete -f app3-deployment.yaml

ملخص المختبر​

في هذا المختبر، قمت بتكوين Ingress مع عدة نطاقات (مضيفون افتراضيون). تعلمت كيفية توجيه حركة المرور إلى تطبيقات مختلفة حسب النطاق، وتكوين TLS لعدة نطاقات، واختبار الوصول إلى كل نطاق.


الخطوات التالية​

هذه الوحدة حول Ingress و Load Balancing مكتملة الآن. يمكنك الانتقال إلى الوحدة 9 حول الأمان و RBAC.

الوحدة 9: الأمان و RBAC


تم إنشاء المختبر في: ديسمبر 2024