Menggunakan jaringan fisik pribadi dengan mode swarm Docker

11

Saya sedang mengerjakan pengaturan produksi dengan Docker dalam mode swarm (menggunakan Docker 17.03.1-ce). Akan ada 2 pusat data yang terlibat. Di kedua pusat data, semua mesin memiliki IP publik dan IP privat (lokal ke data center) di jaringan pribadi, sehingga akan ada 2 jaringan pribadi.

Tautan ke pengaturan visualisasi diagram yang disederhanakan

Lalu lintas jaringan melalui antarmuka jaringan pribadi adalah gratis, sedangkan lalu lintas melalui antarmuka publik tidak setelah batas tertentu (dan itu lebih lambat), jadi jika mungkin saya lebih suka lalu lintas jaringan untuk pergi ke antarmuka pribadi.

Sekarang dari apa yang saya mengerti (saya pikir), semua lalu lintas antara node Docker dalam mode swarm akan melalui antarmuka jaringan yang sama yang digunakan untuk berkomunikasi dengan master swarm, yang dalam kasus saya harus menjadi orang publik untuk membuat jaringan multi DC bisa jadi. Namun, sebagian besar lalu lintas yang diharapkan akan berada di antara node di DC yang sama, dan akan sangat menyenangkan jika Docker dapat merutekan lalu lintas melalui jaringan pribadi saya jika node sumber dan target berada di jaringan pribadi yang sama.

Saya khawatir ini mungkin tidak mungkin dilakukan karena para pembuat gerombolan tidak tahu tentang jaringan pribadi ini dan IP yang dimiliki node pada mereka.

Salah satu solusi yang bisa saya pikirkan adalah mengatur VPN dan mengerahkan segerombolan di atas itu, tapi ini menambah kompleksitas tambahan dan saya lebih suka solusi segerombolan Docker murni.


Pembaruan : seperti yang disarankan dalam komentar, dasar untuk solusi mungkin menggunakan iptables untuk merutekan lalu lintas keluar ke IP pribadi, bukan yang publik. Namun, jika saya ingin melakukan ini, masalah saya berikutnya adalah bagaimana mengelola semua aturan ini. Dengan 10 server di DC, saya perlu 10 * 9 = 90 dari mereka untuk merutekan semua lalu lintas lokal yang mungkin melalui jaringan pribadi. Saya bisa membayangkan mungkin ada alat yang bisa membantu dengan tugas seperti itu atau saya bisa membuatnya, tapi mungkin ada cara yang lebih sederhana untuk melakukan ini.

Ede
sumber
1
Anda dapat menggunakan iptables untuk menulis ulang ip tujuan saudara dalam pusat data yang sama dengan ips jaringan pribadi mereka. Juga, ini harus di serverfault bukan SO;)
n00b32
Ya, beberapa penggalian lagi membawa saya ke kesimpulan yang sama. Itu akan merepotkan, saya benar-benar membutuhkan alat untuk melakukan itu untuk saya secara otomatis (menulis ulang semua IP antara semua node dalam sebuah cluster / DC). Lagi pula, untuk N node saya perlu (N-1) ^ 2 aturan iptables.

Jawaban:

1

(Mungkin itu harus komentar, tetapi belum bisa berkomentar)

Karena Anda tidak dapat menggunakan nama host dan / atau DNS untuk mem-bootstrap cluster, saya tidak melihat cara untuk memaksa data rakit pertukaran cluster pada jaringan yang tidak terukur yang benar, tetapi saya melihat Anda dapat menggunakan nama antarmuka. Anehnya, ini tidak dinyatakan pada dokumen segerombolan tetapi masalah menunjukkan pesan kesalahan mengharapkan IP atau antarmuka.

Saya ingin tahu apakah Anda dapat mengatur anggota cluster untuk beriklan menggunakan nama antarmuka pribadi, sehingga Anda mendapatkan lalu lintas terbanyak dengan cara yang Anda inginkan.

Tidak dapat menguji diri saya sekarang, tetapi akan minggu depan karena saya mungkin mengalami masalah serupa untuk proyek yang akan datang.

Pablo
sumber
Terima kasih, tolong beri tahu saya jika Anda menemukan sesuatu minggu depan. Masalah yang Anda tautkan adalah tentang fungsi gerombolan Docker 'lama', sedangkan saya menggunakan (dan akan menyarankan Anda untuk menggunakan) mode gerombolan Docker baru yang built-in dan tidak memerlukan kunci / nilai toko eksternal.
Ede