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.
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.