ليس سرا أن K8S لديها مجتمع ممتاز ووثائق جيدة بشكل عام. يمكنك أن تجد فيه بسهولة الإجابة على العديد من الأسئلة. ولكن مثل أي وثائق أخرى ، لا يمكنها تغطية كل شيء على الإطلاق. في هذه المقالة سأحاول تقديم تعليمات مفصلة حول كيفية نشر وتكوين Traefik لاستخدامها كوحدة تحكم Ingress.

ما هو الدخول؟
Ingress هو كائن API يتحكم في الوصول الخارجي إلى الخدمات في مجموعة ، بشكل أساسي من خلال HTTP / HTTPS. لكي يعمل مورد Ingress ، تحتاج إلى وحدة تحكم Ingress. إذا كنت تستخدم GCE ، فسيتم نشر وحدة تحكم Ingress بالفعل إلى المعالج. ومع ذلك ، إذا قمت بنفسك بتنزيل المجموعة ، على سبيل المثال من kops
إلى AWS ، فستحتاج إلى نشر وحدة تحكم Ingress بنفسك. على minikube ، يتم حل ذلك عن طريق تضمين الوظيفة الإضافية Ingress.
وحدات تحكم الدخول
يمكن تنفيذ دور وحدة تحكم Ingress بواسطة NGINX Ingress Controller ، Kong ، Octavia Ingress Controller ، إلخ. في هذه المقالة سننظر في أداة مثل Traefik ونرى كيف يمكنك استخدامها كوحدة تحكم Ingress للخدمات في مجموعة.
لماذا؟
لماذا تستخدم وحدة تحكم Ingress إذا كان بإمكانك توفير الوصول إلى كل خدمة من خلال NodePort
أو LoadBalancer
؟ باختصار ، يسمح هذا بنقطة مركزية واحدة للتوكيل لكل حركة المرور. بمعنى ، باستخدام وحدة تحكم Ingress ، تحتاج فقط إلى LoadBalancer لـ Traefik ولا شيء أكثر. ستحل هذه الحزمة كل حركة المرور.
مكونات Traefik
أعلن Traefik عن دعم Kubernetes Ingress في الإصدار 1.4. ومع ذلك ، فإن Traefik 1.7 الذي تم إصداره مؤخرًا يحتوي على خيار الخدمة publishedService,
والذي يمكنه تحديث حقل status
في Ingress ، والذي لم يكن في الإصدارات السابقة. فيما يلي قائمة بالمكونات المطلوبة للتشغيل.
إنشاء:
- مساحة الاسم
- حساب الخدمة
- سر TLS
- دور الكتلة
- دور دور الكتلة
- تكوين
- نشر
- خدمة http و https
- خدمة لوحة القيادة Traefik
- دخول
مساحة الاسم
إنشاء مساحة اسم:
kubectl create namespace traefik
TLS Secret
(تقريبًا لكل. - في المثال أدناه ، لسبب ما ، يكرر المؤلف نفس التكوين ، راجع التكوين الحالي في ملف README المقدم بواسطة الرابط أدناه)
قم أولاً بإنشاء شهادة:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./tls.key -out ./tls.crt -subj "/CN=*.example.com"
إنشاء شهادة TLS:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./tls.key -out ./tls.crt -subj "/CN=*.example.com"
إنشاء سر:
kubectl create secret tls traefik-ui-tls-cert --key ./tls.key --cert ./tls.crt
من أجل الراحة ، قمت بعمل ملف README باستخدام هذه الأوامر وقمت بتحميله إلى GitHub .
ConfigMap
--- apiVersion: v1 kind: ConfigMap metadata: name: traefik-configmap namespace: traefik data: traefik.toml: | defaultEntryPoints = ["http","https"] [entryPoints] [entryPoints.http] address = ":80" [entryPoints.https] address = ":443" [entryPoints.https.tls] [[entryPoints.https.tls.certificates]] CertFile = "/ssl/tls.crt" KeyFile = "/ssl/tls.key" [entryPoints.traefik] address = ":8080" [entryPoints.traefik.auth.basic] users = ["admin:$apr1$zjjGWKW4$W2JIcu4m26WzOzzESDF0W/"] [kubernetes] [kubernetes.ingressEndpoint] publishedService = "traefik/traefik" [ping] entryPoint = "http" [api] entryPoint = "traefik"
بشكل افتراضي ، EntryPoints هي منافذ 80
و 443
.
يستمع EntryPoint http
:80
وليس لديه قواعد إضافية
يستمع EntryPoint https
على :443
ويحتوي على قاعدة لتوصيل شهادات TLS.
يستمع EntryPoint traefik
:8080
ويستخدم المصادقة الأساسية. اسم المستخدم هو admin
، كلمة المرور هي admin
.
يتم تعريف نقطة النهاية المقابلة Ingress في Kubernetes عن طريق تحديد publishService
ويجب أن يتكون من قيمة namespace
واسم service
لـ Traefik. في هذه الحالة ، هو traefik / traefik
.
ping
أو الفحص الصحي ستستخدم entryPoint http
.
api
أو dashboard / ui ستستخدم entryPoint traefik
.
لاحظ أنه يمكنك تحديد نقاط إدخال إضافية باستخدام منفذ. يمكن لهذا المنفذ نقل حركة المرور إلى أي منفذ ، بدلاً من المنافذ الديناميكية و NodePort
.
Clusterrole
يجب أن يكون لحساب خدمة Traefik إذن لتحديث حقل Ingress status
. هذه معلمة مهمة ، ولم يتم تقديمها بعد في وثائق Traefik الرسمية :
--- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: traefik-ingress-controller rules: - apiGroups: - "" resources: - services - endpoints - secrets verbs: - get - list - watch - apiGroups: - extensions resources: - ingresses verbs: - get - list - watch - apiGroups: - extensions resources: - ingresses/status verbs: - update
الخطوط الستة الأخيرة مهمة جدًا للتشغيل الصحيح.
النشر
النشر واضح ومباشر للغاية. دعنا نذهب لفترة وجيزة من خلال الكتل الرئيسية:
volumes: - name: traefik-ui-tls-cert secret: secretName: traefik-ui-tls-cert - name: traefik-configmap configMap: name: traefik-configmap
حدد volumes
ConfigMap و Secret ، والتي يمكن استخدامها بعد ذلك في volumeMounts
.
volumeMounts: - mountPath: "/ssl" name: "traefik-ui-tls-cert" - mountPath: "/config" name: "traefik-configmap"
يتم إجراء فحوصات السلامة على المنفذ 80 ، كما هو محدد في ConfigMap.
فتح المنافذ لجميع نقاط الدخول المحددة في ملف التكوين:
ports: - name: http containerPort: 80 - name: https containerPort: 443 - name: dashboard containerPort: 8080
أذكرك أن بعض الأمثلة والوثائق على الإنترنت قديمة ، لذا لا تفوت قسم الحجج اللازمة لكي يعمل Traefik:
args: - --logLevel=INFO - --configfile=/config/traefik.toml
لا تمرر علامات وسيطات إضافية ، مثل -api أو -ping أو -kubernetes ، لأن هذا سيتجاوز الإعدادات المحددة في ملف التكوين.
الخدمة
أول الخدمات يحدد Loadbalancer لـ entryPoints http
و https
. إذا نظرت إلى مجموعة الأمان (Ingress) الخاصة بـ LoadBalancer ، فسترى المنفذين 80 و 443 مفتوحين هناك. ستقوم K8s بإنشاء LoadBalancer وتوصيله بالعقد التي يعمل عليها Traefik. إذا كنت تريد إنشاء ELB داخلي ، مثلي ، فأنت بحاجة إلى تحديد التعليقات التوضيحية:
--- kind: Service apiVersion: v1 metadata: name: traefik namespace: traefik annotations: # service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 spec: selector: k8s-app: traefik-ingress ports: - protocol: TCP port: 80 name: http - protocol: TCP port: 443 name: https type: LoadBalancer
الخدمة (للوحة البيانات)
الآن الجزء الممتع! نظرًا لأن Dashboard تستخدم المصادقة الأساسية ، فقد احتجت إلى https
. لاستخدام SSL ، نحتاج إلى إعادة توجيه حركة المرور إلى المنفذ :8080
، الذي تعمل عليه لوحة التحكم. كما ترون ، إنه بسيط للغاية. كل السحر يحدث في الدخول.
--- kind: Service apiVersion: v1 metadata: name: traefik-dashboard namespace: traefik spec: selector: k8s-app: traefik-ingress ports: - port: 8080 name: dashboard
الدخول (للوحة العدادات)
يكمن السر في أن حركة المرور الآمنة إلى لوحة البيانات تتم من خلال Traefik نفسها. تتم إدارة Traefik في Ingress باستخدام التعليقات التوضيحية لـ Traefik :
--- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: traefik-dashboard-ingress namespace: traefik annotations: kubernetes.io/ingress.class: traefik traefik.ingress.kubernetes.io/frontend-entry-points: http,https traefik.ingress.kubernetes.io/redirect-entry-point: https traefik.ingress.kubernetes.io/redirect-permanent: "true" spec: rules: - host: traefik-ui.example.com http: paths: - path: / backend: serviceName: traefik-dashboard servicePort: 8080
استغرق الأمر 4 تعليقات توضيحية بسيطة وواضحة.
بالطبع ، لضمان الوظائف الكاملة ، تحتاج إلى إنشاء سجل DNS traefik-ui.example.com
، والذي traefik-ui.example.com
إلى ELB الخاص بك.
هل سيكون من الجميل أن يتم ذلك تلقائيًا؟ ليست مشكلة ، سأكتب عن الإنشاء التلقائي لسجلات DNS في المقالة التالية.
المراجع
يمكن تنزيل ملف loy.yaml النهائي من مستودع Github الخاص بي. إذا واجهتك أي صعوبات أثناء عملية الإعداد ، فلا تتردد في السؤال.
فراق الكلمات من المترجم
اقرأ مقالات أخرى على مدونتنا:
النسخ الاحتياطية للدولة في Kubernetes
النسخ الاحتياطي لعدد كبير من مشاريع الويب غير المتجانسة
بوت برقية لـ Redmine. كيف تبسط الحياة لنفسك وللناس