Tiga pengurus dan lima pekerja merentas dua tapak, disambungkan oleh terowong, dan docker service ls menunjukkan tugasan berjalan di kedua-dua belah sementara panggilan antara perkhidmatan tamat masa. Tiada apa-apa dalam log Swarm kelihatan salah. Gabungan itu ialah tandatangan masalah satah data: satah kawalan menemui nod, dan bingkai berkapsul tidak pernah membuat perjalanan.

Mesh mesti wujud sebelum overlay

Overlay Swarm menolak bingkai berkapsul terus antara alamat nod, bermakna setiap nod memerlukan alamat yang boleh dicapai oleh setiap nod lain tanpa terjemahan, pada antara muka yang disediakan terowong. Terowong yang hanya membawa klien ke port yang diterbitkan tidak mencukupi. Lapisan bawah mesti menghala dari nod ke nod dalam kedua-dua arah.

Uji itu sebelum menyentuh Swarm. Dari setiap nod, periksa laluan ke alamat terowong rakan, ping ia, dan kemudian uji port kawalan. Jika ping berfungsi dan port tidak, terowong itu baik dan penapis berada di laluan.

ip -brief address
ip route get 10.20.0.12
ping -c3 10.20.0.12
nc -vz 10.20.0.12 2377

Jika laluan menghala ke antara muka fizikal dan bukan tun0 atau wg0, overlay akan berkapsul ke alamat yang tapak jauh tidak dapat capai, dan simptom akan kelihatan seperti kehilangan paket.

Periksa alamat yang diiklankan oleh setiap nod

Daemon mengiklankan satu alamat, dan rakan menggunakan alamat itu untuk satah data. Pada hos berbilang rangkaian, mudah untuk mengiklankan alamat LAN atau awam sementara terowong membawa sesuatu yang lain. Periksa ia dan bukan menganggap, dan tetapkan ia semasa menyertai dengan --advertise-addr apabila nilai lalai salah. Nod yang mengiklankan alamat yang hanya boleh dicapainya sendiri masih menyertai swarm, dan kegagalan muncul kemudian sebagai perkhidmatan yang tidak dapat berkomunikasi merentas tapak.

Menukar alamat yang diiklankan kemudian bukan pengeditan konfigurasi, kerana nod mesti keluar dan menyertai semula.

Catat alamat yang diiklankan bagi setiap nod dalam nota anda, kerana ia menerangkan kebanyakan kegagalan asimetri.

Masquerade ialah punca biasa

Apabila gateway terletak antara nod dan terowong, kesilapan biasa ialah menggunakan masquerade pada semua yang keluar dari antara muka fizikal. Itu juga menulis semula alamat dalaman overlay, jadi setiap rakan kelihatan datang dari gateway dan rakan VXLAN berhenti mengenali satu sama lain. Hasilnya ialah trafik berkapsul yang hilang atau sehala sementara ping biasa masih berfungsi.

Halakan awalan overlay melalui gateway dan biarkan ia tidak diterjemah. Jika terjemahan benar-benar diperlukan untuk awalan lain, hadkannya di situ dan jangan sekali-kali pada julat yang digunakan overlay.

ip route add 172.16.0.0/22 via 10.20.0.1
iptables -t nat -I POSTROUTING -o tun0 -s 172.16.0.0/22 -j ACCEPT

Periksa susunan peraturan serta teksnya, kerana MASQUERADE luas yang lebih awal dalam rantai mengalahkan pengecualian sempit yang kemudian.

VXLAN memerlukan ruang dalam paket

VXLAN menambah 50 bait pada bingkai yang dibawanya. Lapisan bawah 1500 bait yang membawa bingkai dalaman 1500 bait menghasilkan paket berkapsul yang tiada laluan akan menyampaikan, dan kegagalan kelihatan seperti penemuan perkhidmatan berselang-seli dan bukan masalah saiz. Sama ada turunkan MTU terowong di kedua-dua hujung atau tetapkan MTU overlay supaya pemacu mengiklankan muatan yang muat.

docker network create --driver overlay --attachable --opt com.docker.network.driver.mtu=1400 swarm-overlay

Rangkaian ingress dicipta secara automatik, jadi menukarnya bermakna membuang dan mencipta semula dan bukan mengeditnya di tempat.

Jika anda hanya membaiki satu bahagian terowong, MTU yang lebih kecil tetap yang penting.

Pantau satah data, bukan log

Tangkap port VXLAN di kedua-dua hujung. Bingkai yang keluar dari satu pihak dan tiba di pihak lain bermakna lapisan bawah baik dan masalahnya di dalam overlay. Bingkai yang keluar dan tidak pernah tiba bermakna laluan atau penapis. Bingkai yang langsung tidak keluar bermakna alamat sumber salah.

Kegagalan penemuan perkhidmatan yang hilang selepas beberapa saat biasanya menunjuk kepada belanjawan paket atau laluan yang berkelip, bukan kuorum raft.

Simpan tangkapan daripada tetingkap yang berfungsi, kerana membandingkannya dengan yang rosak lebih cepat daripada membaca semula konfigurasi.

Artikel berkaitan