Docker swarm 모드에서 개인 물리적 네트워크 사용


11

swarm 모드 (Docker 17.03.1-ce 사용)에서 Docker로 프로덕션 설정을 작업 중입니다. 2 개의 데이터 센터가 관련됩니다. 두 데이터 센터 모두에서 모든 시스템은 사설 네트워크에 퍼블릭 IP와 사설 (로컬-데이터 센터) IP를 모두 가지고 있으므로 2 개의 사설 네트워크가 있습니다.

단순화 된 다이어그램 시각화 설정에 연결

개인 네트워크 인터페이스를 통한 네트워크 트래픽은 무료이지만 공용 인터페이스를 통한 트래픽은 제한이 없으며 속도가 느리므로 가능한 경우 개인 인터페이스를 통해 네트워크 트래픽을 처리하는 것이 좋습니다.

이제 내가 이해하는 것에서 (스마일) swarm 모드의 Docker 노드 사이의 모든 트래픽은 swarm 마스터와 통신하는 데 사용되는 것과 동일한 네트워크 인터페이스를 통과합니다.이 경우 다중 DC 네트워킹을 수행하려면 공개 인터페이스가되어야합니다 가능한. 그러나 대부분의 예상 트래픽은 동일한 DC의 노드 사이에 있으며 소스 및 대상 노드가 동일한 개인 네트워크에있는 경우 Docker가 어떻게 내 개인 네트워크를 통해 트래픽을 라우팅 할 수 있다면 좋을 것입니다.

웜 마스터는 이러한 개인 네트워크와 노드가 가지고있는 IP에 대해 알지 못하기 때문에 이것이 가능하지 않을 수도 있습니다.

내가 생각할 수있는 한 가지 솔루션은 VPN을 설정하고 그 위에 웜을 배포하는 것입니다. 그러나 이것은 추가 복잡성을 추가하며 순수한 Docker 웜 솔루션을 선호합니다.


업데이트 : 의견에서 제안한 것처럼 솔루션의 기초는 iptables를 사용하여 나가는 트래픽을 퍼블릭 IP 대신 프라이빗 IP로 라우팅하는 것일 수 있습니다. 그러나이 작업을 수행하려면 다음 문제는 이러한 모든 규칙을 관리하는 방법입니다. DC에 10 대의 서버가 있으면 개인 네트워크를 통해 가능한 모든 로컬 트래픽을 라우팅하려면 10 * 9 = 90 개의 서버가 필요합니다. 그러한 작업을 지원하거나 만들 수있는 도구가 있다고 생각할 수 있지만 훨씬 간단한 방법이 있습니다.


1
iptables를 사용하여 동일한 데이터 센터에있는 형제의 대상 IP를 개인 네트워크 IP에 다시 쓸 수 있습니다. 또한 이것은 serverfault가 아니어야합니다.;)
n00b32

그래, 좀 더 파고 나도 같은 결론을 내렸다. 그래도 번거로울 것이므로 실제로 자동으로 수행 할 수있는 도구가 필요합니다 (클러스터 / DC의 모든 노드 사이의 모든 IP를 다시 작성하십시오). 결국 N 노드의 경우 (N-1) ^ 2 iptables 규칙이 필요합니다.

답변:


1

(아마도 주석이어야하지만 아직 주석을 달 수는 없습니다)

호스트 이름 및 / 또는 DNS를 사용하여 클러스터를 부트 스트랩 할 수 없으므로 올바른 미터링되지 않은 네트워크에서 클러스터 교환 래프트 데이터를 강제로 실행할 방법이 없지만 인터페이스 이름을 사용할 수 있습니다. 흥미롭게도 웜 문서 에는 명시되어 있지 않지만 문제 는 오류 메시지에 IP 또는 인터페이스가 필요하다는 것을 보여줍니다.

개인 인터페이스 이름을 사용하여 클러스터 멤버가 보급하도록 설정하여 원하는 방식으로 가장 많은 트래픽을 얻을 수 있는지 궁금합니다.

지금 나 자신을 테스트 할 수는 없지만 다음 주에 예정된 프로젝트에서 비슷한 문제가 발생할 수 있습니다.


고맙습니다. 다음 주에 뭔가를 발견하면 알려주십시오. 당신이 연결 한 문제는 '오래된'Docker swarm 기능에 관한 것입니다. 반면 에 내장되어 있으며 외부 키 / 값 저장소가 필요없는 새로운 Docker swarm 모드 를 사용하고 권장합니다 .
Ede
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.