Sticky Session With Docker Swarm (CE) pada Debian 9

pengantar

Docker Swarm mengubah masing-masing server Anda menjadi sekelompok komputer; memfasilitasi penskalaan, ketersediaan tinggi, dan keseimbangan beban. Penyeimbang beban Swarm menerapkan strategi penyeimbangan beban round-robin, dan ini dapat mengganggu fungsi yang benar dari aplikasi stateful (legacy) yang memerlukan beberapa bentuk sesi sticky untuk memungkinkan pengaturan yang tersedia tinggi dengan banyak instance. Docker Enterprise Edition mendukung sesi lengket Layer-7, tetapi dalam panduan ini kami akan fokus pada versi Docker yang gratis (CE). Untuk menerapkan sesi lengket kami akan menggunakan Traefik.

Prasyarat

  • Setidaknya dua instance Debian 9 yang baru saja dikerahkan dan diperbarui di subnet yang sama dengan jaringan pribadi diaktifkan
  • Docker CE diinstal pada instance ini
  • Mesin virtual harus menjadi bagian dari Swarm yang sama dan harus dapat berkomunikasi satu sama lain melalui jaringan pribadi
  • Pengetahuan sebelumnya tentang Docker dan Docker Swarm
  • Pengguna non-root dengan sudohak (opsional tetapi sangat disarankan untuk tidak menggunakan pengguna root)

Dalam tutorial ini kita akan menggunakan dua instance Vultr dengan alamat IP pribadi 192.168.0.100dan 192.168.0.101. Keduanya adalah node manajer Docker Swarm (yang tidak ideal untuk produksi tetapi cukup untuk tutorial ini).

Siapa saya

Tutorial ini menggunakan jwilder/whoamigambar buruh pelabuhan sebagai aplikasi demo. Wadah sederhana ini akan menanggapi panggilan REST dengan nama wadah merespons, sehingga sangat mudah untuk menguji apakah sesi lengket berfungsi. Gambar ini jelas hanya digunakan untuk tujuan demo dan perlu diganti oleh gambar aplikasi Anda sendiri.

Layanan whoami dikonfigurasi sebagai berikut:

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

Jika kemudian curltitik akhir whoami REST di http://192.168.0.100/, kita dapat melihat penyeimbangan muatan round-robin dari Docker Swarm di tempat kerja:

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

Tidak ada gunanya menguji ini dengan browser modern seperti Chrome atau Firefox karena mereka dirancang untuk menjaga koneksi tetap hidup, dan penyeimbang beban Docker Swarm hanya akan beralih ke wadah lain pada setiap koneksi baru . Jika Anda ingin menguji ini dengan browser Anda harus menunggu setidaknya 30 detik untuk koneksi ditutup sebelum menyegarkan kembali.

Menyiapkan Traefik

Traefik secara alami mendukung Docker Swarm, ia dapat mendeteksi dan mendaftarkan atau membatalkan registrasi kontainer saat bepergian dan berkomunikasi dengan aplikasi Anda melalui jaringan overlay internal. Traefik memerlukan beberapa informasi tentang aplikasi Anda sebelum dapat mulai menangani permintaan untuk itu. Informasi ini diberikan kepada Traefik dengan menambahkan label ke layanan Swarm Anda:

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

Daftar berikut menjelaskan arti setiap label:

  • traefik.docker.network : Jaringan hamparan Docker, tempat Traefik akan berkomunikasi dengan layanan Anda
  • traefik.port : Port tempat layanan Anda mendengarkan (ini adalah port yang terlihat secara internal, bukan port yang dipublikasikan)
  • traefik.frontend.rule: PathPrefix:/ mengikat root konteks ' /' ke layanan ini
  • traefik.backend.loadbalancer.stickiness : Mengaktifkan sesi lengket untuk layanan ini

Sekarang setelah whoami-servicedikonfigurasi dengan label yang diperlukan, kita dapat menambahkan layanan Traefik ke swarm:

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

Perintah ini melakukan banyak hal sekaligus, seperti yang ditunjukkan dalam daftar berikut:

  • --name traefik : Nama layanan Docker baru kami adalah Traefik
  • -p8080:80: Kami menerbitkan port Traefik 80ke port 8080karena port 80sudah digunakan oleh layanan whoami kami
  • -p9090:8080 : Kami menerbitkan antarmuka web Traefik sendiri ke porta 9090
  • --mount ... : Kami memasang Docker Socket ke wadah agar Traefik dapat mengakses runtime Docker host
  • --global : Kami ingin wadah Traefik pada setiap simpul manajer untuk alasan ketersediaan tinggi
  • --constraint 'node.role == manager': Kami hanya ingin Traefik dijalankan pada node manajer karena node pekerja tidak dapat memberikan informasi yang dibutuhkan Traefik. Misalnya, docker service lspada simpul pekerja tidak berfungsi, jadi Traefik bahkan tidak akan dapat menemukan layanan apa yang sedang berjalan
  • --network whoaminet: Sambungkan Traefik ke jaringan yang sama dengan kami whoami-service, jika tidak, ia tidak dapat terhubung. Kami sebelumnya memberi tahu Traefik untuk terhubung ke layanan kami melalui jaringan ini dengan traefik.docker.networklabel
  • traefik : Katakan kepada buruh pelabuhan untuk menggunakan gambar buruh pelabuhan Traefik terbaru untuk layanan ini
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Argumen baris perintah diteruskan langsung ke Traefik untuk memungkinkannya berjalan dalam mode kawanan Docker. DEBUGopsional di sini, tetapi menarik selama pengaturan, dan untuk tutorial ini

Yang harus dilakukan adalah membuka port yang diperlukan di firewall Debian:

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

Bagaimana itu bekerja

Segera setelah Traefik mulai, Anda dapat melihat di log bahwa Traefik menemukan dua whoamikontainer. Itu juga mengeluarkan nama cookie yang akan digunakan untuk menangani sesi lengket:

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"

Jika kami curl ke http://192.168.0.100:8080kami dapat melihat bahwa cookie baru _a49bc,, telah ditetapkan:

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

Jika, pada panggilan berikutnya, kami mengirim cookie ini ke Traefik, kami akan selalu diteruskan ke wadah yang sama:

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

Cookie tidak berisi apa pun kecuali alamat IP internal wadah tempat Traefik harus mengirim untuk meminta. Jika Anda mengubah nilai cookie menjadi http://10.0.0.4:8000, maka permintaan secara efektif akan diteruskan ke wadah lain. Jika cookie tidak pernah dikirim kembali ke Traefik, maka sesi sticky tidak akan berfungsi dan permintaan akan seimbang antara wadah aplikasi dan wadah Traefik.

Itu semua yang diperlukan untuk mengatur Layer 7 Sticky Sessions di Docker CE pada Debian 9.



Leave a Comment

Menyebarkan Kubernet Dengan Kubeadm di CentOS 7

Menyebarkan Kubernet Dengan Kubeadm di CentOS 7

Ikhtisar Artikel ini dimaksudkan untuk membantu Anda mendapatkan kluster Kubernet dan menjalankan dengan kubeadm dalam waktu singkat. Panduan ini akan menggunakan dua server, pada

Instal OS Rancher melalui iPXE

Instal OS Rancher melalui iPXE

Rancher OS adalah distribusi Linux yang sangat ringan yang dibangun di sekitar Docker. OS itu sendiri berbobot sekitar 20MB. Tutorial ini akan membantu Anda menjalankan dan menjalankannya

Instal Docker CE di Ubuntu 18.04

Instal Docker CE di Ubuntu 18.04

Pendahuluan Docker adalah aplikasi yang memungkinkan kita untuk menyebarkan program yang dijalankan sebagai wadah. Itu ditulis dalam bahasa pemrograman Go populer

Menginstal Docker pada CentOS 7

Menginstal Docker pada CentOS 7

Menggunakan Sistem yang Berbeda? Docker adalah aplikasi yang memungkinkan untuk penyebaran perangkat lunak dalam wadah virtual. Itu ditulis dalam programmin Go

Cara Memasang Harbour pada CentOS 7

Cara Memasang Harbour pada CentOS 7

Harbor adalah server registri sumber terbuka kelas perusahaan yang menyimpan dan mendistribusikan gambar Docker. Harbor memperluas distribusi Docker sumber terbuka b

Menginstal docker-compose di CoreOS

Menginstal docker-compose di CoreOS

Artikel ini menjelaskan cara menginstal docker-compose di CoreOS. Di CoreOS, folder / usr / tidak dapat diubah sehingga jalur standar / usr / local / bin tidak tersedia untuk

Instal Rancher di CentOS 7

Instal Rancher di CentOS 7

Menggunakan Sistem yang Berbeda? Pendahuluan Rancher adalah platform sumber terbuka untuk menjalankan kontainer dan membangun layanan kontainer pribadi. Peternak adalah pangkalan

Instal Rancher di Ubuntu 16.04

Instal Rancher di Ubuntu 16.04

Menggunakan Sistem yang Berbeda? Pendahuluan Rancher adalah platform sumber terbuka untuk menjalankan kontainer dan membangun layanan kontainer pribadi. Peternak adalah pangkalan

Menyebarkan Aplikasi PHP Menggunakan Docker-compose

Menyebarkan Aplikasi PHP Menggunakan Docker-compose

Aplikasi PHP biasanya disusun oleh server web, sistem basis data relasional dan juru bahasa itu sendiri. Dalam tutorial ini kita akan menjadi leveragin

Dua Alat Pengelola Grafis Docker: DockerUI dan Galangan Kapal

Dua Alat Pengelola Grafis Docker: DockerUI dan Galangan Kapal

Dengan bantuan aplikasi Vultr Docker, Anda dapat dengan mudah menggunakan Docker pada instance server Vultr Anda. Sementara itu, Anda dapat memfasilitasi tugas mengelola Docker

Pada CoreOS, Atur Registri Docker Anda Sendiri

Pada CoreOS, Atur Registri Docker Anda Sendiri

Kita semua tahu dan cinta Docker, sebuah platform untuk membuat, mengelola, dan mendistribusikan kontainer aplikasi di beberapa mesin. Docker Inc. menyediakan layanan t

Setup Sentry via Docker di Ubuntu 16.04

Setup Sentry via Docker di Ubuntu 16.04

Menggunakan Sistem yang Berbeda? Pendahuluan Sentry adalah solusi open source untuk pelacakan kesalahan. Sentry melacak pengecualian dan pesan berguna lainnya

Instal Server Rancher di RancherOS

Instal Server Rancher di RancherOS

Ikhtisar RancherOS adalah sistem operasi yang sangat ringan (hanya sekitar 60 MB) yang menjalankan daemon Docker sistem sebagai PID 0 untuk menjalankan layanan sistem

Memulai dengan Kubernetes di CentOS 7

Memulai dengan Kubernetes di CentOS 7

Kubernetes adalah platform sumber terbuka yang dikembangkan oleh Google untuk mengelola aplikasi kemas di sekelompok server. Itu dibangun di atas satu dekade dan

Sticky Session With Docker Swarm (CE) pada CentOS 7

Sticky Session With Docker Swarm (CE) pada CentOS 7

Menggunakan Sistem yang Berbeda? Pendahuluan Docker Swarm mengubah masing-masing server Anda menjadi sekelompok komputer, memfasilitasi penskalaan, ketersediaan tinggi dan

Cara Menggunakan Docker: Membuat Kontainer Docker Pertama Anda

Cara Menggunakan Docker: Membuat Kontainer Docker Pertama Anda

Tutorial ini menjelaskan dasar-dasar memulai Docker. Saya berasumsi bahwa Anda sudah menginstal Docker. Langkah-langkah dalam tutorial ini akan bekerja pada sebuah

Muat Saldo dengan Docker

Muat Saldo dengan Docker

Saat menjalankan aplikasi web, Anda biasanya ingin memaksimalkan sumber daya Anda tanpa harus mengonversi perangkat lunak Anda untuk menggunakan multithreading.

Mulai Dengan SQL Server 2017 (MS-SQL) di CentOS 7 Dengan Docker

Mulai Dengan SQL Server 2017 (MS-SQL) di CentOS 7 Dengan Docker

Prasyarat Mesin Docker 1.8+. Minimal 4GB ruang disk. Minimal RAM 4GB. Langkah 1. Instal Docker Untuk menginstal SQL-Server, Docker mus

Menyebarkan Aplikasi Node.js Menggunakan Docker

Menyebarkan Aplikasi Node.js Menggunakan Docker

Artikel ini akan menunjukkan kepada Anda bagaimana menyebarkan aplikasi Node Anda dalam wadah Docker. Catatan: Tutorial ini mengasumsikan bahwa Anda telah menginstal dan membaca Docker

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Baru-baru ini Apple merilis macOS Catalina 10.15.4 pembaruan suplemen untuk memperbaiki masalah tetapi tampaknya pembaruan menyebabkan lebih banyak masalah yang mengarah ke bricking mesin mac. Baca artikel ini untuk mempelajari lebih lanjut