Sử dụng mạng vật lý riêng với chế độ bầy Docker


11

Tôi đang làm việc trên một thiết lập sản xuất với Docker ở chế độ swarm (sử dụng Docker 17.03.1-ce). Sẽ có 2 trung tâm dữ liệu liên quan. Trong cả hai trung tâm dữ liệu, tất cả các máy đều có IP công cộng và IP riêng (cục bộ đến trung tâm dữ liệu) trên mạng riêng, do đó sẽ có 2 mạng riêng.

Liên kết đến thiết lập trực quan hóa sơ đồ đơn giản hóa

Lưu lượng truy cập mạng qua các giao diện mạng riêng là miễn phí, trong khi lưu lượng truy cập trên giao diện công cộng không bị giới hạn (và chậm hơn), vì vậy, ở đâu có thể tôi muốn lưu lượng truy cập mạng đi qua các giao diện riêng.

Bây giờ từ những gì tôi hiểu (tôi nghĩ), tất cả lưu lượng giữa các nút Docker ở chế độ swarm sẽ đi qua cùng một giao diện mạng được sử dụng để liên lạc với các bậc thầy swarm, trong trường hợp của tôi sẽ phải là mạng công cộng để tạo kết nối đa DC khả thi. Tuy nhiên, hầu hết lưu lượng dự kiến ​​sẽ nằm giữa các nút trong cùng một DC và sẽ rất tuyệt nếu Docker bằng cách nào đó có thể định tuyến lưu lượng qua mạng riêng của tôi nếu các nút nguồn và nút đích xảy ra trên cùng một mạng riêng.

Tôi e rằng điều này có thể không thể thực hiện được vì các bậc thầy bầy đàn không biết về các mạng riêng này và các IP mà các nút có trên chúng.

Một giải pháp tôi có thể nghĩ đến là thiết lập VPN và triển khai bầy đàn trên đó, nhưng điều này làm tăng thêm độ phức tạp và tôi thích một giải pháp bầy Docker thuần túy.


Cập nhật : như được đề xuất trong một nhận xét, cơ sở cho một giải pháp có thể là sử dụng iptables để định tuyến lưu lượng đi đến các IP riêng thay vì các công khai. Tuy nhiên, nếu tôi muốn làm điều này, vấn đề tiếp theo của tôi sẽ là làm thế nào để quản lý tất cả các quy tắc này. Với 10 máy chủ trong một DC, tôi cần 10 * 9 = 90 trong số chúng để định tuyến tất cả lưu lượng truy cập cục bộ có thể qua mạng riêng. Tôi có thể tưởng tượng có thể một số công cụ tồn tại có thể hỗ trợ một nhiệm vụ như vậy hoặc tôi có thể tạo một công cụ, nhưng có lẽ có một cách đơn giản hơn nhiều để làm điều này.


1
Bạn có thể sử dụng iptables để viết lại ip đích của anh chị em trong cùng một trung tâm dữ liệu vào ips mạng riêng của họ. Ngoài ra, điều này nên có trên serverfault chứ không phải SO;)
n00b32

Vâng, một số đào thêm dẫn tôi đến kết luận tương tự. Tuy nhiên, điều đó sẽ gây rắc rối, tôi thực sự cần một công cụ để tự động làm điều đó (viết lại tất cả IP giữa tất cả các nút trong một cụm / DC). Rốt cuộc, đối với N nút tôi cần (N-1) ^ 2 quy tắc iptables.

Câu trả lời:


1

(Có lẽ nó nên là một bình luận, nhưng không thể bình luận nào)

Vì bạn không thể sử dụng tên máy chủ và / hoặc DNS để khởi động cụm, tôi không có cách nào để buộc dữ liệu bè trao đổi cụm trên mạng không được kiểm soát chính xác, nhưng tôi thấy bạn có thể sử dụng tên giao diện. Thật kỳ lạ, nó không được nêu trên các tài liệu swarm nhưng một vấn đề cho thấy thông báo lỗi mong đợi một IP hoặc giao diện.

Tôi tự hỏi nếu bạn có thể đặt các thành viên cụm để quảng cáo bằng tên giao diện riêng tư, để bạn có được lưu lượng truy cập nhiều nhất theo cách bạn muốn.

Không thể kiểm tra bản thân ngay bây giờ, nhưng sẽ vào tuần tới vì tôi có thể gặp phải một vấn đề tương tự cho một dự án sắp tới.


Cảm ơn, xin vui lòng cho tôi biết nếu bạn tìm thấy bất cứ điều gì vào tuần tới. Vấn đề bạn liên quan đến là về chức năng bầy Docker 'cũ', trong khi tôi đang sử dụng (và sẽ khuyên bạn nên sử dụng) chế độ bầy Docker mới được tích hợp và không yêu cầu lưu trữ khóa / giá trị bên ngoài.
Êđê
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.