Stein 오픈스택 클라우드 분석(9) - 외부에서 가상머신에 SSH접속을 위한 유동 IP (Floating IP) 설정하기
blog post
앞서 포스트를 통해 가상 머신을 생성하고 테넌트 네트워크까지 완료하였습니다. (해당 포스트: Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성) 하지만 생성한 VM에 오픈스택 대시보드 VNC 콘솔을 통해 접속해보면 생각보다 느린 것을 느낄 수 있습니다. 외부에서 SSH로 접속할 수 있다면 이러한 성능 문제를 어느 정도 개선할 수 있을 텐데, 현재 네트워크 구성상, 외부에서 SSH 접속도 어려운 상황입니다. 이러한 문제를 해결하기 위해 Floating IP라 불리는 오픈스택의 네트워크 기능을 활용하여 외부에서 SSH로 접속할 수 있는 환경을 구성해 보도록 하겠습니다.
[Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성] 포스트까지 진행한 네트워크 구성을 간단하게 그림으로 표현해보면 아래와 같습니다.
![](https://blog.kakaocdn.net/dn/lL74H/btqDxtYRlcz/RS6ukaliQxPVR93KRpQdDK/img.png)
현재 모든 VM은 10.10.0.0/24 네트워크에 구성되어 있으며, 이 네트워크는 VxLAN 기반으로 생성된 가상의 오버레이 네트워크입니다. 이 VM에서 생성되어 외부로 향하는 모든 트래픽은 외부망인 192.168.0.0/24 네트워크의 ip로 NAT 되어 외부망으로 향하도록 구성되어 있습니다. (현재 저의 오픈스택 기준으로 이들의 게이트웨이는 192.168.0.159로 지정되어있으나, 그림에서 디테일하게 여기까지 표현하지는 않았습니다)
이와는 별개로 실제 물리망에는 총 4개의 노드(Compute0, Controller, Storage, Network)가 구축되어 있는 상태입니다.
문제는 아래와 같이 VM에 ssh로 접근할 수 없다는 점입니다. 관리자(admin)나 클라우드 시스템을 사용하는 사용자(user1)는 모두 현재 오픈스택 시스템에 접근할 수 있고, 여기에서 동작하는 VM에 대시보드 VNC의 6080 포트를 사용하여 접근할 수 있는 상태에 있습니다. 기본적으로 Nova 서비스가 오픈스택 대시보드를 통해 VNC 콘솔 기능을 제공하고 있기 때문입니다.
![](https://blog.kakaocdn.net/dn/MPdBz/btqDw4kL0Ti/DXS4mNnwSvTBJLjS7y8VK0/img.png)
하지만 SSH 포트나 MS의 mstsc 3389와 같은 포트에는 접근하기 어려운 상황에 있습니다. user나 admin이 사용하는 네트워크(192.168.0.0/24)와 오버레이 네트워크(10.10.0.0/24)가 분리되어 있다는 점이 문제입니다.
이를 해결하기 위해 몇 가지 방법이 있습니다. 우선, user나 admin이 vm 접근을 위한 별도의 네트워크를 하나 더 만들어서 user, admin에 인터페이스를 부여하고, 이 네트워크를 오픈스택에서도 public 네트워크로 추가하여 VM에 해당 네트워크의 인터페이스를 할당함으로써 해결하는 방법을 사용할 수 있습니다.
또 다른 방법으로는 Floating IP를 활용하는 방법입니다. 이번 포스트에서는 이 Floating IP를 활용하는 방법으로 이 문제를 해결해 보도록 하겠습니다.
Floating IP는 오픈스택에서 제공하는 네트워킹 기능 중 하나로, vm이 할당받은 고정 ip에 공용망에서 할당받은 ip를 매핑하는 기술입니다. 예를 들어, 아래와 같이 10.10.0.86이라는 vm의 고정 ip에 외부망과 연결된 공용 ip인 192.168.0.168을 attach 하는 것입니다.
![](https://blog.kakaocdn.net/dn/5v71v/btqDzExU4VS/19EZQDfbqERMpivM69df60/img.png)
이렇게 되면 외부에서는 Floating IP인 192.168.0.168을 통해 VM에 접근할 수 있게 됩니다.
분석 포스트(3)를 통해 구축된 네트워크를 바탕으로 Floating IP 환경을 구성해 보도록 하겠습니다.
Floating IP는 기본적으로 오픈스택의 Public 네트워크를 통해 할당됩니다. 따라서 Floating IP를 할당받기 위한 오픈스택 Public 네트워크가 필요합니다. 본 환경에서는 사전에 이미 구축된 192.168.0.0/24 External_Net을 사용해 보도록 하겠습니다. 네트워크 구축 관련해서는 관련 포스트를 참고 바랍니다. (해당 포스트: Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성)
우선 admin 계정으로 대시보드에 로그인 후, 아래와 같이 "관리-> Floating IP-> 프로젝트에 IP 할당"을 클릭합니다.
![](https://blog.kakaocdn.net/dn/pLNM5/btqDInYkrZa/DRU4TRijPgK50n4X2D4kEk/img.png)
기존에 우리가 생성한 "Public Network"를 선택하고 인스턴스에 할당할 ip 하나를 생성합니다.
![](https://blog.kakaocdn.net/dn/7ReW6/btqDKTBJbFR/Z34KLpDoTlkKAMIAWtnLKK/img.png)
다음으로 "프로젝트-> Compute-> 인스턴스-> (인스턴스의) 작업-> 유동 IP 연결"을 클릭합니다. (물론 user1으로 로그인하여 진행해도 됩니다.)
![](https://blog.kakaocdn.net/dn/Cvb07/btqDKTIvqSl/AT8NFArLjMSmAK37bwCtHK/img.png)
아래와 같이 우리가 생성한 ip, 그리고 이 floating ip를 연결할 인스턴스의 private ip를 각각 선택해주고 연결을 클릭합니다.
![](https://blog.kakaocdn.net/dn/C2IHT/btqDKUObatq/FstJwc9RaiV2SArBOs6lX0/img.png)
인스턴스에 Floating IP가 함께 표시되는 것을 볼 수 있습니다.
![](https://blog.kakaocdn.net/dn/cAhRE2/btqDGf704xa/OjA03Abdf0Htb3E8lW3K00/img.png)
다음으로 개인 PC에서 ssh 연결을 시도해 봅니다. (저는 192.168.0.30에서 접속 시도 중)
[root@localhost]# ssh root@192.168.0.168
...(반응 없음)...
연결이 진행되지 않습니다. 오픈스택의 보안 그룹에서 막혔기 때문입니다.
오픈스택에는 "보안 그룹"이라는 기능이 있습니다. 이 기능은 오픈스택에서 제공하는 최소한의 보안 기능으로, 우리가 흔히 알고 있는 방화벽과 거의 비슷한 역할을 수행합니다. 이 보안 그룹 역시, 시스템으로 유입되는 트래픽과 시스템에서 나가는 트래픽(in/outbound)에 대해 프로토콜 별로 허용/차단 여부를 설정할 수 있습니다.
보안 그룹을 설정하기 위해 "프로젝트-> Compute->네트워크-> 보안 그룹"으로 이동해 봅니다. 아래와 같이 default 방화벽 규칙이 생성되어있는 것을 볼 수 있습니다. 해당 보안 그룹의 규칙 관리를 클릭합니다.
![](https://blog.kakaocdn.net/dn/eLaUCa/btqDKpVaaDK/P7ShGbTROnE7C3rMoTs6lk/img.png)
규칙 추가 클릭 후 아래와 같이 설정해 줍니다
- Direction: 트래픽이 들어오는 방향 (VM으로 접속을 위한 설정이므로 여기에서는 들어옴으로 지정)
- 열린 포트: 포트의 범위 혹은 단일 포트 여부 지정 (여기에서는 22번 포트만 설정할 것이므로 "포트" 선택)
- 포트: 포트 번호 입력 (SSH: 22번 포트)
- 원격: CIDR 선택
- CIDR: 외부에서 접속할 네트워크 혹은 단일 PC의 ip 선택 (예시에서는 192.168.0.30번만 허용하도록 설정)
![](https://blog.kakaocdn.net/dn/cGPPwr/btqDH2ti7mE/XmmKEheBjI6zxKCj6haWk1/img.png)
이제 아래와 같이 192.168.0.30번 PC에서 ssh 접속을 시도해 봅니다. 정상적으로 VM으로 연결되는 것을 확인할 수 있습니다.
[root@localhost]# ssh root@192.168.0.168
The authenticity of host '192.168.0.168 (192.168.0.168)' can't be established.
RSA key fingerprint is SHA256:...(생략)....
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.168' (RSA) to the list of known hosts.
root@192.168.0.168's password:
반면에 다른 PC에서는 여전히 ssh 연결이 되지 않습니다. (보안 그룹에서 30번 PC만 허용한 상태이므로)
이상으로 전체적인 Floating IP 설정부터 SSH 연결까지 다뤄보았습니다. 이 방법을 응용하면 mstsc 연결 등, 다른 애플리케이션을 통해 VM으로의 연결도 가능합니다. 기회가 된다면 오픈스택 보안 기능을 다루는 방법에 대해 별도의 포스트로 다뤄보도록 하겠습니다.
'Cloud > Private Cloud Analysis' 카테고리의 다른 글
[Kubernetes] minikube 대시보드 활성화 과정 (0) | 2020.05.17 |
---|---|
[Kubernetes] 첫 시작. Minikube 설치 삽질 과정 (feat. docker) (0) | 2020.05.17 |
기업에서는 오픈스택을 왜 사용할까? 처음 시작은 어떻게 해야 할까? (1) | 2020.04.14 |
Stein 오픈스택 클라우드 분석(7) - 가상머신의 이더넷 인터페이스, mac & ip 주소 할당 과정 (0) | 2020.02.18 |
Stein 오픈스택 클라우드 분석(6) - 오픈스택 시스템 내부에서 이미지와 가상머신을 생성하고 관리하는 방법 (0) | 2020.02.14 |
Stein 오픈스택 클라우드 분석(5) - 가상머신 이미지 업로드부터 인스턴스 생성까지 (0) | 2020.02.14 |
Stein 오픈스택 클라우드 분석(4) - 호스트 시스템에서의 가상 네트워크 구조 분석 (0) | 2020.02.13 |
Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성 (0) | 2020.02.12 |
Stein 오픈스택 클라우드 분석(2) - 호스트 네트워크 인터페이스 아키텍처 (0) | 2020.02.12 |
Stein 오픈스택 클라우드 분석(1) - 대시보드 구성 및 사용자, 프로젝트 생성 (0) | 2020.02.11 |