جلسة مثبتة مع Docker Swarm (CE) على دبيان 9

المقدمة

يقوم Docker Swarm بتحويل خوادمك الفردية إلى مجموعة من أجهزة الكمبيوتر ؛ تسهيل التوسع والتوافر العالي وموازنة الحمل. يطبق Swarm Load-balancer استراتيجية موازنة تحميل مستديرة روبن ، وهذا قد يتداخل مع الأداء الصحيح للتطبيقات (القديمة) ذات الحالة التي تتطلب شكلًا من الجلسات اللزجة للسماح بإعداد عالي متاح مع حالات متعددة. يدعم Docker Enterprise Edition جلسة العمل اللاصقة Layer-7 ، ولكن في هذا الدليل سنركز على الإصدار المجاني (CE) من Docker. لتنفيذ الجلسات اللزجة سنستخدم Traefik.

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

  • ما لا يقل عن حالتين تم تحديثهما وتحديثهما حديثًا على Debian 9 في نفس الشبكة الفرعية مع تمكين الشبكات الخاصة
  • تثبيت Docker CE على هذه الحالات
  • يجب أن تكون الأمثلة جزءًا من نفس Swarm وأن تكون قادرة على التواصل مع بعضها البعض عبر الشبكة الخاصة
  • معرفة مسبقة Docker و Docker Swarm
  • مستخدم غير جذري لديه sudoحقوق (اختياري ولكن يُنصح بشدة بعدم استخدام المستخدم الجذر)

في هذا البرنامج التعليمي ، سنستخدم حالتين Vultr مع عناوين IP خاصة 192.168.0.100و 192.168.0.101. كلاهما عقد مدير Docker Swarm (وهي ليست مثالية للإنتاج ولكنها كافية لهذا البرنامج التعليمي).

من أنا

يستخدم هذا البرنامج التعليمي jwilder/whoamiصورة عامل الميناء كتطبيق تجريبي. سترد هذه الحاوية البسيطة على مكالمة REST باسم الحاوية المستجيبة ، مما يجعل من السهل جدًا اختبار ما إذا كانت الجلسات اللزجة تعمل. من الواضح أن هذه الصورة تُستخدم فقط لأغراض العرض التوضيحي ويجب استبدالها بصورة التطبيق الخاص بك.

يتم تكوين خدمة whoami على النحو التالي:

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000"  jwilder/whoami
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

إذا قمنا لاحقًا curlبنقطة نهاية whoami REST في http://192.168.0.100/، يمكننا رؤية موازنة التحميل المستديرة من Docker Swarm في العمل:

curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3

لا يوجد استخدام لاختبار هذا مع المتصفحات الحديثة مثل Chrome أو Firefox لأنها مصممة للحفاظ على الاتصالات على قيد الحياة ، وسيتغير موازن التحميل Docker Swarm فقط إلى الحاوية الأخرى عند كل اتصال جديد . إذا كنت تريد اختبار هذا باستخدام متصفح ، فسيتعين عليك الانتظار لمدة 30 ثانية على الأقل حتى يتم إغلاق الاتصال قبل التحديث مرة أخرى.

إعداد Traefik

تدعم Traefik في الأصل Docker Swarm ، يمكنها اكتشاف وتسجيل أو إلغاء تسجيل الحاويات على الطاير وتتواصل مع تطبيقك عبر شبكة التراكب الداخلية. يحتاج Traefik إلى بعض المعلومات حول تطبيقك قبل أن يتمكن من بدء معالجة الطلبات الخاصة به. يتم توفير هذه المعلومات إلى Traefik عن طريق إضافة ملصقات إلى خدمة Swarm الخاصة بك:

sudo docker service update --label-add "traefik.docker.network=whoaminet" --label-add "traefik.port=8000" --label-add "traefik.frontend.rule=PathPrefix:/" --label-add "traefik.backend.loadbalancer.stickiness=true" whoami-service

تصف القائمة التالية معنى كل تصنيف:

  • traefik.docker.network : شبكة تراكب Docker ، التي ستتواصل Traefik معها مع خدمتك
  • traefik.port : المنفذ الذي تستمع إليه خدمتك (هذا هو المنفذ المكشوف داخليًا ، وليس المنفذ المنشور)
  • traefik.frontend.rule: PathPrefix:/ يربط جذر السياق ' /' بهذه الخدمة
  • traefik.backend.loadbalancer.stickiness : تمكين جلسات مثبتة لهذه الخدمة

الآن بعد أن whoami-serviceتم تكوينها بالعلامات المطلوبة ، يمكننا إضافة خدمة Traefik إلى السرب:

sudo docker service create --name traefik -p8080:80 -p9090:8080 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock --mode=global --constraint 'node.role == manager' --network whoaminet traefik --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG

يقوم هذا الأمر بالكثير من الأشياء في وقت واحد ، كما هو موضح في القائمة التالية:

  • --name traefik : اسم خدمة Docker الجديدة لدينا هو Traefik
  • -p8080:80: ننشر منفذ Traefik 80إلى منفذ 8080لأن المنفذ 80قيد الاستخدام بالفعل من قبل خدمة whoami
  • -p9090:8080 : ننشر واجهة الويب الخاصة بـ Traefik إلى المنفذ 9090
  • --mount ... : نقوم بتركيب Docker Socket في الحاوية بحيث يمكن لـ Traefik الوصول إلى وقت تشغيل Docker للمضيف
  • --global : نريد حاويات Traefik في كل عقدة مدير لأسباب تتعلق بالتوافر العالي
  • --constraint 'node.role == manager': نريد فقط أن يتم تشغيل Traefik على عقد المدير لأن العقد العاملة لا يمكنها تزويد Traefik بالمعلومات التي تحتاجها. على سبيل المثال ، docker service lsفي العقدة العاملة لا تعمل ، لذلك لن تتمكن Traefik حتى من اكتشاف الخدمات التي تعمل
  • --network whoaminet: قم بتوصيل Traefik بالشبكة نفسها التي لدينا whoami-service، وإلا فلن يتمكن من الاتصال بها. قلنا سابقا Traefik للاتصال خدمتنا على هذه الشبكة مع traefik.docker.networkالتسمية
  • traefik : أخبر عامل الميناء لاستخدام أحدث صورة لرسو السفن Traefik لهذه الخدمة
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: تم تمرير وسيطات سطر الأوامر مباشرة إلى Traefik للسماح لها بالعمل في وضع سرب Docker. DEBUGاختياري هنا ، ولكنه مثير للاهتمام أثناء الإعداد ، وهذا البرنامج التعليمي

كل ما عليك فعله هو فتح المنافذ الضرورية في جدار حماية دبيان:

sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 9090 -j ACCEPT

كيف تعمل

بمجرد بدء تشغيل Traefik ، يمكنك أن ترى في السجلات أن Traefik يكتشف whoamiالحاويتين. يقوم أيضًا بإخراج اسم ملف تعريف الارتباط الذي سيستخدمه للتعامل مع الجلسة اللزجة:

time="2018-11-25T13:17:30Z" level=debug msg="Configuration received from provider docker: {\"backends\":{\"backend-whoami-service\":{\"servers\":{\"server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05\":{\"url\":\"http://10.0.0.5:8000\",\"weight\":1},\"server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6\":{\"url\":\"http://10.0.0.4:8000\",\"weight\":1}},\"loadBalancer\":{\"method\":\"wrr\",\"stickiness\":{}}}},\"frontends\":{\"frontend-PathPrefix-0\":{\"entryPoints\":[\"http\"],\"backend\":\"backend-whoami-service\",\"routes\":{\"route-frontend-PathPrefix-0\":{\"rule\":\"PathPrefix:/\"}},\"passHostHeader\":true,\"priority\":0,\"basicAuth\":null}}}"
time="2018-11-25T13:17:30Z" level=debug msg="Wiring frontend frontend-PathPrefix-0 to entryPoint http"
time="2018-11-25T13:17:30Z" level=debug msg="Creating backend backend-whoami-service"
time="2018-11-25T13:17:30Z" level=debug msg="Adding TLSClientHeaders middleware for frontend frontend-PathPrefix-0"
time="2018-11-25T13:17:30Z" level=debug msg="Creating load-balancer wrr"
time="2018-11-25T13:17:30Z" level=debug msg="Sticky session with cookie _a49bc"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05 at http://10.0.0.5:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6 at http://10.0.0.4:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating route route-frontend-PathPrefix-0 PathPrefix:/"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :80"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :8080"

إذا تجعدنا http://192.168.0.100:8080يمكننا رؤية أن ملف تعريف الارتباط الجديد _a49bcقد تم تعيينه:

curl -v http://192.168.0.100:8080
* About to connect() to 192.168.0.100 port 8080 (#0)
*   Trying 192.168.0.100...
* Connected to 192.168.0.100 (192.168.0.100) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.100:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
< Date: Sun, 25 Nov 2018 13:18:40 GMT
< Set-Cookie: _a49bc=http://10.0.0.5:8000; Path=/
<
I'm a6a8c9294fc3
* Connection #0 to host 192.168.0.100 left intact

إذا قمنا ، في المكالمات اللاحقة ، بإرسال ملف تعريف الارتباط هذا إلى Traefik ، فسيتم إعادة توجيهنا دائمًا إلى نفس الحاوية:

curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3

لا يحتوي ملف تعريف الارتباط إلا على عنوان IP الداخلي للحاوية التي يجب أن ترسلها Traefik إلى الطلب. إذا قمت بتغيير قيمة ملف تعريف الارتباط إلى http://10.0.0.4:8000، فسيتم إعادة توجيه الطلب إلى الحاوية الأخرى. إذا لم يتم إعادة إرسال ملف تعريف الارتباط إلى Traefik مطلقًا ، فلن تعمل الجلسة اللزجة وستتم موازنة الطلبات بين حاويات التطبيق وحاويات Traefik.

هذا كل ما تحتاجه لإعداد جلسات العمل اللاصقة من Layer 7 في Docker CE على Debian 9.



Leave a Comment

نشر Kubernetes مع Kubeadm على CentOS 7

نشر Kubernetes مع Kubeadm على CentOS 7

نظرة عامة تهدف هذه المقالة إلى مساعدتك في إنشاء مجموعة Kubernetes وتشغيلها باستخدام kubeadm في لمح البصر. سيقوم هذا الدليل بنشر خادمين في

نشر تطبيق PHP باستخدام Docker-compose

نشر تطبيق PHP باستخدام Docker-compose

عادة ما تتكون تطبيقات PHP من خادم ويب ونظام قاعدة بيانات علائقية ومترجم لغة نفسه. في هذا البرنامج التعليمي سنكون leveragin

قم بتثبيت Docker CE على Ubuntu 18.04

قم بتثبيت Docker CE على Ubuntu 18.04

مقدمة Docker هو تطبيق يسمح لنا بنشر البرامج التي يتم تشغيلها كحاويات. وقد كتب بلغة البرمجة Go الشهيرة

نشر تطبيق Node.js باستخدام Docker

نشر تطبيق Node.js باستخدام Docker

ستوضح لك هذه المقالة كيفية نشر تطبيق Node داخل حاوية Docker. ملاحظة: يفترض هذا البرنامج التعليمي أنك قمت بتثبيت Docker وقراءته

نشر وإدارة حاويات LXC بأمان على Ubuntu 14.04

نشر وإدارة حاويات LXC بأمان على Ubuntu 14.04

حاويات LXC (حاويات Linux) هي إحدى ميزات نظام التشغيل في Linux والتي يمكن استخدامها لتشغيل العديد من أنظمة Linux المعزولة على مضيف واحد. هذه

ابدأ مع Kubernetes على CentOS 7

ابدأ مع Kubernetes على CentOS 7

Kubernetes هو نظام أساسي مفتوح المصدر تم تطويره بواسطة Google لإدارة التطبيقات في حاويات عبر مجموعة من الخوادم. إنه يبني على عقد و

قم بتثبيت Rancher على Ubuntu 16.04

قم بتثبيت Rancher على Ubuntu 16.04

استخدام نظام مختلف؟ مقدمة Rancher هي منصة مفتوحة المصدر لتشغيل الحاويات وبناء خدمة حاويات خاصة. رانشر هو القاعدة

تثبيت Docker-compose على CoreOS

تثبيت Docker-compose على CoreOS

تشرح هذه المقالة كيفية تثبيت Docker-compose على CoreOS. في CoreOS ، المجلد / usr / غير قابل للتغيير بحيث لا يتو��ر المسار القياسي / usr / local / bin

على CoreOS ، قم بإعداد سجل Docker الخاص بك

على CoreOS ، قم بإعداد سجل Docker الخاص بك

نعلم جميعًا ونحب Docker ، وهي منصة لإنشاء وإدارة وتوزيع حاويات التطبيقات عبر أجهزة متعددة. تقدم شركة Docker Inc. خدمة ر

قم بتثبيت Rancher على CentOS 7

قم بتثبيت Rancher على CentOS 7

استخدام نظام مختلف؟ مقدمة Rancher هي منصة مفتوحة المصدر لتشغيل الحاويات وبناء خدمة حاويات خاصة. رانشر هو القاعدة

جلسة مثبتة مع سرب Docker (CE) على CentOS 7

جلسة مثبتة مع سرب Docker (CE) على CentOS 7

استخدام نظام مختلف؟ مقدمة يحول Docker Swarm خوادمك الفردية إلى مجموعة من أجهزة الكمبيوتر ، مما يسهل القياس والتوافر العالي

تثبيت Docker على CentOS 7

تثبيت Docker على CentOS 7

استخدام نظام مختلف؟ Docker هو تطبيق يسمح بنشر البرامج داخل حاويات افتراضية. تمت كتابته في برنامج Go

قم بتثبيت Rancher Server على RancherOS

قم بتثبيت Rancher Server على RancherOS

نظرة عامة RancherOS هو نظام تشغيل خفيف الوزن بشكل لا يصدق (حوالي 60 ميجا بايت فقط) يقوم بتشغيل برنامج Docker daemon باسم PID 0 لتشغيل خدمات النظام

كيفية استخدام Docker: إنشاء أول حاوية Docker

كيفية استخدام Docker: إنشاء أول حاوية Docker

يوضح هذا البرنامج التعليمي أساسيات البدء مع Docker. أفترض أن لديك Docker مثبتة بالفعل. ستعمل الخطوات في هذا البرنامج التعليمي على

موازنة التحميل مع عامل الميناء

موازنة التحميل مع عامل الميناء

عند تشغيل تطبيق ويب ، تحتاج عادةً إلى تحقيق أقصى استفادة من مواردك دون الحاجة إلى تحويل البرنامج الخاص بك لاستخدام مؤشرات متعددة

ابدأ مع SQL Server 2017 (MS-SQL) على CentOS 7 مع Docker

ابدأ مع SQL Server 2017 (MS-SQL) على CentOS 7 مع Docker

المتطلبات الأساسية محرك Docker 1.8+. 4 جيجابايت على الأقل من مساحة القرص. 4 غيغابايت على الأقل من ذاكرة الوصول العشوائي. الخطوة 1. تثبيت Docker من أجل تثبيت SQL-Server ، Docker mus

تثبيت Docker CE على دبيان 9

تثبيت Docker CE على دبيان 9

استخدام نظام مختلف؟ مقدمة Docker هو تطبيق يسمح بنشر البرامج داخل حاويات افتراضية. هو مكتوب في G

تثبيت Docker على Ubuntu 14.04

تثبيت Docker على Ubuntu 14.04

استخدام نظام مختلف؟ Docker هو تطبيق يسمح بنشر البرامج التي يتم تشغيلها كحاويات. وقد كتب في برنامج Go الشهير

إنشاء سرب Docker على Alpine Linux 3.9.0

إنشاء سرب Docker على Alpine Linux 3.9.0

مقدمة سيوضح لك هذا الدليل كيفية إنشاء وتكوين سرب Docker باستخدام عدة خوادم Alpine Linux 3.9.0 و Portainer. يرجى الانتباه إلى ذلك

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد