2014-12-24 3 views
4

Managed VM 기능을 사용하여 mvm.mydomain과 같은 URL을 통해 모든 포트 (선호하는 포트 80)에서 인터넷에 노출하려는 WebSocket 서버를 실행하고 있습니다. co.krManagedVM 내에서 다중 포트 노출

아직 많은 성공을 거두지 못하고 있습니다. , 파이썬 응용 프로그램이 시작되는 Dockerfile의 끝에서

EXPOSE 8080 8081 

:

Dockerfile : 다음은 다양한 파일의 관련 부분은 내가 이러한 목표를 달성하기 위해 사용하고있는이 포트의 상태 검사에 응답 8080 (나는이 작품 확인할 수 있습니다) 포트에 대한 요청을 웹 소켓에 응답 8081

애플리케이션 제목 : 나는이 응용 프로그램을 배포

module: mvm 
version: 1 
runtime: custom 
vm: true 
api_version: 1 

network: 
    forwarded_ports: ["8081"] 

클라우드 사용 : 클라우드 콘솔에서

$ gcloud preview app deploy . 

, 나는 8080과 8081이 들어오는 트래픽 허용되어 있는지 TCP 포트를 확인합니다. 또한 GCE 인스턴스 (mvm : 1)에 할당 된 IP 주소는 다음과 같습니다. x.y.z.z.

$ curl http://x.y.z.z:8080/_ah/health 
$ curl http://mvm.my-app-id.appspot.com/_ah/health 

200 OK으로 모두 응답하십시오.

뿐만 아니라 일부 자바 스크립트를 사용하여 웹 소켓 서버를 작동합니다 연결 :

new WebSocket('ws://x.y.z.z:8081'); 

를 지금까지 너무 좋아. 이 (시간 초과) 작동하지 않았다 제외 :

new WebSocket('ws://mvm.my-app-id.appspot.com:8081'); 

나는 위의 웹 소켓의 명령이 작동하지 않는 이유를 알고 싶습니다. 아마도 GAE/GCE 포트 전달 상호 작용에서 이해할 수없는 것이 있을까요?

어떻게 든 작동하도록 만들 수 있다면 다음 단계를 완료하는 마지막 단계가 될 것이라고 생각합니다.

dispatch.yaml :

dispatch: 
    # Send all websocket traffic to the ManagedVM module. 
    - url: "mvm.mydomain.com/*" 
    module: mvm 

나는 또한 설치 mvm.mydomain.com에서 GAE 사용자 정의 도메인 CNAME. 같은 다음 작업을해야 자바 스크립트를 사용하여 웹 소켓 서버에 연결

: 그것은 아주 잘 appspot.com에서 해당 포트 포워딩 될 수있다

new WebSocket('ws://mvm.mydomain.com:8081'); 

답변

0

그 이전에 관리되는 가상 머신의 (비교적 최근) 버전으로 제공, 수행되지 않습니다 , appspot.com으로가는 유일한 트래픽은 포트 80 또는 443에있었습니다. IP-of-instance 방법을 사용하여 작업하는 것이 좋습니다.

완전히 만족스럽지 않으면 public issue tracker for app engine으로 이동하여 appspot.com 라우터가 요청이 관리 대상 VM에 해당하는 모듈로 향하는 지 여부를 감지하고 포트 전달을 시도하도록 기능 요청을 게시해야합니다 그럴 경우.

도메인 끝 부분에 원시 포트를 설치하는 것은 브라우저가 쿼리 매개 변수가 아닌 appspot.com에 대한 연결 매개 변수로 지정한 포트를 사용한다는 것을 의미하므로 appspot.com은 모든 포트에서 수신 대기하고 유효한 경우 리디렉션해야합니다. 이것은 안전하지 않거나 비효율적 일 수 있습니다. 따라서 포트 번호는 버전 및 모듈을 지정할 수있는 것과 비슷한 쿼리 매개 변수 또는 도메인 문자열의 일부일 수 있습니다.

여하튼 어떤 포트 아주 단순한 예제가 실패한 경우, 앱 엔진의 appspot.com 도메인이 관리되는 VM 컨테이너로의 포트 포워딩을 처리하도록 설정되었다고해도 과언이 아닙니다.

+1

제안 해 주셔서 감사합니다. [ticket] (https://code.google.com/p/googleappengine/issues/detail?id=11570)을 제출했습니다. – kvdb