المختبر 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