Browsing Tag

NCP

NCP

[NCP] 네이버 클라우드 9월 교육 및 행사 일정 공유 – (2)

안녕하세요. ManVSCloud 김수현입니다.

네이버 클라우드 플랫폼(Naver Cloud Platform) 9월 교육 및 행사 일정이 추가되어 공유드립니다.

Professional 과정 공인 교육과 웨비나, Brown-bag이 추가되었는데 아래 내용을 참고하여 교육을 신청해보시기 바랍니다.


공인교육 – Professional

  • Naver Cloud Platform에서는 기술자격증이 존재합니다. 이 교육은 그 중에서도 Professional Level 수준의 교육입니다.
  • 기존에는 실기 시험이 존재하였으나 2021년도 6월 이후로 실기 시험은 폐지되고 필기로만 시험이 진행됩니다.
  • 유료 교육입니다.
  • 수료증이 발급됩니다.

기존에는 NCA → NCP → NCE 순서로 시험 응시가 가능했지만 2021년도 7월 22일부터는 이전 레벨의 기술자격증이 없이 상위 기술자격증 취득이 가능합니다.

해당 교육이 유료 교육으로 되어있어 비용 부담이 될 수 있습니다.
그렇기때문에 네이버 클라우드에서는 edwith 사이트에서 공인 교육을 무료로 들을 수 있도록 강의를 게재하고 있습니다.

저 역시 Professional 자격증을 준비하며 edwith 사이트를 참고했습니다.


Webinar

이번 웨비나는 AI기반 스마트 제조 기술과 사례, 클라우드 기반 MES 부터 생산성을 높여주는 협업툴이 메인 주제라 봅니다.

아무래도 평일 오전에 진행되다보니 업무 시간과 겹쳐 집중해서 듣기 어려운 점이 있습니다.
저는 대부분의 교육을 반차나 연차를 내서 듣는 편이라 주요 관심사 주제가 아닌 경우 웨비나는 잘 안듣게됩니다.

업무 중 웨비나를 듣는데에 큰 지장이 없으시거나 관심이 있는 내용이시라면 웨비나 신청 추천드립니다!

  • 10:00 ~ 10:20 제조 기업의 스마트한 디지털 비즈니스 혁신
  • 10:20 ~ 10:30 클라우드 기반 제조업 RPA 업무자동화 도입과 활용
  • 10:30 ~ 10:50 클라우드 기반 가공/철근 MES 혁신 사례
  • 10:50 ~ 11:10 “스마트워크”로 가능한 제조기업의 혁신 전략
  • 11:10 ~ 11:30 제조 고객 사례 1. AIoT 기반 Industrial SaaS 서비스
  • 11:30 ~ 11:50 제조 고객 사례 2. 패키징 인쇄 griGoMOM
  • 11:50 ~ 12:10 AI 기반 스마트 제조 기술과 사례
  • 12:10 ~ 12:30 제조 기업을 위한 고가용성의 하이브리드 클라우드 서비스

Brown-bag

  • Zoom을 이용하여 교육을 들을 수 있어 온라인 환경이라 언제 어디서나 참여가 가능합니다.
  • 식사 쿠폰이 지급됩니다.
  • 점심 시간을 활용한 짧은 교육이므로 다소 어려운 교육이 아닙니다.
    간단하게 점심을 먹으며 들을 수 있는 난이도로 가벼운 마음으로 신청하셔도 될 것입니다.

쿠버네티스(Kubernetes)는 k8s, Kube 라고도 불리며 컨테이너화된 애플리케이션을 자동으로 배포(scheduling), 운영(HA, Failover), 확장(Scaling) 해주는 오픈소스입니다.

지난 5년간 kubernetes 관심도가 다소 많이 늘었습니다.
도커와 쿠버네티스가 아직 무엇인지 잘 모르신다면 점심 시간을 이용하여 간단하게 배워봅시다.

  • 가상화 기술
  • 컨테이너 기술의 역사
  • 도커 개요 및 주요 컴포넌트
  • 도커 핵심 기능
  • 쿠버네티스 등장 배경
  • 쿠버네티스 동작 원리 
  • 간단한 데모를 통해 pod 띄어보기

도커와 쿠버네티스에 대한 기본적인 지식을 습득하고 싶으신 분들 누구나 참가하실 수 있습니다.


Personal Comments

개인적으로 스터디를 하거나 교육을 듣는 걸 좋아합니다.
최근에는 스터디를 운영하기 위해 자료를 만드는데 생각보다 쉽지 않은 것같습니다.

너무 쉽지도 않고 어렵지도 않게 목표로 하는 수준의 내용을 맞추려하다보니 많은 고민을 하게됩니다. 항상 자료를 준비하고 교육하시는 분들… 존경합니다.

이번 포스팅을 통해 원하시는 교육 많이 참가해보시고 도움되시길 바랍니다.

긴 글 읽어주셔서 감사합니다.


NCP

[NCP] 네이버 클라우드 9월 교육 및 행사 일정 공유 – (1)

안녕하세요. ManVSCloud 김수현입니다.

네이버 클라우드 플랫폼(Naver Cloud Platform) 9월 교육 및 행사 일정을 공유드리려고 합니다.

현재 게재된 일정은 총 3가지가 있는데 해당하는 조건에 맞춰서 교육 신청을 하시면 좋을 것같습니다.


Hands-on Lab

  • 첫번째로 Hands-on Lab 입니다.
    Hands-on Lab은 네이버 클라우드 플랫폼(Naver Cloud Platform) 에서 최근까지 월 2회씩 꾸준히 진행되고 있는 교육입니다.
  • 권장하는 대상자는 클라우드 환경 및 네이버 클라우드를 처음 접하시는 분에게 가장 처음으로 추천드립니다.
  • 무료 교육입니다.

저 역시 네이버 클라우드 플랫폼을 접할 때 Hands-on Lab 교육을 들은 경험이 있고
해당 교육이 많은 도움이 되었기에 커뮤니티나 주변에서
“네이버 클라우드 어떻게 시작하면 좋을까요?”라는 질문을 받으면 가장 먼저 Hands-on Lab으로 시작해보라고 추천하고 있습니다.

※ TIP : Hands-on Lab 교육이 끝나고 난 후에도 해당 주차의 일요일까지 실습 계정을 사용할 수 있어 기본적인 실습 경험을 쌓을 수 있습니다.


공인교육 – Associate

  • Naver Cloud Platform에서는 기술자격증이 존재합니다. 이 교육은 그 중에서도 Associate Level 수준의 교육이라고 볼 수 있습니다.
  • Hands-on Lab 교육 이후 Associate 자격증을 노려보실 계획이라면 추천드립니다.
  • 유료 교육입니다.
  • 수료증이 발급됩니다.

해당 교육이 유료 교육으로 되어있어 비용 부담이 될 수 있습니다.
그렇기때문에 네이버 클라우드에서는 edwith 사이트에서 공인 교육을 무료로 들을 수 있도록 강의를 게재하고 있습니다.

저도 Professional 자격증 공부를 할 때 edwith 사이트를 이용한 경험이 있습니다.


대규모 웹서비스 및 글로벌 인프라 구축

  • Intermediate Level로 최소 Hands-on Lab 교육 이후 진행하는 것을 권장드리며
    특정 주제에 대해 교육을 듣기 전 사전 기본 지식을 요구합니다.
  • 무료 교육입니다.
  • 관심있는 분야에 대한 교육이 진행된다면 바로 신청합시다. 완전 강추!
    네이버 클라우드에서는 이렇게 사용할 수 있구나! 라는 걸 배울 수 있으며 상당히 재밌습니다.

개인적으로 제가 좋아하는 교육입니다.
DevOps, Big Data, Media, Kubernetes, AI, Security, Mongo DB 등 다양한 주제로 시간이 되면 항상 신청하는 편이며 관심있는 주제로 교육을 하면 휴가를 써서라도 듣고 있는 교육입니다.
이론뿐만 아니라 실습까지 재밌게 경험할 수 있습니다.


Personal Comments

처음 교육/행사 일정을 보고 “이 교육을 내가 들어도 괜찮은 교육일까?” 망설일 때가 있었습니다. 혹시라도 저와 같은 고민을 하시는 분들이 있을까하여 제 경험을 바탕으로 교육/행사 일정과 함께 제 경험을 공유드리고자 합니다.

이후 추가적인 교육 소식이 있을 경우 추가 포스팅 예정이며 조금 더 많은 분들께서 네이버 클라우드에 쉽게 접하실 수 있는 길을 항상 고민토록 하겠습니다.

지금까지 네이버 클라우드 플랫폼 Support Master 김수현이었습니다.

긴 글 읽어주셔서 감사합니다.


NCP

[NCP] 네이버 클라우드에서 2TB 이상 파티션 사용하기 – Windows편

안녕하세요. ManVSCloud 김수현입니다.

오늘은 네이버 클라우드에서 Server 사용 시 Windows 환경에서 2TB 이상 파티션을 사용하는 방법에 대해 알아보도록 하겠습니다.


Environment and Description

📢 사용된 OS : win-2016-64-en

Linux 편에서도 설명했듯 네이버 클라우드에서 스토리지를 추가하여 생성할 때 최대 볼륨 크기는 2000GB로 제한되어 있습니다.

Linux 환경에서는 LVM(Logical Volume Manager)을 이용하여 최대 용량을 4TB, 6TB까지도 늘려보았습니다. 그렇다면 Windows 환경에서는 어떻게 파티션 최대 용량을 늘릴 것인가에 대해서 알아봅시다.


Adding capacity using storage pools

우선 위 이미지와 같이 서버에 추가할 스토리지 2개를 생성합니다.
2000GB 용량으로 2개의 스토리지를 생성해주었습니다.

이후 서버에 접속하여 아래 이미지만 순서대로 따라 해주면됩니다.
TIP이라면 중간에 뭔가 잘 안된다 싶으면 F5를 눌러 최신화 해줍시다.
설정한 것이 즉각 최신화가 안돼서 적용하려면 새로고침이 필요하더라구요…

서버 관리자에서 File and Storage Services로 클릭해줍시다.
Storage Pools 입장!!
TASKS – New Storage Pool
Next를 눌러서 넘어갑시다.
이름 정해주고 Next
추가할 물리적 디스크를 선택하고 Next를 눌러줍니다.
VIRTUAL DISKS 쪽에서 TASKS – New Virtual DISK를 눌러줍니다.
Storage Pool 선택 OK
Next 클릭
동일하게 이름 정해주고 Next를 눌러줍시다.

이 부분이 중요한데 Simple이 우리가 아는 RAID 0, Mirror가 RAID 1, Parity가 RAID 5입니다.
RAID에 대한 부분은 따로 설명하지 않으니 RAID가 궁금하실 경우 검색해보시면 자료가 많으니 찾아보시기 바랍니다.

여기서 Thin으로 해줬습니다. Fixed를 해주니 이후에 추가 확장이 정상적으로 되지 않는 증상이 발견되어 Thin으로 선택해주었습니다. 용량이 적을 때는 Fixed로 해도 추가 확장이 잘 되는데 2TB만 넘어가면 추가 확장이 되지 않습니다. 그런데 Thin으로 해주면 이후 2TB가 넘어가도 추가 확장이 가능합니다.

원하는 가상 디스크 크기를 설정 후 Next를 눌러줍니다.
Create를 눌러 생성해줍시다.
이어서 볼륨 생성까지 하게되는데 바로 Next를 눌러주면 됩니다.
이 부분도 Next를 눌러주면 됩니다.
볼륨 사이즈 지정해주고 Next!
Drive letter 설정 후 Next
파일시스템 및 레이블 설정 후 Next
이제 Create만 눌러주면 정상적으로 모든 작업이 마무리됩니다.
방금 생성한 4TB짜리 D드라이브 입니다.

위 작업 후 추가적인 테스트도 진행하였습니다.

RAID 0, RAID 1, RAID 5만 있어서 RAID 10은 RAID 1로 묶어주고 다시 0으로 묶어주는 작업을 해야하나? 싶어서 Storage Pool에서 1로 묶은 뒤 추가적으로 0으로 묶어주려고 했는데 Storage Pool에서는 그렇게 되지 않더라구요.

그런데 이게 diskmgmt.msc (디스크 관리)에서도 Span(JBOD), Simple(RAID 0), Mirror(RAID 1), Parity(RAID 5) 기능이 있단 말이죠?
Storage Pool에서 RAID 1로 묶은 두 디스크가 diskmgmt.msc (디스크 관리)에서 0으로 묶을 수 있길래 재미삼아 한번 해봤는데…

되긴 됩니다.. 그런데 이게 정상적이지는 않아보였습니다.😑
디스크 관리에서 RAID 1 디스크 2개를 0으로 추가로 묶어줄 때 12시간이 소요됐습니다.
무려 테스트는 200GB 디스크 4개로 했는데 상당히 오랜 시간이 소요된 것입니다.

이게 과연 정상적일까…🙄
이렇게 써보신 경험이 있으시다면 댓글로 공유해주세요~


Volume Expansion

자 이제 위에서 구성한 Storage Pool에서 파티션 크기를 더 확장 해보겠습니다.
기존 4TB에서 6TB로 확장하기 위해 스토리지 하나를 더 생성해주었습니다.

디스크 생성 및 추가 후 Storage Pool에서 위 이미지와 같이 Add Physical Disk를 선택해줍니다. 추가할 Disk가 보이지 않는 다면 F5를 눌러 최신화 해줍시다.

Add Physical DIsk

Physical Disk가 정상적으로 추가되면 이제 위 이미지처럼 Virtual Disks에서 Extend Virtual Disk를 선택하여 가상 디스크를 확장해주도록 합시다.

확장할 최대 크기를 입력해줍니다.

[윈도우 키+ R]을 누르신 후 diskmgmt.msc를 실행하여 디스크 관리를 켜줍니다.

위 이미지처럼 기존 4TB 디스크에서 Extend Volume을 눌러 디스크를 확장해주도록 합시다.

추가한 용량을 선택해주고 Next를 눌러줍니다.

Finish를 눌러 마무리 해주면 아래 이미지와 같이 정상적으로 5.85TB까지 크기가 확장된 것을 확인하실 수 있습니다.

Disk 확장 마무리 확인

Benchmark performance testing

이 포스팅을 준비하면서 Storage Pool을 이용하여 RAID를 묶었을 때 성능 테스트가 궁금해서 벤치마크 성능 테스트도 함께 해보았습니다. 벤치마크 툴은 ATTO Disk Benchmark 를 사용하였습니다.

Raid 설정을 하지 않은 일반 DISK
디스크를 2개를 SIMPLE (RAID 0)로 묶었을 때
디스크를 3개를 SIMPLE (RAID 0)로 묶었을 때

수치를 보면 확실히 디스크 3개를 RAID 0 으로 묶었을 때가 가장 Write/Read 수치가 높게 나왔습니다. 그런데 이 과정에 재밌는 사실을 하나 알아냈는데 디스크 3개를 RAID 0으로 묶었을 때와 디스크 2개를 RAID 0 으로 묶은 뒤 이후에 추가로 디스크를 1개 더 추가 확장하였을 때 동일한 용량인데 다른 수치를 보였습니다.

디스크 3개를 RAID 0 으로 묶었을 때
: I/O Size 64MB 기준 Write, Read = 264.37, 257.55 MB/s

디스크 2개를 RAID 0 으로 묶고 이후 디스크 1개를 추가 확장했을 때
: I/O Size 64MB 기준 Write, Read = 176.12, 169.78 MB/s

디스크 2개를 RAID 0 으로 묶었을 때
: I/O Size 64MB 기준 Write, Read = 175.34, 169.54 MB/s

RAID를 하지 않았을 때
: I/O Size 64MB 기준 Write, Read = 86.10, 85.05 MB/s

위와 같은 수치가 나왔었습니다.

애초에 처음 RAID를 잡을 때 크게 묶지 않는다면 이후 디스크를 추가하는 부분은 수치가 변하지 않는?…


Note

윈도우 Storage pool 역시 백업을 스냅샷이 아닌 이미지 생성으로 진행해야합니다.

이후 서버에 문제가 생겼을 때 생성된 이미지로 서버를 재생성하면 구성된 Storage pool까지 전부 그대로 올라오는데 스냅샷은 그렇게 되지 않습니다.

단, Linux 편에서도 언급했듯 이미지 백업으로 서버를 생성하면 서버 생성 시 스토리지 종류를 SSD로 선택할 경우 나머지 볼륨들도 전부 SSD로 생성된다는 점!!

OS는 SSD 추가 스토리지를 HDD로 나누어야할 경우 동일하게 서버 생성 후 구성하여 데이터를 복사해줘야합니다.


Personal Comments

여기까지 네이버 클라우드 윈도우 환경에서 2000GB를 초과하는 파티션도 마무리했습니다.

Storage Pool을 이용해서 software RAID를 구성하고 파티션 크기를 확장해보았는데 나름 괜찮은 것같습니다. 원하시는 구성에 맞춰서 RAID 0, RAID 1, RAID5 설정을 하셔서 사용하면 좋을 것같습니다.

긴 글 읽어주셔서 감사합니다.

NCP

[NCP] 네이버 클라우드에서 2TB 초과하는 파티션 사용하기 – Linux편

안녕하세요. ManVSCloud 김수현입니다.

오늘은 네이버 클라우드 Linux 환경에서 2TB 용량을 초과하는 파티션 사용법에 대해 포스팅하였습니다.

원래 Windows 부터 자료 다 준비해놨는데 포스팅 이미지들을 전부 회사에 두고온 관계로…
Linux편을 먼저 포스팅해보겠습니다.🙄

우선 테스트 환경와 어떻게 2TB를 초과하는 용량의 파티션을 생성할 것인가에 대해 알아보도록 합시다.


Environment and Description

📢 사용된 OS : centos-7.8-64

네이버 클라우드에서 스토리지를 추가하여 생성할 때 최대 볼륨 크기는 2000GB로 제한되어 있습니다.

그렇다면 어떻게 2000GB가 넘는 파티션을 생성할 것이냐?

우선 결론부터 말하자면 LVM(Logical Volume Manager)을 사용하여 파티션을 생성할 것입니다.

LVM에 대해 깊게 설명하는 포스팅은 아니니 간단하게 설명하자면 LVM을 이용한다면 여러 개의 물리적인 디스크 파티션을 논리적인 그룹으로 묶은 뒤 개별적인 논리 디스크로 할당하여 유연성있게 사용할 수 있습니다.

LVM에 대해 더 자세히 알고 싶으시다면 LVM에 대한 개념과 명령어에 대해 검색하여 확인 해보시기 바랍니다.


Create partitions using LVM

우선 위 이미지와 같이 서버에 추가할 스토리지 2개를 생성합니다.
2000GB 용량으로 2개의 스토리지를 생성해주었습니다.

[root@s17ab8051000 ~]# fdisk -l

Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ac8f2

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048     2099199     1048576   83  Linux
/dev/xvda2         2099200   104857599    51379200   83  Linux

Disk /dev/xvdb: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/xvdc: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

서버 내에서 fdisk -l 명령어로 확인해보면 추가된 두개의 스토리지를 확인할 수 있습니다.

[root@s17ab8051000 ~]# fdisk /dev/xvdb

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303999, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303999, default 4194303999): 
Using default value 4194303999
Partition 1 of type Linux and of size 2 TiB is set

fdisk /dev/xvdb 를 이용하여 파티션을 생성해줍시다.

1. n을 눌러 새로 생성해줍니다.
2. p를 눌러 주 파티션을 생성해줍니다.
3. 파티션 넘버를 정해주는데 default가 1로 되어있어 그냥 엔터만 쳐도 됩니다.
4. First sector는 섹터 시작점 Last sector는 섹터가 끝나는 부분을 지정해주는 건데 그냥 엔터를 눌러주어 전체 용량 지정해줍시다.

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix   
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w

이어서 해당 파티션의 타입을 지정해주어야하는데 타입의 종류는 l(L)을 입력하여 타입에 대한 모든 Hex code를 볼 수 있습니다.
우리는 Linux LVM을 사용해야하니 8e를 사용 해줄 것입니다.

5. t를 입력하여 파티션 타입 지정
6. 8e 입력하여 Linux LVM로 지정해줍니다.
7. w (저장)

위 과정을 추가한 두 디스크 /dev/xvdb, /dev/xvdc 모두 설정해주어야 합니다.

[root@s17ab8051000 ~]# fdisk -l

Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ac8f2

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048     2099199     1048576   83  Linux
/dev/xvda2         2099200   104857599    51379200   83  Linux

Disk /dev/xvdb: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x09ecabef

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1            2048  4194303999  2097150976   8e  Linux LVM

Disk /dev/xvdc: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0a3c26f7

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdc1            2048  4194303999  2097150976   8e  Linux LVM

두 스토리지 전부 정상적으로 생성했다면 /dev/xvdb1, /dev/xvdc1가 Linux LVM으로 잘 생성된 것을 확인할 수 있습니다.

[root@s17ab8051000 ~]# rpm -qa | grep lvm2
lvm2-libs-2.02.186-7.el7_8.2.x86_64
lvm2-2.02.186-7.el7_8.2.x86_64

이제 논리적 볼륨으로 관리해줄 것입니다.
lvm2가 설치되어 있어야하지만 네이버 클라우드에서는 이미 설치가 되어 있었습니다.

[root@s17ab8051000 ~]# pvcreate /dev/xvdb1
  Physical volume "/dev/xvdb1" successfully created.
[root@s17ab8051000 ~]# pvcreate /dev/xvdc1
  Physical volume "/dev/xvdc1" successfully created.

pvcreate 명령어를 이용하여 fdisk로 만든 파티션을 물리적 볼륨(PV)으로 생성해줍니다.

[root@s17ab8051000 ~]# pvdisplay
  "/dev/xvdb1" is a new physical volume of "1.95 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/xvdb1
  VG Name               
  PV Size               1.95 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               gcpy02-Fe7l-4Klb-pQed-z726-sgmY-JQXe6R
   
  "/dev/xvdc1" is a new physical volume of "1.95 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/xvdc1
  VG Name               
  PV Size               1.95 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               I6W7l7-Rxce-QllJ-n6nl-nULX-PZ3j-PQGJe3

pvdisplay 명령어를 이용하여 생성된 PV를 자세히 볼 수 있습니다. (pvs, pvscan 명령어를 사용해도 좋습니다.)

[root@s17ab8051000 ~]# vgcreate vg_data /dev/xvdb1 /dev/xvdc1
  Volume group "vg_data" successfully created

[root@s17ab8051000 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_data
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <3.91 TiB
  PE Size               4.00 MiB
  Total PE              1023998
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1023998 / <3.91 TiB
  VG UUID               Kl29bl-HIIm-NXxt-RPRI-1mfr-VMtO-0qOO7I

PV 생성 후에 VG, 즉 볼륨 그룹을 생성해주어야합니다.
vgcreate 명령어로 위와 같이 볼륨 그룹을 생성해줍시다.
vgcreate VG 이름 디바이스명1 디바이스명2 과같이 사용할 수 있습니다.

[root@s17ab8051000 ~]# lvcreate -l 100%FREE -n lv_data vg_data
  Logical volume "lv_data" created.

[root@s17ab8051000 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_data/lv_data
  LV Name                lv_data
  VG Name                vg_data
  LV UUID                66UDwi-kBvC-lJFc-Nc0g-QcSA-dxJL-0eYTUG
  LV Write Access        read/write
  LV Creation host, time s17ab8051000, 2021-07-18 15:30:36 +0900
  LV Status              available
  # open                 0
  LV Size                <3.91 TiB
  Current LE             1023998
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

VG으로 물리적 볼륨을 하나로 묶어주었습니다.
생성된 VG에서 여러개의 LV로 또는 하나의 LV로 생성하실 수 있습니다.
lvcreate로 논리적 볼륨(LV)를 생성해줄 것입니다.
-l 옵션은 PE 단위이며 -L 옵션은 MB, GB, TB 단위입니다.
(사용할 수 있는 PE와 용량은 vgdisplay 명령어에서 Free PE / Size 를 확인하면 볼 수 있습니다.)

lvcreate -l 100%FREE 를 주고 -n 옵션으로 lv의 이름을 지정해줬습니다 이후 위에서 생성했던 vg의 이름을 써줍니다.

[root@s17ab8051000 ~]# mkfs.xfs /dev/vg_data/lv_data
meta-data=/dev/vg_data/lv_data   isize=512    agcount=4, agsize=262143488 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1048573952, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=511999, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

이제 마지막으로 파일시스템 작업과 마운트 작업만 해주면 끝입니다.
저는 xfs 파일시스템으로 포맷해줬는데 이 부분은 원하시는 파일시스템으로 포맷해주시면 됩니다.

[root@s17ab8051000 ~]# mkdir /data
[root@s17ab8051000 ~]# mount /dev/vg_data/lv_data /data
[root@s17ab8051000 ~]# df -h /data
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data  4.0T   33M  4.0T   1% /data

위와 같이 생성한 디렉토리에 마운트까지 정상적으로 완료되었습니다.
하지만 최종적으로 부팅 후에도 정상적으로 마운트되려면 /etc/fstab 파일을 수정해주어야합니다.

[root@s17ab8051000 ~]# blkid /dev/vg_data/lv_data
/dev/vg_data/lv_data: UUID="4240c1b1-ac89-477c-933b-eff8db839adf" TYPE="xfs" 

blkid 명령어로 UUID를 확인하고 /etc/fstab 파일에 아래와 같이 추가해주었습니다.

#
# /etc/fstab
# Created by anaconda on Mon Aug 31 14:44:01 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=0692fdb8-bb3c-4094-83f0-fe95a339b8c1 /                       xfs     defaults        0 0
UUID=f95bed0a-11af-4b2c-bfcc-4afb91a68fc1 /boot                   xfs     defaults        0 0
UUID=4240c1b1-ac89-477c-933b-eff8db839adf /data                   xfs     defaults        0 0

네이버 클라우드에서 2TB가 초과되는 파티션을 사용하는 것 생각보다 쉽지 않나요?

그럼 이제 이렇게 논리적으로 생성한 볼륨을 확장하는 방법도 알아봅시다.
4TB의 용량도 다 써버려서 확장이 필요할 때 이미 생성된 LV는 추가적인 확장이 가능할까요?


Volume Expansion

LV 확장은 충분히 가능합니다. 아래 예시로 준비하였습니다.

먼저 2000GB 크기의 스토리지를 하나 더 추가 생성하였습니다.

[root@s17ab8051000 ~]# fdisk /dev/xvdd
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5840d763.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-4194303999, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303999, default 4194303999): 
Using default value 4194303999
Partition 1 of type Linux and of size 2 TiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

위에서 배운 그대로 fdisk를 이용하여 파티션을 생성해줍니다.

[root@s17ab8051000 ~]# pvcreate /dev/xvdd1
  Physical volume "/dev/xvdd1" successfully created.

[root@s17ab8051000 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_data
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <3.91 TiB
  PE Size               4.00 MiB
  Total PE              1023998
  Alloc PE / Size       1023998 / <3.91 TiB
  Free  PE / Size       0 / 0   
  VG UUID               Kl29bl-HIIm-NXxt-RPRI-1mfr-VMtO-0qOO7I
   
[root@s17ab8051000 ~]# 
[root@s17ab8051000 ~]# vgextend vg_data /dev/xvdd1
  Volume group "vg_data" successfully extended

자 여기서부터가 중요한데 pvcreate를 이용하여 PV를 생성해주는 것까지는 동일합니다.
하지만 이번엔 볼륨 그룹을 따로 생성해주지 않았습니다.
볼륨 그룹을 따로 생성할 수도 있겠지만 vgextend를 이용하여 기존 볼륨 그룹을 확장하는 방식으로 해보았습니다.

[root@s17ab8051000 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_data
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <5.86 TiB
  PE Size               4.00 MiB
  Total PE              1535997
  Alloc PE / Size       1023998 / <3.91 TiB
  Free  PE / Size       511999 / 1.95 TiB
  VG UUID               Kl29bl-HIIm-NXxt-RPRI-1mfr-VMtO-0qOO7I
   

[root@s17ab8051000 ~]# lvextend -l +511999 /dev/vg_data/lv_data
  Size of logical volume vg_data/lv_data changed from <3.91 TiB (1023998 extents) to <5.86 TiB (1535997 extents).
  Logical volume vg_data/lv_data successfully resized.

vgdisplay를 이용해서 보면 정상적으로 VG가 확장되어 Free PE / Size가 추가적으로 여유가 생긴 것을 확인할 수 있습니다.

여기서 lvextend 명령어를 이용해줍시다!
lvextend를 이용하면 논리적 볼륨을 확장할 수 있습니다.
이번엔 -l 명령어로 PE를 지정해서 줘봅시다. (1PE 당 4MB의 용량이라고 합니다.)

[root@s17ab8051000 ~]# lvscan
  ACTIVE            '/dev/vg_data/lv_data' [<5.86 TiB] inherit
[root@s17ab8051000 ~]# df -h /data
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data  4.0T   33M  4.0T   1% /data

끝이 아닙니다.
LV는 확장되었지만 df 명령어로 보면 그대로 전체 크기가 4T로 머물러 있을 것입니다.

왜냐? 파일시스템을 확장해주지 않았으니까…

[root@s17ab8051000 ~]# xfs_growfs -d /data
meta-data=/dev/mapper/vg_data-lv_data isize=512    agcount=4, agsize=262143488 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1048573952, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=511999, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1048573952 to 1572860928
[root@s17ab8051000 ~]# 
[root@s17ab8051000 ~]# df -h /data
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data  5.9T   33M  5.9T   1% /data

xfs_growfs 명령어로 위와 같이 파일시스템을 확장해줄 수 있습니다.
※ 파일시스템이 EXT4일 경우 resize2fs 명령어를 사용할 수 있습니다.

파일시스템 확장 후 df 명령어로 다시 확인 해보면 정상적으로 6T까지 용량이 늘어난 것을 볼 수 있습니다.


Note

이렇게 스토리지 LVM을 이용하여 파티션을 구성했을 경우 백업을 스냅샷 백업이 아닌 이미지 백업으로 해야합니다.

이후 서버에 문제가 생겼을 때 생성된 이미지로 서버를 재생성하면 구성된 LVM까지 전부 다 그대로 올라오는데 스냅샷은 그렇게 할 수 없습니다.
스토리지 여러개를 하나로 묶어 놓았는데 스냅샷으로 백업해버리면 스냅샷으로 볼륨 생성 후 이걸 다시 묶어주고 파일시스템을 포맷하면 데이터가 살아있지 못하죠..

단 이미지 백업으로 서버를 생성하면 서버 생성 시 스토리지 종류를 SSD로 선택할 경우 나머지 볼륨들도 전부 SSD로 생성된다는 점이죠…

나머지 볼륨들을 다시 HDD로 변경하려면 스토리지를 HDD로 생성 하고 LVM으로 PV,VG, LV전부 구성 해준 뒤 데이터를 복사해줘야합니다…😥


Personal Comments

지금까지 네이버 클라우드 리눅스 환경에서 2000GB를 초과하는 파티션을 만들어보았습니다.
오늘 설명드린 LVM을 이용한 파티션 생성 및 확장 뿐만이 아니라 축소, 스냅샷 등 다양하게 사용할 수 있으니 관심있으시면 다양하게 써보시면 좋을 것같습니다.

Windows편도 금방 포스팅하도록 하겠습니다.

긴 글 읽어주셔서 감사합니다.

NCP

[NCP] Container Registry에서 이미지를 가져오기 & 로드밸런서 연결

안녕하세요. ManVSCloud 김수현입니다.

오늘은 Naver Cloud Platform에서 Container Registry에서 이미지를 가져오는 방법과 Load Balancer에 연결하는 방법을 알아보도록 하겠습니다.


CONTAINER REGISTRY에서 이미지를 가져오기

아직 Container Registry를 생성해본 적이 없으시다면 위 [NAVER CLOUD KUBERNETES – CONTAINER REGISTRY로 컨테이너 이미지를 관리]를 먼저 보고 오시기 바랍니다.

위 포스팅에서는 push를 해보았습니다. 오늘은 pull을 해볼 시간입니다.

우선 테스트용으로 하고 계시다면 이전에 했던 docker image를 전부 지우고 한 번 해보도록합시다.

[root@kubernetes-server-kr2 ~]# docker rm `docker ps -a -q`
[root@kubernetes-server-kr2 ~]# docker rmi -f `docker images -q`

docker login을 해줍시다.

[root@kubernetes-server-kr2 ~]# docker login <CONTAINER REGISTRY에 나와있는 엔드포인트>
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

docker pull 엔드포인트/이미지:버전 명령어로 docker 이미지를 가져올 수 있습니다.

[root@kubernetes-server-kr2 ~]# docker pull manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0
1.0: Pulling from manvscloud-apache
2d473b07cdd5: Pull complete 
444a3233aeea: Pull complete 
Digest: sha256:b2e60515712f6c5d4f155e9d234299fa82640d8dc7766405fe997c1b80658c07
Status: Downloaded newer image for manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0
manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0

또한 k8s에서 secret을 이용한다면 패스워드, OAuth 토큰, ssh 키와 같은 정보를 저장 및 관리할 수 있는데 이를 이용하여 pod를 생성해보도록 합시다.

[root@kubernetes-server-kr2 ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-p5mq2   kubernetes.io/service-account-token   3      11d

kubectl create secret docker-registry “secret 이름” –docker-server=레지스트리-엔드포인트 –docker-username=Access-Key-ID –docker-password=Secret-Key –docker-email=계정으로 아래와 같이 secret을 만들 수 있습니다.

[root@kubernetes-server-kr2 ~]# kubectl create secret docker-registry manvscloud-sec --docker-server=레지스트리-엔드포인트 --docker-username=Access-Key-ID --docker-password=Secret-Key --docker-email=계정

[root@kubernetes-server-kr2 ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-p5mq2   kubernetes.io/service-account-token   3      11d
manvscloud-sec        kubernetes.io/dockerconfigjson        1      19s

이제 yaml 파일을 생성하여 위에서 생성한 secret을 이용하여 이미지를 pull 및 pod 생성을 해봅시다.

vi apache.yaml

apiVersion: v1
kind: Pod
metadata:
 name: manvscloud-apache
 namespace: default
spec:
 containers:
 - name: manvscloud-apache
   image: manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0
 imagePullSecrets:
 - name: manvscloud-sec
[root@kubernetes-server-kr2 ~]# kubectl create -f apache.yaml 
pod/manvscloud-apache created

[root@kubernetes-server-kr2 ~]# kubectl get pods
NAME                                 READY   STATUS    RESTARTS   AGE
manvscloud-apache                    1/1     Running   0          4s

CONTAINER REGISTRY에 있는 이미지를 잘 가져와 pod가 생성되었습니다.
이렇게 CONTAINER REGISTRY를 이용하여 이미지 배포 관리가 쉽게 가능합시다.

또한 CONTAINER REGISTRY에서 Configuration을 클릭하여 Public Endpoint를 활성화/비활성화 선택이 가능합니다. 네이버 클라우드 내부에서만 사용할 것이라면 비활성화 하는 것이 좋습니다.


로드밸런서 연결

네이버 클라우드 Kubernetes Service를 사용중이라면 서비스 생성 시에 type을 LoadBalancer로 지정할 경우 네이버 클라우드 콘솔 내에 로드밸런서 인스턴스가 자동으로 생성됩니다.

로드밸런서 설정의 경우 어노테이션으로 설정할 수 있습니다.

"metadata": {
  "annotations": {
    "key1" : "value1",
    "key2" : "value2"
  }
}
https://guide.ncloud-docs.com/docs/nks-nks-1-8

실습을 통해 직접 로드밸런서를 생성해봅시다.
이번 실습에서는 어노테이션을 이용하여 추가적인 설정은 하지 않았습니다.
간단하게 로드밸런서 연결만 따라할 수 있도록 해두었습니다.

vi manvscloud-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
 name: apache-deployment
spec:
 replicas: 3
 selector:
   matchLabels:
     app: apache
 template:
   metadata:
     labels:
       app: apache
   spec:
     containers:
     - name: apache
       image: manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0
       ports:
       - containerPort: 80
     imagePullSecrets:
     - name: manvscloud-sec

아래와 같이 kubectl get pods –show-labels 했을 때 LABELS이 붙어있을 것입니다.
replicas, label 등은 따로 쿠버네티스에 대한 공부가 필요하니 이러한 설정에 이해가 어려우신 분들은 우선 kubernetes에 대한 공부를 우선적으로 간단하게나마 하시는 것을 권장드립니다.

[root@kubernetes-server-kr2 ~]# kubectl get pods --show-labels
NAME                                 READY   STATUS    RESTARTS   AGE   LABELS
apache-deployment-75895cbcbb-6dlvz   1/1     Running   0          14s   app=apache,pod-template-hash=75895cbcbb
apache-deployment-75895cbcbb-l7q4d   1/1     Running   0          14s   app=apache,pod-template-hash=75895cbcbb
apache-deployment-75895cbcbb-vcvpq   1/1     Running   0          14s   app=apache,pod-template-hash=75895cbcbb

[root@kubernetes-server-kr2 ~]# for pod in $(kubectl get pod -l app=apache |awk 'NR>1 {print $1}'); do kubectl exec $pod -- /bin/sh -c "hostname > /var/www/html/index.html; echo '안녕하세요. ManVSCloud입니다.' >> /var/www/html/index.html"; done

각 pod 내 index.html 파일을 수정해주었습니다.
로드밸런서를 연결하여 접속하기 위해 LoadBalancer를 생성해봅시다.

아래와 같이 Serivces yaml을 생성합니다.

vi lb.yaml

kind: Service
apiVersion: v1
metadata:
 name: lb-service
spec:
 ports:
   - port: 80
     targetPort: 80
 selector:
   app: apache
 type: LoadBalancer
[root@kubernetes-server-kr2 ~]# kubectl create -f lb.yaml 
service/lb-service created

kubectl get services 명령어로 확인해보면 EXTERNAL-IP가 NCP 내 LB로 되어있는 것을 확인할 수 있습니다.

[root@kubernetes-server-kr2 ~]# kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP                                                        PORT(S)        AGE
kubernetes   ClusterIP      198.19.128.1    <none>                                                             443/TCP        11d
lb-service   LoadBalancer   198.19.208.51   default-lb-service-821a9-7191539-4b535e410da7.kr.lb.naverncp.com   80:31033/TCP   5m33s

콘솔을 보면 따로 Load Balancer를 생성해주지 않았는데 따로 콘솔상에서 생성되어 있는 것을 확인할 수 있습니다. 삭제도 마찬가지입니다.
kubectl delete svc lb-service를 해주면 콘솔상에서도 자동 제거가 됩니다.

생성된 LB의 접속 정보를 이용하여 웹에서 접속해보면 위에서 추가해준 index.html의 값이 나오고 있습니다.

로드밸런싱 알고리즘은 기본값인 Round Robin으로 설정되어 있으며 Least Connection과 Source IP Hash로도 변경이 가능합니다.


Personal Comments

오늘은 CONTAINER REGISTRY에서 이미지를 가져오는 방법과 로드밸런싱 연동 방법을 알아보았습니다.

참고로 실습 과정을 따라해보실 경우 .yaml 파일을 그대로 복사하지 마시고 엔드포인트를 잘 수정하여 사용하시기 바랍니다.

긴 글 읽어주셔서 감사합니다.

함께 보며 공부하기 좋은 자료

NCP

[NCP] Naver CLoud Kubernetes – Container Registry로 컨테이너 이미지를 관리하자

안녕하세요. ManVSCloud 김수현입니다.

오늘은 이전 포스팅인 “[NCP] NAVER CLOUD에서 KUBERNETES를 사용해보자 – NKS“에 이어 컨테이너로 이미지를 관리하는 방법을 알아보도록 하겠습니다.


Object Storage 생성

Container Registry를 생성하기 전에 Object Storage가 먼저 생성되어야합니다.
Container Registry에 저장될 컨테이너 이미지는 Object Storage에 저장되기 때문입니다.

이후 Container Registry에 이미지를 저장하고 오브젝트 스토리지에 어떻게 저장되는지도 함께 보도록합시다.

Object Storage 생성은 어렵지 않습니다.
우선 버킷 이름을 적어주고 [다음]을 누릅시다. 참고로 버킷 이름은 유니크한 값으로 이름이 중복될 수 없습니다.

권한은 공개하지 않도록 해두고 계정 설정은 추가적으로 하지 않겠습니다.

버킷 하나가 쉽게 생성이 되었습니다.
Object Storage에 대해 자세히 알고 싶으시다면 아래 사용 가이드도 참고해보시기 바랍니다.


Container Registry 생성

Container Registry를 생성해보겠습니다.
Container Registry 를 이용하면 컨테이너 이미지를 쉽게 업로드 및 배포할 수 있습니다.

[이용 가이드]가 있어 사용하기 쉬운 편입니다.
아래에서 생성한 Container Registry로 이미지 업로드를 해볼 것입니다.


컨테이너 이미지(Dockerfile) 만들기

간단하게 Dockerfile을 만들어보도록 하겠습니다.

vi Dockerfile

FROM centos:7

RUN yum -y update && yum install -y httpd*
CMD ["systemctl","restart","httpd"]
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

위에서 생성한 이미지를 아래와 같이 빌드해줍시다.

[root@kubernetes-server-kr2 ~]# docker build -t manvscloud-apache .
Sending build context to Docker daemon  179.7kB
Step 1/4 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
.
.
.
Complete!
Removing intermediate container 47ec6561ff67
 ---> 70b6f6999f0d
Step 3/4 : CMD ["systemctl","restart","httpd"]
 ---> Running in fa442e0e6f10
Removing intermediate container fa442e0e6f10
 ---> 8196868e79b0
Step 4/4 : CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
 ---> Running in 0a08c642dcc6
Removing intermediate container 0a08c642dcc6
 ---> 2171dc304b08
Successfully built 2171dc304b08
Successfully tagged manvscloud-apache:latest

docker images 명령어로 확인해보면 빌드한 이미지를 확인하실 수 있습니다.
이제 빌드된 이미지를 run 해보도록합시다.

[root@kubernetes-server-kr2 ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
manvscloud-apache   latest    2171dc304b08   17 seconds ago   517MB
centos              7         8652b9f0cb4c   7 months ago     204MB

[root@kubernetes-server-kr2 ~]# docker run -tid -p 8080:80 --name manvscloud-apache01 manvscloud-apache
0edc715160a959582dd085f54ec7c384d278648f5377c2cad15816f83a252c7d

[root@kubernetes-server-kr2 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                  NAMES
0edc715160a9   manvscloud-apache   "/usr/sbin/httpd -D …"   7 seconds ago   Up 6 seconds   0.0.0.0:8080->80/tcp   manvscloud-apache01

IP : 8080 또는 서버 내부에서는 curl localhost:8080 로 확인할 수 있습니다.

[root@kubernetes-server-kr2 ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      929/sshd            
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      593/rpcbind         
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      40020/docker-proxy  
tcp6       0      0 :::22                   :::*                    LISTEN      929/sshd            
tcp6       0      0 :::111                  :::*                    LISTEN      593/rpcbind  

이미지 업로드

이제 위에서 생성한 이미지를 Container Registry로 업로드 해보겠습니다.
Container Registry에 업로드 하기위해서 [마이페이지]-[인증키 관리]에서 미리 API 인증키를 생성 해놓으시기 바랍니다.

위에서 생성한 API 키를 이용하여 업로드를 해볼텐데
1) docker login -u [생성한 API Key ID] [생성한 Container Registry의 엔드포인트]를 입력한 후 API Key의 패스워드를 입력하여 로그인을 해줍니다.
2) 이후 docker image tag로 태그를 정해줍시다.
3) 마지막으로 docker push 명령어를 이용하여 아래와 같이 push 해줍니다.

[root@kubernetes-server-kr2 ~]# docker login -u [Access Key ID] manvscloud-k8s-cr.kr.ncr.ntruss.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@kubernetes-server-kr2 ~]# docker image tag manvscloud-apache manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0

[root@kubernetes-server-kr2 ~]# docker push manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0
The push refers to repository [manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache]
d4208dd0734c: Pushed 
174f56854903: Pushed 
1.0: digest: sha256:b2e60515712f6c5d4f155e9d234299fa82640d8dc7766405fe997c1b80658c07 size: 742

아래 Container Registry가 보이시나요?
push했던 manvscloud-apache 이미지가 업로드 되었습니다.

Object Storage에 들어가서 해당 버킷으로 들어가보면 해당 이미지 파일이 저장되고 있는 것도 확인해볼 수 있습니다.


Personal Comments

요즘 컨테이너 환경을 사용하는 유저가 많이 늘었습니다.
저희 고객님들도 점점 컨테이너화된 어플리케이션 서비스를 구성하는 모습이 자주 보이기 시작합니다.

특히 다수의 컨테이너 사용자들은 퍼블릭 클라우드 환경에서 컨테이너 서비스를 운영중이며 요즘은 하이브리드 클라우드를 상당히 많이 보았습니다.
네이버 클라우드에서는 한국인이 쉽게 접근할 수 있도록 가이드들이 한글로 자세히 안내되고 있어 서비스들을 사용할 때 다른 플랫폼 보다 크게 부담이 느껴지지 않는 점이 가장 좋은 것같습니다.

긴 글 읽어주셔서 감사합니다.

NCP

[NCP] Intermediate 보안 강화 교육 후기

안녕하세요. ManVSCloud 김수현입니다.

네이버 클라우드에서 올해 1월부터 6월까지 Intermediate 교육 코스 중
마지막 Security 교육이 종료되었습니다.

Intermediate 교육 중에 Big Data 교육을 듣지못해 아쉬움이 있습니다.😥
나머지 5개의 교육은 다 들었는데 제가 아직 접해보지 못한 개발과 AI까지 모두 도움이 되는 교육이었습니다.

1월 – Big Data
2월 – Kubenetes
3월 – DevOps
4월 – Media
5월 – A.I
6월 – Security

6월 18일에 있었던 보안 강화 교육은 개인적으로 가장 중요하고 권장하는 교육이라고 생각합니다.

저 역시 시간이 될 때마다 “[NCP] 네이버 클라우드에서의 보안” 시리즈로 포스팅 중인데 그 만큼 보안은 이제 선택이 아닌 필수 항목이기때문입니다.


Review

Naver Cloud Intermediate 보안 강화 교육

교육은 간단한 용어 정리부터 시작해서 해킹 사례, 해킹 패턴, 보안 강화 등으로 이루어져있었습니다.

또한 ACG나 NACL 등은 많이 접하게 되기에 익숙하지만 Web Security Checker와 같은 서비스는 개인이 테스트로 사용하기에 비용 부담이 있을 수 있는데 해당 교육에서 사용하는 방법을 직접 보여주고 어떤 씩으로 결과가 나오는지 보여줍니다.

물론 Sub Account 및 API Key 에 대한 보안은 다루지 않았지만 서비스를 하는데에 있어 좋은 교육이었다고 생각합니다.


Personal Comments

이번 Security 교육에서는 실습용 계정을 주지않아 따로 실습은 진행하지 않았습니다.
추가적인 보안 실습에 관한 내용은 추가적인 포스팅으로 다루도록 하겠습니다.

현재 포스팅하고 있는 “네이버 클라우드에서의 보안” 시리즈가 생각보다 리소스 비용이 발생하는 것들이 꽤 많이 남아있어 어떻게 포스팅할지 고민 중이었는데 이번 교육으로 어느정도 이미지를 확보하여 참고할 수 있게 되었습니다.

1~6월 Intermediate 교육이 끝났습니다.
7~12월에도 있을까하고 늘 [교육 및 행사 일정]을 보고있는데 아직 예정이 없는듯보입니다

추가로 현재 [교육 및 행사 일정]을 보니 처음 네이버 클라우드를 접하시는 분들에게 추천하는 웨비나 하나를 발견했습니다.
“Follow-me! 클라우드 인프라 구축 기본편” 웨비나 입니다.
6월 24일에 있는데 네이버 클라우드를 시작해보고 싶으시다면 신청해서 한번 들어보시기 바랍니다.

후기 읽어주셔서 감사합니다.

NCP

2-2. [NCP] 네이버 클라우드에서의 보안 – Server (내부 방화벽을 이용한 GEOIP)

안녕하세요. ManVSCloud 김수현입니다.

오늘 포스팅은 이전 포스팅 주제였던 ACG(Access Control Group)에 이어 서버 내부 방화벽,
그 중에서도 GEOIP에 대해서 작성해보려합니다.

글로벌 사이버테러는 지속적으로 늘어나고 있고 공격 유형도 다양해지고 있습니다.

ACG는 Inbound Rule이 기본 차단이고 추가하는 IP/ACG에 대해서 허용하는 방식입니다.
또한 NACL을 이용한다고 하여도 한 국가가 사용하는 IP 대역을 전부 허용/차단 룰을 추가해주는 것도 힘들 것입니다.

주로 웹 서비스가 대표적인 케이스인데 해외 서비스를 하지 않는 경우 또는 특정 국가에서 서비스를 해야하는데 지속적인 공격으로 지역 기반 차단이 필요한 경우가 있습니다.

물론 Naver Cloud Platform의 Security Monitoring 서비스를 사용한다면 IDS/IPS, WAF, Anti-DDOS 등을 사용할 수 있으나 아직 보안 장비에 투자할 비용이 부족한 사용자에게는 부담스러울 수가 있어 비록 100% 완벽하지 않으나 어느정도 피해를 최소화하기 위해 GeoIP 모듈을 이용하여 내부 방화벽으로 서버를 지역 기반 차단하는 방법을 작성해보겠습니다.


Linux

iptables

Linux에서 지역 기반 차단을 진행해봅시다.
방화벽은 모두가 아는 iptables를 사용할 것입니다.

[Environment]
Naver Cloud Platform : centos-7.8-64

※ 기본 설정 및 설치 😎

[root@manvscloud-dev-pub-kr1 ~]# sestatus 
SELinux status:                 disabled

[root@manvscloud-dev-pub-kr1 ~]# yum install -y iptables*
yum install lrzsz libtool wget patch pcre-devel lua-devel libxml2-devel ncurses-devel zlib zlib-devel libtermcap-devel libc-client-devel bison gcc g++ cpp gcc-c++ curl curl-devel make automake unzip zip xz -y

[root@manvscloud-dev-pub-kr1 ~]# yum install -y "kernel-devel-uname-r == $(uname -r)"

[root@manvscloud-dev-pub-kr1 ~]# yum install -y yum install perl-Text-CSV_XS perl-NetAddr-IP perl-CPAN.noarch

※ Kernel-devel 확인 🕶

kernel-devel이 정상적으로 설치되지 않으면 이후 설치할 xtables 컴파일이 정상적으로 되지않습니다. yum으로 현재 커널 버전에 맞는 kernel-devel이 설치되지 않을 경우 repo를 찾아 커널 버전에 devel을 설치해주어야합니다.

※ xtables 설치 😎

[root@manvscloud-dev-pub-kr1 ~]# cd /usr/local/src
[root@manvscloud-dev-pub-kr1 src]# wget mirror.koreaidc.com/iptables/xtables-addons-2.10.tar.gz

// https://sourceforge.net/projects/xtables-addons/files/Xtables-addons/ ← 접속 시 각 버전별 xtables가 있습니다.

[root@manvscloud-dev-pub-kr1 src]# tar xvfz xtables-addons-2.10.tar.gz
[root@manvscloud-dev-pub-kr1 src]# cd xtables-addons-2.10/
[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# cat -n mconfig | grep TARPIT
    12	build_TARPIT=m

// build_TRIPIT=m은 redhat에서 지원하지않아 주석처리 해주었습니다.
[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# sed -i '12s/build_TARPIT=m/#&/' mconfig

(참고로 CentOS6 버전 이용 시 커널 버전이 낮아 xtables 버전 역시 낮춰서 설치하셔야합니다.
1.37버전 설치 권장드리며 mconfig에서 build_RAWNAT=m, build_SYSRQ=m, build_TARPIT=m, build_length2=m 총 4가지를 주석처리 해줘야합니다.)

[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# ./configure
[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# make
[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# make install
[root@manvscloud-dev-pub-kr1 xtables-addons-2.10]# cd geoip

[root@manvscloud-dev-pub-kr1 geoip]# ./00_download_geolite2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: geolite.maxmind.com; Unknown error

00_download_geolite2를 실행해도 되지않기때문에 따로 GeoLite2-Country-CSV를 받아야합니다.
https://maxmind.com/ 에 가입 후 라이센스 발급 및 GeoLite2-Country-CSV.zip 설치가 가능합니다.

// 아래 MaxMind 링크를 추가해두었습니다.
[root@manvscloud-dev-pub-kr1 geoip]# ll | grep GeoLite2
-rw-r--r-- 1 root root 1934768 May 29 08:25 GeoLite2-Country-CSV_20210525.zip

[root@manvscloud-dev-pub-kr1 geoip]# ./10_download_countryinfo
[root@manvscloud-dev-pub-kr1 geoip]# unzip GeoLite2-Country-CSV_20210525.zip
[root@manvscloud-dev-pub-kr1 geoip]# perl -MCPAN -e shell
cpan[1]> install NetAddr::IP
cpan[2]> install Getopt::Long
cpan[3]> quit

[root@manvscloud-dev-pub-kr1 geoip]# cat GeoLite2-Country-CSV_20210525/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv
[root@manvscloud-dev-pub-kr1 geoip]# ./xt_geoip_build GeoIP-legacy.csv
[root@manvscloud-dev-pub-kr1 geoip]# mkdir -p /usr/share/xt_geoip
[root@manvscloud-dev-pub-kr1 geoip]# cp -a {BE,LE} /usr/share/xt_geoip/
[root@manvscloud-dev-pub-kr1 geoip]# cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables_org

[root@manvscloud-dev-pub-kr1 ~]# systemctl enable iptables
[root@manvscloud-dev-pub-kr1 ~]# systemctl start iptables

/etc/sysconfig/iptables 수정하여 룰셋 적용해서 사용하시면 됩니다.


TIP & Personal Comments and Wrap-up

windows firewall

Windows에서 역시 국가 기반 차단이 가능합니다.

Powershell을 이용한 방화벽 컨트롤 및 IPSec 설정의 방법이 존재하는데 이번 편에서는 따로 다루지 않고 IPsec 편에서 추가적으로 설명하도록 하겠습니다.

또한 Apache와 Nginx 등 소프트웨어단에서 국가 기반 차단을 할 수도 있습니다.
이후 이러한 소프트웨어단에서 국가 기반 차단을 하는 방법도 포스팅할 것입니다.

위 링크는 WHOIS입니다.
서버내에서 공격성 접근 확인 시 해당 IP를 위 사이트에서 검색할 경우 어느 나라의 IP인지 확인이 가능합니다.

국가 기반 차단 시 필요한 국가 코드 및 WHOIS 조회 시 국가코드가 어느 나라인지 확인할 수 있는 국가 코드 조회 사이트도 참고하시면 좋을듯합니다.

긴 글 읽어주셔서 감사합니다.


NCP

2-1. [NCP] 네이버 클라우드에서의 보안 – Server (ACG)

안녕하세요. ManVSCloud 김수현입니다.

“1-1~1-2. [NCP] 네이버 클라우드에서의 보안 – Account 편” 포스팅이 끝나고
“2. [NCP] 네이버 클라우드에서의 보안 – Server 편” 포스팅을 작성하게 되었습니다.

오늘은 네이버 클라우드에서 Server 보안의 첫 번째 ACG(Access Control Group)를 알아봅시다.
ACG는 IP/Port 기반 네트워크 접근 제어 및 관리를 할 수 있는 무료 방화벽 서비스입니다.
Console에서 쉽게 허용된 트래픽만 접근할 수 있도록 설정하여 외부의 침입으로부터 차단해주는데 간단하고 단순하지만 잘 사용한다면 견고한 보안을 보여줄 것입니다.


ACG (Access Control Group)

https://www.ncloud.com/product/networking/vpc

네이버 클라우드에서 ACG는 Classic 환경과 VPC 환경에 조금 차이가 있습니다.
간단하게 표로 만들어보았으니 그림을 통해 차이를 확인해보시기 바랍니다.

Classic – ACG
VPC – ACG

ACG에서는 TCP, UDP, ICMP 프로토콜에 대해 규칙 설정이 가능하며 192.168.0.1(단일), 10.0.1.0/24(대역), 0.0.0.0/0(전체), manvscloud-acg(ACG 이름) 으로 접근소스 지정이 가능합니다. (manvscloud.com과 같이 도메인은 불가능)

VPC 환경에서는 Inbound / Outbound 규칙을 설정할 수 있으며 기본적으로 Inbound는 차단, Outbound는 허용입니다. (Classic은 X)

  • Inbound 규칙 : 서버로 들어오는 트래픽(외부→내부)에 대한 규칙
  • Outbound 규칙 : 서버에서 나가는 트래픽(내부→외부)에 대한 규칙

How to use ACG well

ACG를 어떻게 잘 사용할까요?

VPC 환경을 기준으로 아래와 같이 서버를 생성하여 보여드리겠습니다.

예시로 bastion host 1대, web server 1대, db server 1대를 생성하였습니다.
Bastion host에 대한 ACG는 정말 접속이 필요한 사용자만 접근할 수 있도록 허용하는 방법을 사용하고 추가적인 접근 통제는 VPN 또는 서버 내부에서 사용자 계정을 생성하여 계정 관리 및 탐지를 합니다.

Web Server는 ACG를 어떻게 주면 좋을까요?
Web Server로 SSH 접근하는 IP를 추가해주어야 할 것이고 HTTP, HTTPS 포트도 열어주어야할 것입니다.
저는 ACG 하나에 몰아서 넣기보다 분리해서 사용하며 ACG 생성 시 네이밍도 이후 잘 구분할 수 있도록 만드는 편입니다. (프로젝트명-용도-acg)

manvscloud-admin-acg에는 관리자 접속용 acg입니다.
manvscloud 프로젝트 전체에 접속이 필요한 관리자들에 대한 정책을 추가하여 사용합니다.
동일한 프로젝트의 다른 서버 생성 시에도 해당 acg만 추가해주기만 하면 되어 관리하기도 좋습니다.
또한 manvscloud-web-acg는 manvscloud 프로젝트의 web서버에 대한 acg입니다.
web서버마다 동일하게 필요한 정책을 추가하여 관리합니다. 이후 추가되는 web 서버마다 acg를 추가 생성하지 않고 해당 acg를 추가하여 공통으로 사용합니다.
마지막 하나의 acg는 위 사진에는 추가되어 있지않지만 필요 시에 해당 서버에만 특정적으로 필요로하는 서비스 해당 서버에서만 open되어야하는 정책에대한 acg를 추가하여 관리합니다. (예를 들면 개발자가 특정 웹 서버 FTP 접근이 필요할 경우)

정리하면 제가 ACG를 관리하는 방식은 아래와 같습니다.

  1. admin-acg (프로젝트 공통 관리자 관리 정책 ACG)
  2. web-acg, mysql-acg, was-acg 등 (공통 서비스 관리 정책 ACG)
  3. *-acg (특정 서버에만 적용되어야하는 정책 ACG)

더 좋은 ACG 사용 방법이 있다면 댓글로 의견 부탁드립니다.

위 정책은 웹 서버에 대한 web-acg 입니다.
제가 80포트를 0.0.0.0/0이 아니라 왜 10.0.13.0/24와 10.0.33.0/24 으로 열어두었을까요?

이유는 바로 제가 LB와 연결을 해놓았기때문입니다.
많은 고객분들이 웹 서버와 LB를 함께 사용하십니다.

[root@manvscloud-web-pub-kr2 ~]# tail -f /var/log/httpd/access_log 
10.0.13.11 - - [25/May/2021:07:15:15 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.13.11 - - [25/May/2021:07:15:15 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.33.11 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.33.11 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.33.10 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.33.10 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.13.10 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.13.10 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.13.11 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
10.0.13.11 - - [25/May/2021:07:15:45 +0900] "HEAD /index.html HTTP/1.1" 200 - "-" "-"
Load Balancer

만약 0.0.0.0/0으로 열어두었다면 도메인-LB-웹서버로 통신되는 것 외에도 웹서버 IP를 통해 웹서버로 접근 역시 가능합니다.
물론 웹서버 내에서 IP주소로 접근이 불가능하도록 설정이 가능하지만 방화벽 룰셋은 굳이 접근이 필요하지 않은 부분까지 허용하는 것은 권장하지 않으며 좋은 습관이 아닙니다.

위 ACG와 같이 설정하게되면 LB로는 접속 가능하지만 웹서버 IP로는 다이렉트로 접속이 불가능하게 됩니다.

이제 예시 중 DB Server에 대한 ACG 관리를 보겠습니다.

DB 서버는 주로 bastion host와 DB 연동이 필요한 서버에 대한 허용 정책을 설정하게되는데
아래와같이 ACG 이름을 이용하여 설정할 수 있습니다.

bastion-host Server와 연결된 manvscloud-bastion-acg를 DB Server ACG에 접근 포트 허용을 해주게된다면 manvscloud-bastion-acg와 연결된 서버들은 DB Server로 접근을 할 수 있게되는 것입니다.

추가 예시로 Web Server 전체가 DB와 연결되어야할 경우 ACG를 넣어줄 수 있으며
“나는 모든 웹 서버와 모든 DB 서버가 연결되지 않아 보안상 따로 따로 지정을 해줘야한다”라고 한다면 특정 서버에만 적용되어야하는 정책 ACG를 추가하여 연결되어야할 서버 IP만 허용해주는 방법이 있습니다.


Personal Comments and Wrap-up

지금까지 쉽고 간단한 ACG(Access Control Group)에 대해 알아보았습니다.
많은 사용자들이 귀차니즘으로 인해 ACG 관리가 잘 되지않고 있습니다.
원격 접속 포트, 쉘 접근 포트 등 중요한 포트를 0.0.0.0/0(전체)로 열어두는 사용자들을 생각보다 많이보게되고 또 보안상 위험을 알려도 아무 일 없을 거라며 넘어가버리는 분들 역시 많았습니다.
(귀찮아서 내버려뒀을 때 편한 감정과 공격받아 데이터 손실 후 감정은 많이 다릅니다…)

제발 막아주세요😥

다음 포스팅은 “2-1. [NCP] 네이버 클라우드에서의 보안 – SERVER”에 이어
“2-2. [NCP] 네이버 클라우드에서의 보안 – ACCOUNT” 내용은 IPSec VPN과 SSL VPN에 대해서 작성하려고 했었는데 ACG에 대한 내용에 이어 서버 내부 방화벽 활용 방법을 먼저 포스팅하려고 합니다.

긴 글 읽어주셔서 감사합니다.