OpenStack 활용 가이드 (2)

양성연·2023년 9월 26일
0
  1. 보안 그룹

    오픈스택에서는 자체적인 방화벽 서비스를 제공합니다. 생성한 instance 안의 자체 방화벽 (firewalld 와 같은) 기능은 종료하고, 이 보안 그룹을 활용하여 통신을 제어하는 걸 추천 합니다.

    ‘프로젝트’ → ‘네트워크’ → ‘보안 그룹’ 을 선택하여 생성 버튼을 클릭합시다.

    간단하게 이름을 지정하고 (security) 생성하면 다음과 같은 페이지로 넘어가게 됩니다.

    기본적으로 IPv4와 IPv6를 통해 내보내는 통신은 모두 허용하게 설정 되어 있습니다. 간단하게 규칙을 추가해봅시다. 들어오는 모든 tcp 통신을 허락합니다. 물론, 모든 포트를 열어두는 것은 좋은 자세가 아닙니다.

  2. Key Pair

    키 페어는 instance가 시작될 때 instance에 삽입되는 SSH 자격 증명입니다.

    ‘프로젝트’ → ‘Compute’ → ‘키 페어’ 에서 생성을 눌러주세요.

    생성을 완료하면 어떤 파일이 다운로드 되게 됩니다. 그리고 그 파일의 특정 양식이 존재합니다.

    강조하지만, 키 페어는 정말 소중한 존재입니다. 생성 당시 단 1회만 다운로드 받을 수 있어서 분실시 새로 생성해야 합니다. 만약 사용하고 있던 Instance가 있다면, 아주 번거롭게 되겠습니다.

    다운로드 받은 keypair의 권한을 600으로 바꿔줍시다. 소유자만이 읽고 쓰기가 가능하게 해야 사용할 수 있습니다.

    $ chmod 600 key.pem
  3. Floating IP

    floating IP는 instance에 할당되어 외부에서 instance로 접근할 수 있도록 하는 역할입니다.

    ‘프로젝트’ → ‘네트워크’ → ‘Floating IP’ 를 선택하여, 프로젝트에 IP 할당을 클릭해줍시다.

    별 다른 수정 없이 할당을 클릭해주시면 됩니다.

    여기서 짚고 넘어가야 할 부분이 있습니다. 자료를 유심하게 본 분들은 할당 가능한 주소의 갯수가 10개 남짓 된다는 걸 눈치 채셨을 것 같습니다. 하지만 프로젝트 Quotas에는 무려 50개의 주소가 사용한 것 처럼 표시됩니다.

    Quotas은 프로젝트 별로 자원 배포를 제한하기 위해 수동으로 설정할 수 있습니다. 현재는 자동으로 50개의 floating ip를 만들 수 있음을 표현한 것인데, 조금 더 확실한 관리를 위해서는 Quota를 유의깊게 설정하는 게 좋습니다.

    다른 요소에 대한 quota를 보시려면 개요 페이지를 살펴보십시오.

  4. Volume

    볼륨은 영구 storage를 활성화하기 위해 instance에 연결하는 블록 storage 장치입니다. 실행 중인 instancedp volume을 연결하거나 volume을 분리하고 언제든지 다른 instance에 연결할 수 있습니다.

    ‘프로젝트’ → ‘볼륨’ → ‘볼륨’ 으로 들어가 생성을 클릭 합시다.

    볼륨은 소스가 이미지가 있고 빈 볼륨이 있습니다. 이미지를 선택하게 된다면, 이미지 자체를 영구볼륨으로 저장한다는 개념으로 보시면 되겠습니다.

    저희는 그냥 테스트 용으로 빈 볼륨이 만들어지는 지 정도만 확인하겠습니다. 10GiB를 할당해줍시다.

  5. Instance

    이제 드디어 사전 작업이 끝났습니다. 앞선 설정들은 결국 하나의 목표를 위한 것 들입니다. 오픈스택 상에서 인스턴스, 즉 VM을 잘 사용할 수 있게 하기 위함이죠.

    ‘프로젝트’ → ‘Compute’ → ‘인스턴스’ 에서 ‘인스턴스 시작’을 눌러줍시다. 설정할 것들이 꽤 많습니다.

    먼저 instance의 Flavor를 만들어두었던 small로 선택해줍시다.

    소스 파트에서 부팅 소스를 이미지로 고르고, cirros를 선택합니다. 볼륨크기는 flavor에 의해 자동으로 10이 들어가게 된 걸 볼 수 있습니다. 테스트용도이니 인스턴스 삭제시 볼륨 삭제를 클릭해주세요. (아니오를 누른다면 자동으로 볼륨이 저장되어 남게 됩니다)

    네트워크는 내부용만 선택해주세요. 추후에 만들어두었던 Floating IP를 연결할 것입니다.

    만들어둔 보안 그룹과 key pair도 추가해주시길 바랍니다. key pair에서 default가 자동으로 들어가 있는데, 빼주셔도 됩니다.

    인스턴스를 가동 해봅시다.

    먼저 이름을 클릭하고 들어가서, 콘솔 창을 확인해봅시다. (서브넷이 위 스크린샷들과 다른 것은 설치를 잘못해서 에러 때문에 여러 번 부셨다가 만들었다가를 반복했기 때문입니다 … 유저 본인이 설정한 서브넷으로 할당되어 있어야 합니다)

    이제 준비해둔 floating ip를 연결해봅시다... 이 부분에서 에러를 목격했습니다. 아래는 그 해결 방법에 대한 이야기 입니다. 저희가 앞서 따라온 설치 과정 중에서는 이미 수정이 된 버전이라서 참고로 보시고 넘어가셔도 될 것 같습니다!

  • 이슈 확인 - floating ip port binding이 안됨 !! )

    ⇒ 한동안 무한 재설치 늪에 빠졌었습니다 ⇒ neutron_external_network의 문제일까요…?

    볼륨 삭제도 문제가 생겨서 nfs 볼륨을 시도햇는데 이것도 깔끔하게 적용이 안 됨…

    ⇒ /etc/kolla/globals.yml 에서 두 가지를 추가해주었습니다.

    enable_neutron_dvr: "yes"
    enable_neutron_provider_networks: "yes"

    우선 외부 공개용 네트워크를 작동시키기 위해 enable_neutron_provider_networks를 yes로 바꿔줬습니다. 이것을 적용시키니 인스턴스에 정상적으로 프로바이더 네트워크(VLAN을 활용한 flat) ip가 할당이 되었습니다.

    하지만, 위의 설정을 추가해도 플로팅 아이피가 제대로 인스턴스에 붙지 않는 모양이 있었습니다. (ping은 가지만, ssh 접속은 불가한 …) 그 해결법으로 enable_neutron_dvr 를 yes로 바꿔주었고 재배포 하였습니다. 그 후에 제대로 동작하는 것을 확인하였습니다.

    그런데 이 부분이 의문인 것이, l3-agent가 floating ip 와 연관이 깊은 친구인데, dvr 을 활성화 하는 것과 아닌 것의 차이가 무엇인지 모르겠다는 점이었습니다. 어느 분의 설명에 따르면 이렇습니다.

    ⇒ DVR은 컴퓨트 노드별로 라우터 생성해서 fip 네임스페이스를 인스턴스에 직접 연결해주는 것이고 DVR을 쓰지 않으면 l3-agent 떠있는 노드의 네임스페이스에서 라우팅을 해줍니다.

    다르게 말하면 l3-agent 가 동작하는 네트워크 노드의 네임스페이스에서 라우팅이 되지 않았기에, 동작하지 않았을 것인데 - 그 이유 역시 밝혀내야할 부분인 것 같습니다. (어떻게 알아낼 수 있을까요?)

이슈를 해결하고 난 뒤라, 위에서 만들어놓은 설정값과 많이 다릅니다. (만드는 방식은 동일 합니다)

스냅샷 생성 버튼 옆 아래 꺽쇠를 클릭한 다음 유동 아이피 연결을 클릭합시다. 기존에 만들어 두었던 IP를 골라 연결합니다.

floating ip 를 활용해 ssh 접속후 ip a 를 확인해보았습니다.

잘 동작 합니다. Floating ip 는 직접 ip 할당하는 것과 다르게, 인스턴스 내부에 인터페이스가 등록되지 않습니다.

이제 cirros 말고, 다른 os를 올려봅시다. ubuntu22를 사용할 것입니다.

ubuntu 이미지 이기 때문에 user가 ubuntu 여야 합니다. 만약 root 등으로 시도하면, 접속을 거부 합니다.

사실 매 번 로그인 할 때 key를 사용하는 게 보안적으로 안정적이긴 하지만, 이 방어를 어디서 가능하게 했는지는 알면 좋겠습니다.

```bash
# cloud-init 환경에서 PasswordAuthentication을 가능하게
vim /etc/ssh/sshd_config
---
...
PasswordAuthentication yes
...

systemctl restart sshd
```

ubuntu 유저는 비밀번호 없는 루트 권한이 있으니, 유저 추가 등등의 커스텀 작업을 진행하면 좋을 듯 합니다.

여기까지 실제로 인스턴스를 구동하기 위한 과정을 따라 해보았습니다. 이 정도만 해도 목적을 충분히 만족하는 수준이긴 하지만 아직 오픈스택 생태계가 지닌 많은 서비스가 경험해보진 못했습니다. (심지어 함께 설치된 heat라는 친구도 살펴보진 않았습니다)

다음 단계로 globals.yml 파일로 돌아가서 여러가지 서비스를 추가할 수 있겠습니다.

profile
In the realm of astronomy once, but now becoming a dream-chasing gopher

3개의 댓글

comment-user-thumbnail
2025년 2월 18일

궁금한점이 있는데, 혹시 답변가능하실지요,
floating ip 1개로 여러 인스턴스를 운영할 수 있는 방법도 있는지 궁금합니다. (안되는거로 압니다만,)

1개의 답글
Powered by GraphCDN, the GraphQL CDN