Browsing Tag

네이버클라우드

NCP

[NCP] Let’s Encrypt + Certificate Manager로 Load Balancer에 인증서 적용하기

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

오늘은 네이버 클라우드 사용 시 Load Balancer에 Certificate Manager에 등록한 SSL 인증서를 적용하는 방법을 알려드리려 합니다.

물론 아시다시피 SSL 인증서의 경우 발급 기관에서 비용을 주고 구매하여 사용하는 것이 일반적입니다. 그러므로 이번 포스팅에서 Let’s Encrypt를 이용하여 SSL 인증서를 무료로 발급받아 적용하는 방법으로 포스팅을 진행하였으며 전체적인 글의 양이 많아 어느 정도 추가하고자 하는 정보들은 외부 사이트 링크로 대체하였습니다.


Let’s Encrypt

https://letsencrypt.org/ko/

Let’s Encrypt는 무료로 SSL/TLS 인증서를 발급 및 갱신할 수 있는 글로벌 공인인증기관(Certificate Authority, CA)입니다.
또한 Let’s Encrypt는 비영리기관이며 DV(Domain Validation) 인증서만 제공하고 있습니다.

그럼 이제 Let’s Encrypt 설치 및 발급을 진행해보도록 하겠습니다.
(설치 환경은 Naver Cloud Platform의 CentOS 7 입니다.)

[root@manvscloud-web-pub-kr1 ~]# yum install certbot -y

Let’s Encrypt는 yum으로도 설치가 가능하며 snap으로 설치하는 방법도 있습니다.
이번 포스팅에서는 yum으로 간단하게 설치할 것이며 snap 설치 방법은 댓글로 남겨두도록 하겠습니다.

[root@manvscloud-web-pub-kr1 ~]# certbot certonly --manual -d *.newreka.co.kr -d newreka.co.kr --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for *.newreka.co.kr and newreka.co.kr
Performing the following challenges:
dns-01 challenge for newreka.co.kr

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.newreka.co.kr with the following value:

Q5cYPi74WnFHndsTwT9UKNp38JSdUQ2bkYTXhApHuME

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

yum으로 설치가 끝나면 certbot 명령어를 이용하여 인증서 발급이 가능합니다.
다양한 인증 방법이 존재하지만 저는 DNS 인증을 이용하여 발급했습니다.
(Apache나 Nginx를 이용한 Web 인증 방법 : certbot –nginx certonly -d manvscloud.com, certbot –apache certonly -d manvscloud.com)

위와 같이 certbot certonly –manual -d *.newreka.co.kr -d newreka.co.kr –preferred-challenges dns-01 –server https://acme-v02.api.letsencrypt.org/directory 명령어를 입력하면 DNS 인증 및 와일드카드 인증서 발급이 가능합니다.

이후 “Please deploy a DNS TXT record under the name” 아래 나오는 값을 해당 도메인의 네임서버에 아래 사진과 같이 추가해줍니다. (TXT Record 입니다.)

Naver Cloud Platform Global DNS

해당 레코드 값이 정상적으로 잘 등록되었다면 아래와 같이 정상적으로 발급될 것입니다.
정상적으로 발급되지 않는다면 해외 차단이 되어있지 않은지, 정상적으로 TXT 조회가 가능한지, 서버의 웹 포트가 차단되어있지 않은지 확인이 필요합니다.

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/newreka.co.kr/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/newreka.co.kr/privkey.pem
   Your certificate will expire on 2022-03-05. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

다음과 같이 /etc/letsencrypt/archive 경로로 이동하면 위에서 생성한 도메인에 대한 디렉토리 및 생성된 인증서를 확인할 수 있습니다.

[root@manvscloud-web-pub-kr1 archive]# cd /etc/letsencrypt/archive
[root@manvscloud-web-pub-kr1 archive]# ll
total 4
drwxr-xr-x 2 root root   83 Dec  6 03:17 newreka.co.kr
[root@manvscloud-web-pub-kr1 archive]# cd newreka.co.kr
[root@manvscloud-web-pub-kr1 newreka.co.kr]# ll
total 20
-rw-r--r-- 1 root root 1862 Dec  6 03:17 cert1.pem
-rw-r--r-- 1 root root 3749 Dec  6 03:17 chain1.pem
-rw-r--r-- 1 root root 5611 Dec  6 03:17 fullchain1.pem
-rw------- 1 root root 1704 Dec  6 03:17 privkey1.pem

2021-09-30일 이전에는 아래와 같이 DST Root CA X3 루트 인증서를 받아 추가해주는 방식을 이용했었는데 올해 9월 30일 이후부터 해당 루트 인증서는 만료되어 더 이상 Let’s Encrypt에서 사용할 수 없게 되었습니다.
(ISRG Root X1 인증서를 사용해야합니다.)

wget http://apps.identrust.com/roots/dstrootcax3.p7c
openssl pkcs7 -inform der -in dstrootcax3.p7c -out dstrootcax3.pem -print_certs
cat dstrootcax3.pem >> fullchain1.pem

그렇다면 위에 생성된 cert1.pem, chain1.pem, fullchain1.pem, privkey1.pem 파일을 이용하여 네이버 클라우드의 Certificate Manage 서비스에 인증서를 등록하면 정상적으로 등록이 되느냐?

그렇지않습니다.
그러므로 cert1.pem 인증서로 부터 루트 인증서와 중간 인증서를 생성하고 체인 인증서를 만드는 방법을 알려드릴 것입니다.

[root@manvscloud-web-pub-kr1 newreka.co.kr]# sz cert1.pem

우선 sz 명령어로 인증서 파일을 윈도우로 옮겨줍시다.
해당 명령어가 되지 않으면 yum install lrzsz 로 설치를 하거나 ftp 등 원하시는 방법으로 인증서를 이동시켜줍니다.

가져온 cert1.pem 파일을 아래와 같이 .crt 파일로 변경하여 인증서 정보를 확인합시다.

인증서 파일을 실행하여 [인증 경로]를 클릭하면 인증 경로에서 가장 최상단에 있는 ISRG Root X1가 루트 인증서입니다.
해당 루트 인증서를 클릭하고 [인증서 보기]를 클릭해줍니다.

루트 인증서에 대한 인증서 보기를 클릭한 뒤 [자세히] 부분을 클릭하면 아래와 같이 [파일에 복사] 버튼이 있어 이를 이용하여 외부로 루트 인증서를 따로 빼낼 수 있습니다.

아래 이미지만 잘 보고 따라 생성해주세요.

위 이미지를 잘 따라 오셨다면 ISRG Root X1 루트 인증서가 정상적으로 생성되었을 것입니다.

자, 이제 중간(Intermediate) 인증서를 생성할 것입니다.
인증 경로에서 두번째에 있는 인증서가 중간 인증서입니다.

방법은 위에서 했던 루트 인증서를 가져오는 방법과 동일합니다.
동일하게 아래 이미지를 그대로 따라가시면 됩니다.

위 이미지를 잘 따라오셨다면 루트 인증서와 중간 인증서가 잘 생성되어있을 것입니다.
이제 인증서들의 확장자를 .pem로 다시 변경해줍니다.

그리고 Intermediate.pem 인증서안에 CA.pem 인증서의 내용을 추가해줍니다.
리눅스 명령어로 치면 cat CA.pem >> Intermediate.pem 입니다.

chain.pem 파일을 생성하고 Intermediate.pem+CA.pem 순서대로 따로 생성하셔도 됩니다.


Certificate Manager

이제 네이버 클라우드 Certificate Manager에 위에서 생성한 인증서들을 등록해줄 것입니다.

등록할 인증서는 총 3가지 입니다.

======================
privkey1.pem
cert1.pem
chain.pem (Intermediate.pem+CA.pem)
======================

위 세 가지 인증서가 잘 준비되셨으면 아래로 넘어갑시다.

Certificate Manager

Certificate Manager에 등록할 이름을 정해주고 위에서부터 privkey1.pem, cert1.pem, chain.pem (Intermediate.pem+CA.pem) 순서대로 넣어줍니다.

Private Key = privkey1.pem
Certificate Body = cert1.pem
Certificate Chain = chain.pem (Intermediate.pem+CA.pem)

등록 후 [추가]를 클릭하면 아래 사진과 같이 정상적으로 인증서가 추가됩니다.


Applied to Load Balancer

이제 Certificate Manager에 등록한 인증서를 Load Balancer에 추가 해봅시다.

  • Target Group
    먼저 Target Group을 생성해줍니다.
    Application Load Balancer로 만들 것이기때문에 프로토콜은 HTTP로 해주겠습니다.

Target 서버는 당연히 웹 서버로 해야겠죠?

  • Load Balancer

이제 로드밸런서를 생성해줍시다.
애플리케이션 로드밸런서로 생성해주겠습니다.

443 포트를 추가하면 인증서를 선택하여 넣어줄 수 있습니다.

SSL Certificate 선택에서 Certificate Manager에 등록한 인증서를 선택해줍니다.
그리고 TLS 최소 지원 버전 및 Cipher Suite를 선택해준 뒤 [다음]으로 넘어갑니다.

위에서 생성한 Target Group 추가ㅇㅇ우위윙위에ㅇ

잘 따라오셨다면 이제 “LET’S ENCRYPT + CERTIFICATE MANAGER로 LOAD BALANCER에 인증서 적용하기”를 마스터 하셨습니다.


Personal Comments

이번 포스팅은 쓰다보니 상당히 이미지가 많아서 전체적인 글이 길어졌네요.
그래도 이렇게 이미지를 많이써야 처음 사용해보시는 분들이 쉽게 접근하실 수 있다고 생각하여 작업 하나 하나마다 스크린샷을 찍어서 이미지 업로드를 준비하고 있습니다.

“LET’S ENCRYPT + CERTIFICATE MANAGER로 LOAD BALANCER에 인증서 적용” 이제는 너무 쉽다고 느껴지지않나요?
많은 도움이 되셨길 바랍니다.

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


NCP

[NCP] 네이버 클라우드에서 서버 사용 시 기본 네트워크 대역폭이 궁금하신가요?

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

오늘은 네이버 클라우드에서 서버 사용 시 기본 네트워크 대역폭에 대해 궁금해하시는 분들이 많아 포스팅해보려 합니다.


Explanation

참고로 네트워크 대역폭에 대한 부분은 네이버 클라우드 자격증 시험 중에도 나오는 문제 중이 하나로 압니다. 아마 시험을 치르신 후 궁금해서 많이들 물어보시는 것 같네요.

결론부터 말씀드리자면 네이버 클라우드에서 생성하신 서버는 기본적으로 1G를 지원하고 있습니다.

각 서버당 QoS가 1024Mbps로 설정이 되어있죠.


TEST

서버 내에서 정말 1G를 지원하는지? 또 다운로드/업로드 속도는 어느정도 나오는지도 확인해보도록 하겠습니다.

먼저 iperf3를 이용하여 네트워크 성능 측정을 해보도록 하겠습니다.

  • Main Server
    iperf3 설치 후 -s 옵션으로 서버 모드로 실행해줍니다.
    -D 옵션을 주면 백그라운드로 실행이 가능합니다.
[root@manvscloud-bps ~]# yum install iperf3 -y
[root@manvscloud-bps ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
[root@manvscloud-bps ~]# 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:111             0.0.0.0:*               LISTEN      586/rpcbind         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      927/sshd            
tcp6       0      0 :::111                  :::*                    LISTEN      586/rpcbind         
tcp6       0      0 :::5201                 :::*                    LISTEN      1766/iperf3         
tcp6       0      0 :::22                   :::*                    LISTEN      927/sshd      

-s 옵션을 주고 서버 모드로 실행하면 서버 내에 5201 포트가 올라오게 됩니다.
만약 -p 옵션을 주어 iperf3 -s -p 5000 와 같이 사용하게 될 경우 5000번 포트로 올라옵니다.

  • Client Server
    Clinet 서버에서 동일하게 iperf3 설치 후 -c 옵션을 주고 Server 모드로 지정해둔 곳의 IP로 지정하여 실행합니다.
    iperf3 -c ‘Server Mode IP’
[root@manvscloud-web-pub-kr1 ~]# yum install iperf3 -y
[root@manvscloud-web-pub-kr1 ~]# iperf3 -c 110.165.17.203
Connecting to host 110.165.17.203, port 5201
[  4] local 10.0.11.6 port 41812 connected to 110.165.17.203 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   254 MBytes  2.13 Gbits/sec  1672    374 KBytes       
[  4]   1.00-2.00   sec   125 MBytes  1.05 Gbits/sec  302    235 KBytes       
[  4]   2.00-3.00   sec   124 MBytes  1.04 Gbits/sec  299    252 KBytes       
[  4]   3.00-4.00   sec   126 MBytes  1.06 Gbits/sec  269    226 KBytes       
[  4]   4.00-5.00   sec   124 MBytes  1.04 Gbits/sec  296    174 KBytes       
[  4]   5.00-6.00   sec   126 MBytes  1.06 Gbits/sec  247    226 KBytes       
[  4]   6.00-7.00   sec   125 MBytes  1.05 Gbits/sec  264    226 KBytes       
[  4]   7.00-8.00   sec   125 MBytes  1.05 Gbits/sec  301    226 KBytes       
[  4]   8.00-9.00   sec   124 MBytes  1.04 Gbits/sec  278    217 KBytes       
[  4]   9.00-10.00  sec   125 MBytes  1.05 Gbits/sec  259    209 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  1.35 GBytes  1.16 Gbits/sec  4187             sender
[  4]   0.00-10.00  sec  1.34 GBytes  1.15 Gbits/sec                  receiver

iperf Done.

client 측에서 위와 같이 실행할 경우 Server 쪽도 아래와 같이 체크가 됩니다.

[root@manvscloud-bps ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 101.79.9.152, port 41810
[  5] local 10.0.14.6 port 5201 connected to 101.79.9.152 port 41812
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   245 MBytes  2.06 Gbits/sec                  
[  5]   1.00-2.00   sec   126 MBytes  1.06 Gbits/sec                  
[  5]   2.00-3.00   sec   124 MBytes  1.04 Gbits/sec                  
[  5]   3.00-4.00   sec   126 MBytes  1.05 Gbits/sec                  
[  5]   4.00-5.00   sec   125 MBytes  1.05 Gbits/sec                  
[  5]   5.00-6.00   sec   125 MBytes  1.05 Gbits/sec                  
[  5]   6.00-7.00   sec   125 MBytes  1.05 Gbits/sec                  
[  5]   7.00-8.00   sec   125 MBytes  1.05 Gbits/sec                  
[  5]   8.00-9.00   sec   125 MBytes  1.05 Gbits/sec                  
[  5]   9.00-10.00  sec   125 MBytes  1.05 Gbits/sec                  
[  5]  10.00-10.04  sec  4.88 MBytes  1.09 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.04  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.04  sec  1.34 GBytes  1.15 Gbits/sec                  receiver

전체적으로 결과를 보시면 기본 Bandwidth가 약 1Gbits/sec 정도로 체크되고 있습니다.

  • iPerf3 Docs 페이지도 함께 남겨드리니 해당 툴을 조금 다양하게 사용해보시고 싶으실 경우 아래 링크를 참고 하시기 바랍니다.

추가적으로 다운로드와 업로드 속도는 어느정도 나올지 툴을 이용하여 확인해보겠습니다.

[root@manvscloud-web-pub-kr1 ~]# wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
[root@manvscloud-web-pub-kr1 ~]# chmod +x speedtest-cli

speedtest-cli를 이용하여 테스트를 진행할 것입니다.
(ubuntu 에서는 apt install python-pip 및 pip install speedtest-cli 를 이용하여 설치가 가능합니다.)

python speedtest-cli 명령어를 실행하여 다음과 같은 결과를 얻었습니다.
Host는 ゆゆっちサーバー (Ehime) 지역으로 일본 측 서버와 테스트를 진행하게 되었습니다.

다운로드 속도는 265.39 Mbit/s, 업로드 속도는 103.85 Mbit/s 정도 나오네요.

[root@manvscloud-web-pub-kr1 ~]# python speedtest-cli
Retrieving speedtest.net configuration...
Testing from Naver Business Platform Asia Pacific Pte. (101.79.9.152)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by ゆゆっちサーバー (Ehime) [681.87 km]: 65.568 ms
Testing download speed................................................................................
Download: 265.39 Mbit/s
Testing upload speed......................................................................................................
Upload: 103.85 Mbit/s

–list 옵션을 주면 선택 가능한 지역 리스트를 확인할 수도 있습니다.

[root@manvscloud-web-pub-kr1 ~]# python speedtest-cli --list
Retrieving speedtest.net configuration...
34988) China Telecom LiaoNing 5G (Shenyang, China) [538.87 km]
 7976) denpa893 (Hikari, Japan) [597.18 km]
43243) ゆゆっちサーバー (Ehime, Japan) [681.87 km]
 3805) Alyans Telekom (Vladivostok, Russia) [752.45 km]
30293) Neimeng CMCC 5G (Tongliao, China) [790.86 km]
39472) Kyomu882 | mino7r86 Lab (Neyagawa, Japan) [837.08 km]
42842) Mamireimu Net Work's (Nara, Japan) [852.93 km]
35722) China Telecom TianJin (TianJin, China) [867.69 km]
34115) China Telecom TianJin-5G (TianJin, China) [867.70 km]
26850) China Mobile 5G (Wuxi, China) [899.82 km]

아래 사이트에서는 위에서 확인되지 않는 다수의 리스트를 추가적으로 확인 할 수 있으니 참고 부탁드립니다.

“34988) China Telecom LiaoNing 5G (Shenyang, China) [538.87 km]” 차이나 텔레콤 LiaoNing 5G 으로 테스트를 진행하려면 –server 34988 를 주어 테스트가 가능합니다.

여긴 생각보다 업로드 속도가 많이 떨어지네요.

[root@manvscloud-web-pub-kr1 ~]# python speedtest-cli --server 34988
Retrieving speedtest.net configuration...
Testing from Naver Business Platform Asia Pacific Pte. (101.79.9.152)...
Retrieving speedtest.net server list...
Retrieving information for the selected server...
Hosted by China Telecom LiaoNing 5G (Shenyang) [538.87 km]: 133.235 ms
Testing download speed................................................................................
Download: 129.01 Mbit/s
Testing upload speed................................................................................................
Upload: 2.65 Mbit/s

참고로 같은 한국에서는 Upload가 400Mbit/s이 되더군요.


Personal Comments

오늘은 네이버 클라우드 플랫폼에서 생성한 서버의 기본 네트워크 대역폭에 대해서 알아보며 추가적으로 재밌는 툴을 이용해 추가적인 속도 테스트까지 함께 진행해보았습니다.

다음 포스팅도 궁금증을 해결해드릴 수 있는 글과 더욱 재밌는 테스트로 찾아뵙겠습니다.

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


NCP

[NCP] 네이버 클라우드 자격증 신청 및 응시 이력 확인

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

오늘은 네이버 클라우드에서 기술 자격증을 신청하는 방법과 응시 이력을 확인하는 방법에 대해 포스팅하고자 합니다.

2021-09-16 일자로 교육 포털 페이지가 업데이트 되면서 기술자격증 메뉴가 교육 포털 페이지로 이관됐습니다.
물론 저는 네이버 클라우드 홈페이지를 켜두고 살아서… 이 소식을 빠르게 접했었지만 회사 동료 및 동종업계 후배 등 기술자격증을 신청하는 페이지가 사라졌다며 물어보는 분들이 생겼습니다.

포스팅을 따로 해야겠다고 생각했을 때 마침 IT 자격증 오픈채팅방에서도 물어보시는 분이 계셔서 빠르게 포스팅을 준비하였으니 참고하시어 자격증 신청 및 응시 이력을 확인하시는데에 큰 어려움 없으시기 바랍니다.


기술 자격증 신청 및 응시 이력 확인

ncloud.com 홈페이지에서 접속하실 경우 [고객지원·FAQ] 에서 [교육 포털]로 접속해주셔야 합니다. 교육 포털 페이지로 바로 접속할 수 있는 링크는 아래에 남겨두었습니다.

해당 페이지에서 로그인을 하신 후 상단 카테고리 중 [기술자격증]을 클릭하시면 기술 자격증별 등급 안내 및 시험 안내 및 등록을 할 수 있습니다.

또한 상단 카테고리 중에 [마이페이지]라고 있는데 마이페이지기술자격증 응시이력을 클릭해보면 이곳에서도 기술자격증 시험접수를 할 수 있습니다.

“응시 이력 및 레벨 결과”에서는 응시 이력과 자격증 보기, 자격증 로고 다운로드가 가능하며 파트너사의 경우 파트너 코드 연동 기능도 생겼습니다.

“기술자격증 시험접수” 에서도 기술 자격증 시험을 접수할 수 있습니다.
저는 이제 Expert 난이도에 도전해야하는데 Expert는 코로나가 끝나고 오프라인으로 진행될거라.. 그저 기다리고만 있는 상태입니다?

마지막으로 “접수 이력 및 변경” 입니다.
여기서 접수 이력도 볼 수 있지만 기술 자격증 신청 이후 일정을 변경해야하거나 응시를 취소해야할 경우 이 페이지에서 진행할 수 있습니다.


Personal Comments

그외에도 현재 교육 포털 페이지가 따로 분리되며 깔끔하게 정리된 부분도 많이 생겼습니다.
가장 마음에 드는 부분은 캘린더로 교육 현황을 확인하고 교육을 신청할 수 있는 부분이었습니다.

앞으로 캘린더를 참고하여 쉽게 교육을 확인하고 신청하게 될 것같습니다.

그리고 아직 교육 포털 페이지에 있는 온라인 교육의 존재를 모르신다면 놓치지않으셨으면 합니다! 주제별로 교육 과정이 다양하고 상당히 좋은 내용들이 많이 있어 제가 좋아하는 카테고리 중에 하나입니다.

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


NCP

[NCP] 삶의 질을 높여주는 Image Optimizer를 이용한 이미지 리사이징

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

오늘은 Image Optimizer에 대한 포스팅을 해보았습니다.
Image Optimizer에 대한 글은 이미 네이버 클라우드 플랫폼에서도 많은 글과 영상으로 만들어두어 접근하기 쉬운 상태입니다.

제가 직접 Image Optimizer를 사용해본 소감에 대해 써보았으니 사용 전에 어떻게 사용하면 좋을지 참고하실 때 도움되리라 생각됩니다.


왜 Naver Cloud Platform의 IMAGE OPTIMIZER인가?

  • 쉬운 사용법
    (크기, 워터마크, 필터 등 UI를 통해 원하는 효과를 체크하고 수치만 입력하면 됩니다.)
    ([예시 보기]가 있어 예시를 통해 쉽게 사용할 수 있습니다.)
  • 미리 보기 제공
    (미리 보기를 제공하여 조금 더 간편함을 느낄 수 있었습니다.)
  • 콘솔에서 효과 추가
    (콘솔에서 원하는 효과만 선택하여 넣는 방식입니다.)

타 클라우드를 이용한 이미지 리사이징 경험

우선 이미지 리사이징에 대한 경험은 크게 네이버 클라우드 플랫폼과 AWS 에서 사용해보았습니다. AWS에서는 이미지 자동 리사이징을 진행해보았으며 Azure 역시 Azure Event Grid를 이용하여 이미지 리사이징이 가능한 것을 금방 찾을 수 있었습니다.

개발자가 아닌 입장에서 코드 개발 부분이 정말 막막했었습니다.

물론 이미지 자동 리사이징을 이용하여 이미지 사이즈가 고정적이지 않을 경우 개발적인 부분이 사용될 수 밖에 없겠지만 이미지 사이즈가 고정적으로 정해져있는 상태에서 빠르게 추가하는 방식으로 사용할 수는 없을까라는 생각을 하게되었습니다.

네이버 클라우드에서 Image Optimizer 서비스를 이용하면 가능합니다.
물론 자동 리사이징의 경우 동일하게 개발적인 요소가 사용되겠지만 Image Optimizer를 이용한다면 고정적인 사이즈에 대해서 리사이징은 충분히 쉽게 가능하겠다라고 생각했습니다.


Image Optimizer를 이용한 이미지 리사이징

? Object Storage

우선 Object Storage를 생성해주어야합니다.
Object Storage에 이미지를 업로드 하고 Image Optimizer를 이용하여 해당 이미지에 여러 효과를 줘보도록 하겠습니다.

버킷 이름은 고유합니다.
원하시는 고유한 버킷 이름을 정해주도록 합시다.
파일에 대한 공개 여부를 설정하는 곳입니다.
생성한 Bucket에 이미지를 리사이징 할 이미지를 업로드 해줍시다.

image 라는 폴더를 하나 생성한 후 image 폴더 안에 이미지를 업로드 했고
해당 폴더를 공개하여 외부에서 접근할 수 있도록 해주었습니다.


? Image Optimizer

이제 Image Optimizer를 생성해줄 차례입니다.

Image Optimizer 프로젝트를 생성해주고 프로젝트 이름을 입력한 뒤
원본 이미지 저장소는 위에서 만들어준 Object Storage를 선택해줍시다.

서비스 프로토콜과 서비스 도메인을 정해주어야합니다.

“고객 보유 도메인”을 선택할 경우 당연히 DNS와 연결도 해주어야합니다.
그리고 HTTP로 하니까 계속 오류가 발생해서 HTTPS로 설정해주었습니다.
HTTP로 설정하니까 CDN 도메인 접속 시 이미지를 정상적으로 불러오지 못해서 이런저런 테스트를 해봤는데 HTTPS에서만 정상 접근이 가능하다는 걸 알게됐습니다.
(음?.. HTTP는 왜 있는거지..? 내가 설정을 잘못한 부분이 있는건가..?)

위 이미지 처럼 다음 및 생성을 해주고 최종 설정은 다음과 같이 설정했습니다.
HTTP에서 이미지를 정상적으로 못불러와서 ALL로 설정하고 HTTPS에서 정상 이미지 출력이 확인되었습니다.

자, 그럼 이제 쿼리스트링을 만들어 봅시다.

크기, 워터마크, 필터 별로 원하는 쿼리스트링을 만들 수 있습니다.
리사이즈를 해주고 가로,세로 길이 변경 및 품질을 변경해줬으며 흑백으로 출력되도록 해줬습니다.
이게 참 마음에 들었던 게 이대로 클릭하고 수치만 입력했는데 쿼리스트링이 자동으로 만들어져서 자동 입력된다는게 좋았습니다.
쿼리스트링 입력 후 생성된 부분에 대해 변환 이미지 미리보기를 실행할 수 있습니다.
미리보기 결과입니다. 멋지지않나요?

미리 보기와 같이 이미지가 실제로 잘 반영되었을지 URL로 접속하여 결과를 보도록하겠습니다.


Result

제가 원하는대로 이미지가 잘 변환되었습니다.
잘 출력됐네요.

하지만 Image Optimizer에 등록되지 않은 쿼리스트링을 사용할 경우 404 Error가 발생하게됩니다.

쿼리스트링을 수동으로 입력하지 않고 자동으로 이미지를 변환하기 위해서는 Cloud Functions을 사용해야할 것으로 보입니다.


Personal Comments

Image Optimizer에 대한 포스팅을 8월부터 준비중이었으나 8월 말에 네이버 클라우드 플랫폼 공식 블로그에서 Image Optimizer에 대한 포스팅이 먼저 올라왔습니다.

아래 포스팅에서 이미 기능적인 설명이 다 적혀져있어서 오늘 포스팅은 기능적인 부분은 제외하고 AWS에서 이렇게 사용해봤는데 이런 경우엔 네이버 클라우드의 Image Optimizer가 좋은 것같다라는 경험을 이야기 해보고싶었습니다.

아래 네이버 클라우드 플랫폼 공식 블로그에 포스팅된 Image Optimizer에 대한 글도 참고하면 훨씬 사용에 도움될 것입니다.


IT/Linux/Kubernetes

[AKOS] Amazon EKS Study 시작

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

오늘부터 CloudNet@에서 진행하는 AKOS(AWS Kubernetes Online Study)가 시작되었습니다. 2020년도는 Linuxer님, 2021년도는 가시다(Gasida)님과 함께하고 있습니다.

Kubernetes 스터디도 함께 했고 현재는 AWS의 EKS를 공부하고 있으며
Naver Cloud Platform의 NKS는 아마 따로 공부하게 될 것같습니다.


AWS Kubernetes Online Study

이전에 했던 DKOS(Docker Kubernetes Online Study)에 이어 AKOS(AWS Kubernetes Online Study)는 이제 배웠던 Kubernetes 과정을 이해한 뒤 AWS에서의 Kubernetes를 배워보는 시간이었습니다.

클러스터 구축
파드 생성 및 확인
RDS DB 확인

개인적으로 저는 이미 클라우드 환경에서는 AWS보다 Naver Cloud Platform을 이용해 Kubernetes를 먼저 사용해보았기 때문에 NKS가 조금 더 편하게 느껴졌습니다.

사용하기 편하고 쉬운건 Naver Cloud Platform의 NKS고 활용할 수 있는 범위는 넓은데 난이도가 높은 건 AWS의 EKS라고 해야하나? 개인적으로 그렇게 느껴졌습니다.

네이버 클라우드 플랫폼에서는 기본적으로 서비스를 만들 때 사용자가 편하게 사용할 수 있도록 배려하는 부분이 많다보니 아직 기능적인 부분에서는 다소 추가되어야할 부분이 있으나 추가된 이후가 기대되기는 합니다.


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] 안녕하세요. 네이버 클라우드 Support Master 입니다.

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

오늘 네이버 클라우드 플랫폼(Naver Cloud Platform) 공식 블로그에서 9인의 Master 멤버가 공개되었습니다.

다소 부족한 점이 많으나 공식 테크 앰버서더, 즉 Master 멤버의 기회가 주어져 Support Master로서 여러분들에게 큰 도움을 드릴 수 있게되었습니다.


Support Master

Support Master로서 저는 많은 네이버 클라우드 사용자 또는 사용하시고자 하는 분들을 Supporting을 하고자 Support Master가 되었습니다.

클라우드를 배워보고자하는 학생분들이나 온프레미스 환경에서 서비스를 운영하시다가 클라우드 환경으로 서비스를 이전하고자 하는 분 등 다양한 유저들에게 제가 알고 있는 지식을 공유하여 조금 더 네이버 클라우드를 쉽게 접하고 원활한 서비스를 운영하실 수 있도록 하는 것이 저의 목적입니다.

우선 네이버 클라우드에 대한 주제로 정기적인 블로그 포스팅이 있을 것이며 추가적인 도움을 드릴 수 있을 만한 자료를 준비하고 있습니다.

이 부분은 제 블로그를 통해 추가 공지될 예정입니다.


Naver Cloud Platform

네이버 클라우드에 대해 궁금하신 부분이 있으실 경우 댓글 남겨주시면 답변 도와드리도록 하겠습니다.

또한 이런 기회를 얻을 수 있도록 클라우드에 처음 흥미를 주신 서태호(Network Master)님과 기술 성장에 늘 도움주신 Linuxer님에게 늘 감사드리며 Master 활동 준비 및 지원해주시는 네이버 클라우드 플랫폼(Naver Cloud Platform)에 감사의 인사 올립니다.


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

[NCP] Naver CLoud에서 Kubernetes를 사용해보자 – NKS

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

DKOS(Docker Kubernetes Online Study) 2주차 과정을 마쳤습니다.

가상 머신, 물리 서버, AWS, Azure 환경에서 k8s 클러스터를 배포하는 것을 스터디하였지만 Naver Cloud Platform에서 k8s 클러스터를 배포하는 방법은 따로 스터디 하지 않아 이에 대해 공유하고자 오늘은 네이버 클라우드에서 k8s 클러스터 배포와 사용에 대해 알아보도록 하겠습니다.


Classic

우선 Classic 환경에서는 현재 Kubernetes Service 사용이 불가능합니다.

2021년 03월 04일까지만 사용할 수 있었고 현재는 사용 불가능하므로 저는 VPC 환경에서 Kubernetes Service 사용법에 대해 써보도록 하겠습니다.


VPC – VPC & Subnet 생성

우선 Naver Cloud Platform에서 VPC 환경을 사용하시려면 VPC 생성하여 서브넷 구성을 해주셔야합니다. 기존 AWS나 Azure와 같은 퍼블릭 클라우드 사용 경험이 많으시다면 이를 구성하는데에 큰 어려움이 없으실 것이라 생각합니다.

저는 위 이미지와 같이 생성해주었습니다.
오늘 포스팅에서는 LB까지는 사용하지 않지만 Naver Cloud 에서 k8s 클러스터 배포 시 가장 기본이 되는 서브넷 구성이라고 볼 수 있겠습니다.


VPC – Server

우선 서버를 생성해줍니다.
해당 서버 내에서 이후 생성할 각 클러스터들을 컨트롤 해줄 것입니다.

OS는 CentOS나 Ubuntu 아무것이나 괜찮습니다.

해당 서버의 패스워드 확인 후 서버로 접속해줍니다.
이후 아래 명령어를 이용하여 kubectl과 docker를 설치해줍시다.

[root@kubernetes-server-kr2 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

가끔 gpgkey 부분을 엔터쳐서 다음 줄로 내려버리시는 경우가 있는데 정상 설치가 안되니 아래 이미지와 같이 되게 해주세요.

/etc/yum.repos.d/kubernetes.repo
[root@kubernetes-server-kr2 ~]# yum install -y kubectl

//yum-utils device-mapper-persistent-data lvm2는 이미 설치가 되어있어서 따로 설치해줄 필요가 없었습니다.

[root@kubernetes-server-kr2 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@kubernetes-server-kr2 ~]# yum install -y docker-ce
[root@kubernetes-server-kr2 ~]# systemctl enable --now docker

VPC – NKS Cluster

이제 Kubernetes Service를 생성해줄 것입니다.

NKS 클러스터는 현재 1.17과 1.18 버전을 지원하고 있습니다.
또한 Pod Security Policy, Audit Log는 클러스터 생성 후에도 수정할 수 있으니 이후에 설정하셔도 됩니다.

생성 중에 NAT Gateway를 생성하라는 메시지가 발생합니다.
이는 왜 NAT Gateway를 생성해야하는지에 대해 아래 내용에서 보여드리기위해 따로 NAT Gateway를 먼저 설정해두지 않았습니다.

일단 넘어갑시다.

원하시는 서버 스펙과 노드 수를 정해준 뒤 추가해주면 클러스터가 생성됩니다.
해당 클러스터 생성에는 다소 시간이 소요됩니다.


VPC – Practice

이제 생성한 Server와 각 k8s 클러스터들을 이용하여 실습을 해보도록 하겠습니다.
우선 Server에서 생성한 k8s 클러스터를 컨트롤하기 위해서는 kubernetes service에서 생성한 클러스터들을 설정파일을 다운로드 해야합니다.

위 이미지와 같이 해당 설정파일을 다운로드 한 뒤에 Server로 넣어줍시다.
간단하게 마우스 이동으로 파일을 옮기시려면 lrzsz 를 설치하여 PC와 서버 간에 간단하게 파일을 업로드, 다운로드를 하실 수 있습니다.

yum install lrzsz

설정파일이 Server에 있는데 이는 아래와 같이 사용할 수 있습니다.

kubectl –kubeconfig=/root/kubeconfig-d1f34144-76a5-46fa-a55c-7186946b8acc.yaml get nodes

원래 kubectl get nodes인데 config 파일을 이용하여 클러스터 접근 구성을 하게 되는 것입니다.
하지만 매번 명령어 입력마다 이렇게 사용할 수는 없으니 alias 설정을 해준다면 더욱 편리하게 사용할 수 있습니다.

[root@kubernetes-server-kr2 ~]# ll
total 8
-rw-r--r-- 1 root root 5538 Jun 17 02:19 kubeconfig-d1f34144-76a5-46fa-a55c-7186946b8acc.yaml


[root@kubernetes-server-kr2 ~]# kubectl --kubeconfig=/root/kubeconfig-d1f34144-76a5-46fa-a55c-7186946b8acc.yaml get nodes
NAME                  STATUS   ROLES    AGE     VERSION
nks-pool-1003-w-eoi   Ready    <none>   9m23s   v1.18.17
nks-pool-1003-w-eoj   Ready    <none>   9m22s   v1.18.17

[root@kubernetes-server-kr2 ~]# cat << EOF >> .bash_profile 
> alias kubectl='kubectl --kubeconfig="/root/kubeconfig-d1f34144-76a5-46fa-a55c-7186946b8acc.yaml"'
> EOF
[root@kubernetes-server-kr2 ~]# source .bash_profile
https://hub.docker.com/

위 이미지는 docker hub입니다.
이전에 업로드 해둔 manvscloud_dkos 파일을 배포해보겠습니다.

[root@kubernetes-server-kr2 ~]# kubectl run manvscloud --image seevirus/manvscloud_dkos:1
pod/manvscloud created
[root@kubernetes-server-kr2 ~]# kubectl get pod
NAME         READY   STATUS              RESTARTS   AGE
manvscloud   0/1     ContainerCreating   0          13s
[root@kubernetes-server-kr2 ~]# kubectl get pod
NAME         READY   STATUS         RESTARTS   AGE
manvscloud   0/1     ErrImagePull   0          22s

ErrImagePull 메시지가 발생했습니다.
왜 도커 이미지를 Pull 해오지 못한걸까요?

원인은 바로 위에서 NAT Gateway를 설정해주지 않았기때문입니다.
위에서 클러스터 생성 시 “아웃바운드 인터넷 트래픽을 활성화하기 위해서는
NAT Gateway를 반드시 생성해야한다”
라고 알려주는 메시지는 바로 NAT Gateway 설정을 해주지 않게되면 아웃바운드 인터넷 트래픽 통신이 전혀 되지 않기때문이죠.

바로 NAT Gateway를 생성해줍시다.
생성한 NAT Gateway는 Private Route Table에 연결해주어야합니다.

위 이미지와 같이 NAT Gateway를 연결해주고 다시 Server로 돌아와서 확인해보도록 합시다.

[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   30m
[root@kubernetes-server-kr2 ~]# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE                  NOMINATED NODE   READINESS GATES
manvscloud   1/1     Running   0          17m   198.18.0.169   nks-pool-1003-w-eoj   <none>           <none>

ErrImagePull이었던 상태가 Running 상태로 변경되어있습니다.
정상적으로 배포가 되었군요.

[root@kubernetes-server-kr2 ~]# kubectl get all --all-namespaces
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE
default       pod/manvscloud                         1/1     Running   0          17m
kube-system   pod/cilium-jv5gz                       1/1     Running   0          30m
kube-system   pod/cilium-monitor-jp82w               1/1     Running   0          27m
kube-system   pod/cilium-monitor-nbvgm               1/1     Running   0          27m
kube-system   pod/cilium-operator-78f6b5db7c-77gqn   1/1     Running   0          30m
kube-system   pod/cilium-operator-78f6b5db7c-pjthh   1/1     Running   0          30m
kube-system   pod/cilium-z6gbh                       1/1     Running   0          30m
kube-system   pod/coredns-7895d49695-7cjhm           1/1     Running   0          29m
kube-system   pod/coredns-7895d49695-csj5w           1/1     Running   0          29m
kube-system   pod/csi-nks-controller-0               6/6     Running   1          28m
kube-system   pod/csi-nks-node-jtg5t                 3/3     Running   1          28m
kube-system   pod/csi-nks-node-w2cjd                 3/3     Running   1          28m
kube-system   pod/dns-autoscaler-56bf5c7f58-cz2jr    1/1     Running   0          29m
kube-system   pod/kube-proxy-6xmdd                   1/1     Running   0          30m
kube-system   pod/kube-proxy-qq27q                   1/1     Running   0          30m
kube-system   pod/ncloud-kubernetes-f5lxr            1/1     Running   0          49s
kube-system   pod/ncloud-kubernetes-kgt9p            1/1     Running   0          49s
kube-system   pod/nodelocaldns-mkzqz                 1/1     Running   0          29m
kube-system   pod/nodelocaldns-mvc7f                 1/1     Running   0          29m
kube-system   pod/snapshot-controller-0              1/1     Running   0          28m
kube-system   pod/startup-script-jtknz               1/1     Running   0          27m
kube-system   pod/startup-script-zlg28               1/1     Running   0          27m

NAMESPACE     NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes       ClusterIP   198.19.128.1     <none>        443/TCP                  31m
kube-system   service/coredns          ClusterIP   198.19.128.3     <none>        53/UDP,53/TCP,9153/TCP   29m
kube-system   service/metrics-server   ClusterIP   198.19.128.124   <none>        443/TCP                  28m

NAMESPACE     NAME                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/cilium              2         2         2       2            2           <none>                   30m
kube-system   daemonset.apps/cilium-monitor      2         2         2       2            2           <none>                   27m
kube-system   daemonset.apps/csi-nks-node        2         2         2       2            2           <none>                   28m
kube-system   daemonset.apps/kube-proxy          2         2         2       2            2           kubernetes.io/os=linux   31m
kube-system   daemonset.apps/ncloud-kubernetes   2         2         2       2            2           <none>                   27m
kube-system   daemonset.apps/nodelocaldns        2         2         2       2            2           <none>                   29m
kube-system   daemonset.apps/startup-script      2         2         2       2            2           <none>                   27m

NAMESPACE     NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/cilium-operator   2/2     2            2           30m
kube-system   deployment.apps/coredns           2/2     2            2           29m
kube-system   deployment.apps/dns-autoscaler    1/1     1            1           29m

NAMESPACE     NAME                                         DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/cilium-operator-78f6b5db7c   2         2         2       30m
kube-system   replicaset.apps/coredns-7895d49695           2         2         2       29m
kube-system   replicaset.apps/dns-autoscaler-56bf5c7f58    1         1         1       29m

NAMESPACE     NAME                                   READY   AGE
kube-system   statefulset.apps/csi-nks-controller    1/1     28m
kube-system   statefulset.apps/snapshot-controller   1/1     28m

오늘은 NKS 생성과 사용법에 대해 간단하게 알아보았습니다.

NKS를 잘 사용하기 위해서는 Container Registry를 이용해서 컨테이너 이미지를 관리한다거나 Cloud Insight 서비스를 신청해서 모니터링 하기 등이 있습니다.

이는 DKOS 스터디가 진행하며 조금씩 제 블로그에 포스팅할 예정입니다.


Personal Comments

오늘은 네이버 클라우드에서 쿠버네티스 배포에 대해서만 간단하게 포스팅해보았습니다.

쿠버네티스 서비스를 사용하시기 전 VPC에 익숙하지 않으시다면 네이버 클라우드에서 교육하고 있는 Hands-on Lab을 신청하여 들어보시는 것을 권장드립니다.

네이버 클라우드는 한국어로 된 교육과 서비스로 쉽게 배우고 사용할 수 있다는 점이 큰 장점이라고 생각합니다.

추가로 요즘 회사와 주말 일정으로 포스팅되는 날짜가 일정하진 않지만 한 주에 최소 포스팅 2개를 목표로 꾸준히 작성중이니 참고 부탁드립니다.

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

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 조회 시 국가코드가 어느 나라인지 확인할 수 있는 국가 코드 조회 사이트도 참고하시면 좋을듯합니다.

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