단일 호스트에서 실행되는 가상 머신을 분리하기 위해 여러 하위 도메인을 설정하는 가장 쉬운 방법

단일 호스트에서 실행되는 가상 머신을 분리하기 위해 여러 하위 도메인을 설정하는 가장 쉬운 방법

질문:

단일 Centos 호스트 서버에 여러 개의 가상화된 Centos, rhel 또는 ubuntu 게스트 시스템을 설정할 계획입니다(대부분 KVM 사용). 각 게스트 VM은 웹 애플리케이션 인스턴스 + 기타 서비스/프로토콜을 실행하며, 각 게스트 VM은 마치 모두 별도의 DNS 상자인 것처럼 열려 있는 포트의 호스트 외부에서 액세스할 수 있어야 합니다.

나는 (분명히) 네트워킹 기술/구성에 약하므로 이 문제의 첫 번째 가장자리에 도달하려고 노력하고 있습니다. 이를 기반으로 구축하기 위해 제가 연구해야 했던 주요 방법은 다음과 같습니다. 원하는 경우 네트워크 구성 "의사 코드". :)

예:

내가 도메인 이름 foo.com을 소유하고 있다고 가정해 보겠습니다.

DNS guest.foo.com이 설치된 물리적 CentOS 시스템이 있습니다.

이 물리적 호스트에서는 세 개의 가상 머신을 실행합니다. 1.guests.foo.com, 2.guests.foo.com 및 3.guests.foo.com을 통해 게스트 VM에 액세스할 수 있기를 원합니다. 게스트 가상 머신은 centos, rhel 및 ubuntu 배포판을 실행합니다.

각 가상 머신은 http 트래픽뿐만 아니라 SSH 연결 및 git: 프로토콜 작업을 포함한 모든(로컬로 열린) 포트에 응답해야 합니다.

어디서부터 시작해야 하며 가장 우아한 방법은 무엇입니까? 대략적으로 말하자면, 호스트와 게스트가 이 작업을 수행하는 데 필요한 최소 설정은 무엇입니까?

노트:

자세한 내용을 알아보면 질문 텍스트와 댓글을 업데이트하겠습니다.

답변1

여러 시스템이 IP 주소의 동일한 포트를 서비스하도록 하는 유일한 방법은 애플리케이션 프로토콜이 서버가 원래 요청이 전달된 호스트 이름을 식별하는 데 도움이 되는 추가 정보를 제공하는 것입니다. 그렇지 않으면 모든 서버가 TCP/IP 계층에서 추론할 수 있는 것은 모든 DNS 이름에 대해 동일한 대상 IP 주소와 포트입니다.

대부분의 프로토콜은 원하는 것을 지원하지 않습니다. HTTP/1.1 Host:에는 클라이언트가 찾고 있는 호스트 이름을 서버에 알려주는 헤더가 포함되어 있으므로 HTTP는 예외입니다. HTTP에서는 이것을 호출합니다.이름 기반 가상 호스팅. 그러나 SSL은 이를 다시 중단하므로 다음과 같은 새로운 확장이 있습니다.서버 이름 표시이는 또한 SSL에 대한 지원을 제공합니다. Host:오늘날 모든 시스템은 헤더를 제공하지만 SNI는 여전히 모든 곳에서 완벽하게 지원되지는 않습니다.

git프로토콜은 호스트 이름을 제공하지 않습니다. 그러나 자식은 새로운 것입니다스마트 HTTPgit전송은 원하는 작업을 수행할 수 있도록 HTTP를 통해 실행되는 좋은 방법입니다 .

HTTP로 무엇을 하든 실제 설정 방법은 이름 기반 가상 호스트를 사용하여 요청을 올바른 컴퓨터로 보내는 기본 IP 주소에서 프록시 서버를 실행하는 것입니다.

SSH의 경우 실제로 다른 포트를 사용하는 것 외에는 선택의 여지가 많지 않습니다. 수동을 제외하고 프록시 서버처럼 작동하는 자체 "바운스 호스트"를 만들 수 있습니다. 사용자는 먼저 기본 IP 주소에 연결합니다. 이는 sshLAN IP 주소를 사용하여 다른 호스트에 추가로 연결할 수 있는 미니 셸을 제공합니다. ). 그러나 SFTP나 기타 자동 연결과 같은 비대화형 프로토콜을 사용하면 원활하게 작동하는 데 어려움을 겪게 됩니다. 또 다른 접근 방식은 사용자 이름의 정보를 사용하여 자동으로 연결할 호스트를 결정하는 SSH 서버를 만드는 것입니다. 예를 들어 명령은 단일 IP 주소에 연결할 수 있으며 수정된 SSH 서버는 사용자 이름을 추출하고 생성합니다. 에 대한 새로운 연결을 작성해야 할 수도 있는 기존 소프트웨어가 있는지 모르겠습니다.ssh [email protected]username@machine1


물론 IPv6를 사용하면 각 컴퓨터에 백만 개의 자체 공용 주소를 제공할 수 있으므로 이러한 트릭이 필요하지 않습니다.

관련 정보