2014-12-29 11 views
1

Google 컴퓨팅에 앱을 배포하려고하지만 네트워킹 문제가 발생했습니다. 앱은 프런트 엔드 (복제를 사용하여 배포 된 도커 컨테이너 내에서 실행 됨)로 구성됩니다. 컨트롤러)와 에어로스 노드의 백엔드.도커 컨테이너 내부에서 기본 네트워크에 연결할 수 없습니다.

aerospike 노드는 일부 또는 컨테이너 클러스터가 아니지만 동일한 프로젝트에 있고 컨테이너 클러스터와 aerospike 노드가 모두 기본 네트워크에서 실행됩니다. 내가 잘못 뭐하는 거지,

aerospike 노드

내가이

var client = aerospike.connect(internal-ip-of-aerospike-node, 3000) 

을하려고하고 기본되는 구성 고정 표시기 용기 내부에서

실행하지만 연결이 실패?

답변

1

도커 컨테이너가 GCE (또는 정확히 어떻게 작동하는지)에 대해 약간 개략적으로 설명하지만 IIRC는 컨테이너가 자체 주소 공간에서 주소 지정 될 수 있도록 오버레이 네트워크가 구축되었습니다. 이는 대개 호스트와 컨테이너 사이에 가상 네트워크 인터페이스 쌍을 작성하여 수행됩니다. 호스트 시스템에 추가되는 오버레이 네트워크 (https://docs.docker.com/articles/networking/#binding-container-ports-to-the-host에서) 이런 가장 무도회 규칙 나가려면

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 
MASQUERADE all -- 172.17.0.0/16  !172.17.0.0/16 

오버레이 네트워크는 같은 호스트 네트워크와 충돌하지하기로하지만,이 경우 선택하도록되어 오버레이 네트워크가 GCE 내부 네트워크와 겹치면 컨테이너에서 오버레이 네트워크로의 연결이 작동하지 않습니다.

나는 그것이 작동하지 않는 이유 질문에 대답 할 수없는, 그러나 나는 시도하는 것을 제안 할 수 있습니다 :

  • 는 aerospike 노드에 외부 주소를주고 그 연결하려고합니다. 작동하는 경우 문제는 컨테이너 네트워킹에 있음을 나타냅니다.
  • 관련없는 테스트 VM을 스핀 업하고 aerospike 노드에 연결하려고 시도하십시오.
  • GCE 기본 네트워크에 방해가 될 수있는 방화벽이 있습니까? 트래픽을 허용하는 명시적인 규칙을 추가하십시오.그런 다음

    while :; do nc -w1 -n -v -z <aerospike-ip> 3000; sleep 1; done" 
    

    , tcpdump를보고 :

이러한 문제를 디버깅하는 일반적인 방법은 (실패) 요청의 스트림을 생성 뭔가를 실행 한 다음 패킷이 각 단계에 흐름을 참조하는 것입니다 연결 시도와 패킷이 어떻게 생겼는지가 있는지 여부 :

  • IP 링크 쇼 및/또는 IP 요지 쇼 (인터페이스를 찾을 수)
  • 는 tcpdump -n -v -c 10 -i,080,543,210 인터페이스 > TCP 포트 3000

그리고이 작업을 수행 : 컨테이너 가상 인터페이스에, 용기에

  • 가 고정 표시기 호스트
  • (eth0를해야한다) (veth < 뭔가를 >)
  • 도커 호스트의
  • 호스트 네트워크 인터페이스 (eth0)
  • aerospike 호스트 (eth0)

이 정보는 문제가 발생한 위치를 찾아내는 데 도움이되며 패킷 덤프로 인해 문제가 발생한 이유를 알 수 있습니다.

+0

문제는 kubernetes, 다른 VM의 ping, 또는 내가 만든 작품의 도커 컨테이너에서 발생한다고 생각합니다. – Alloys