대상 그룹 생성 및 관리
대상 그룹을 생성하고, 목록 조회, 정보 변경, 리스너(Listener) 연결 설정 등 대상 그룹을 관리하는 방법은 다음과 같습니다.
대상 그룹 생성
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
우측 상단의 [대상 그룹 생성] 버튼을 클릭합니다.
-
1단계: 대상 그룹 구성 화면에서 설정값을 입력 후 [다음] 버튼을 클릭합니다.
대상 그룹 생성 1단계
구분 항목 설명 로드 밸런서 가용 영역 프로젝트에서 이용 가능한 가용 영역 중에서 선택 로드 밸런서 선택한 가용 영역의 모든 로드 밸런서 목록 제공 리스너 선택한 로드 밸런서의 모든 리스너 목록 및 ‘리스너를 선택하지 않음’ 항목 제공 기본 정보 대상 그룹 이름 대상 그룹의 이름 프로토콜 리스너 프로토콜에 따른 선택 가능한 대상 그룹 프로토콜
- TCP 리스너:HTTP
,TCP
- UDP 리스너:UDP
알고리즘 라운드 로빈(Round Robin), 최소 연결(Least Connections), 소스 IP(Source IP Hash) 중 선택
-라운드 로빈
: 대상 그룹 내의 대상에 순차적으로 트래픽을 분산
-최소 연결
: 연결 수가 적은 대상에 우선적으로 트래픽을 분산
-소스 IP
: 동일한 IP 헤더를 사용하는 클라이언트는 반드시 동일한 대상에게 트래픽을 전송고정 세션(Sticky Session) 리스너 x 대상 그룹 조합이 다음 경우일 때만 사용/미사용 설정 가능(TLS 리스너는 지원되지 않음)
-TCP x TCP
,UDP x UDP
- 그 외: '미사용' 고정(비활성)고정 세션 유형 리스너 x 대상 그룹 조합이 다음 경우일 때 선택 가능한 유형
-TCP x TCP
: 소스 IP
-UDP x UDP
: 소스 IP고정 기간(Stickiness duration) 고정 세션(HTTP 쿠키, App 쿠키) 사용 시에만 활성화
- 1~604800 사이 정수(기본값: HTTP 쿠키인 경우 3,600 초, 그 외 360초)쿠키 이름 고정 세션(App 쿠키) 사용 시에만 활성화
- App 쿠키는 사용자의 애플리케이션에서 사용하는 쿠키 이름이 입력되어야 함
- 사용 가능 문자: 영문 대소문자/숫자/일부 특수문자(!
#
$
%
^
&
_
*
+
~
-
)
- 사용 가능 글자수: 1-255자상태 확인 상태 확인 사용 여부 설정 유형 대상 그룹의 프로토콜에 따라 선택 가능한 유형
- HTTP 대상 그룹:HTTP
,PING
- TCP 대상 그룹:PING
,TCP
- UDP 대상 그룹:TCP
,HTTP
HTTP 메서드 - 상태 확인 유형으로 HTTP
선택 시에만 설정
-CONNECT
,DELETE
,GET
,HEAD
,OPTIONS
,PATCH
,POST
,PUT
,TRACE
중 선택HTTP 버전 - 상태 확인 유형으로 HTTP
선택 시에만 설정
- 1 또는 1.1 중 선택HTTP 상태 코드 - 상태 확인 유형으로 HTTP
선택 시에만 설정
- 단일 코드, 쉼표로 구분된 복수 코드, 하이픈(-
)으로 지정한 코드 범위 입력체크 경로 URL 형식으로 입력 체크 주기 1 이상 3600 이하 정수(기본값: 30초). 타임아웃보다 큰 값으로만 설정 가능 타임아웃 1 이상 900 이하 정수(기본값: 5초). 체크 주기보다 작은 값으로만 설정 가능 상태 전환 기준(성공) 1~10 정수(기본값: 5회) 상태 전환 기준(실패) 1~10 정수(기본값: 2회) 정보알고리즘이
소스 IP
일 경우 한 소스로부터 전송된 트래픽을 특정한 대상으로만 전달합니다. 따라서 별도의 고정 세션 설정을 필요로 하지 않아 해당 기능이 비활성화됩니다. 고정 세션 설정은 유지 시간을 지정하게 되므로, 고정 세션을 계속 유지하길 원하실 경우소스 IP
사용을 권장합니다. -
2단계: 대상 추가 화면에서는 1단계에서 선택한 로드 밸런서와 동일한 가용 영역과 Virtual Private Cloud(VPC)에 있는 리소스를 대상으로 추가할 수 있습니다.
-
대상으로 추가할 인스턴스를 선택하고 포트 번호를 입력합니다.
-
[대상 추가] 버튼을 클릭합니다.
- 추가한 대상 > 대상 필터: IP, 포트, 인스턴스 이름, 인스턴스 ID, 상태
DSRNLB는 연결된 리스너의 프로토콜 및 대상 그룹의 대상 포트 번호가 동일해야 하며, 이미 다른 리스너에 연결된 대상 그룹은 다른 리스너에 연결될 수 없습니다. 또한, 하나의 대상 그룹에 속한 대상 인스턴스는 모두 동일한 포트 번호가 설정되어 있어야 합니다.
-
대상 추가가 완료되면 [다음] 버튼을 클릭합니다.
-
3단계: 검토 화면에서 설정한 정보를 확인하고 [생성] 버튼을 클릭합니다.
대상 그룹 생성 후 대상의 보안 그룹 설정이 필요합니다.
대상 그룹 상세 > 대상 탭에서 상태 확인 IP 주소를 확인하고, 해당 IP 주소를 대상의 보안 그룹 인바운드 규칙에 추가하시기 바랍니다.
대상 그룹 관리
대상 그룹 상세 화면에서 기존 대상 그룹을 수정 또는 삭제하거나 신규 대상을 추가할 수 있습니다.
대상 그룹 목록 조회
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
대상 그룹 목록을 확인합니다. 필요시, 필터를 통해 원하는 대상 그룹을 쉽게 검색할 수 있습니다.
구분 설명 대상 그룹 이름 생성 시 입력한 이름과 생성 시 부여된 ID 표시 프로비저닝 상태 대상 그룹이 정상적으로 생성되었는지 또는 수정이나 삭제가 진행 중인지에 대한 정보 운영 상태 생성된 대상 그룹이 사용 가능한 상태인지에 대한 정보 프로토콜 대상으로 트래픽을 라우팅하는데 사용되는 프로토콜 로드 밸런서 대상 그룹이 연결된 로드 밸런서 이름 및 ID VPC 로드 밸런서가 포함된 VPC 이름 및 ID 더 보기 아이콘 이름 변경, 리스너 연결 설정, 알고리즘 설정, 대상 설정, 트래픽 가중치 설정, 상태 확인 설정, 고정 세션 설정, 삭제 기능 제공
대상 그룹 상세 조회
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
상세 정보를 조회하려는 대상 그룹을 선택합니다.
-
상세 화면의 각 탭에서 세부 정보, 대상, 상태 확인, 속성 정보를 확인할 수 있습니다.
대상 그룹 상세
구분 설명 세부 정보 대상 그룹의 세부 정보 조회 대상 추가한 대상의 목록을 확인하고 대상의 상세 정보 조회 상태 확인 상태 확인 설정 정보 조회 속성 대상 그룹의 속성 조회
대상 그룹 이름 변경
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
이름을 변경할 대상 그룹의 [더 보기] 아이콘을 선택합니다.
-
더 보기에서 대상 그룹 이름 변경을 선택합니다.
-
대상 그룹 이름 변경 팝업창에서 이름을 변경하고, [변경] 버튼을 클릭합니다.
대상 그룹 삭제
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
삭제할 대상 그룹의 [더 보기] 아이콘을 선택합니다.
-
더 보기에서 대상 그룹 삭제를 선택합니다.
-
대상 그룹 삭제 팝업창에서 삭제 확인 문구를 입력 후, [삭제] 버튼을 클릭합니다.
리스너 연결 설정
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
연결 설정을 변경할 대상 그룹의 [더 보기] 아이콘을 선택합니다.
-
더 보기에서 리스너 연결 설정을 선택합니다.
-
리스너 연결 설정 팝업창에서 리스너 연결 설정을 변경 후, [적용] 버튼을 클릭합니다.
- 리스너 연결 설정 시: 아직 연결되지 않았을 경우, 연결할 목록에서 하나의 리스너를 선택하여 연결할 수 있습니다.
- 리스너를 연결하지 않음 설정 시: 리스너와의 연결을 해제합니다.
대상 그룹 - 리스너 연결 설정
DSRNLB의 대상 그룹은 하나의 DSRNLB에 생성된 단일 리스너에 연결할 수 있습니다.
알고리즘 설정
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
연결 설정을 변경할 대상 그룹의 [더 보기] 아이콘을 선택합니다.
-
더 보기 메뉴에서 [알고리즘 설정]을 선택합니다.
-
알고리즘 설정 팝업창에서 알고리즘을 변경 후, [적용] 버튼을 클릭합니다.
대상 설정
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
대상 설정을 변경하려는 대상 그룹을 클릭합니다.
-
상세 화면에서 대상 탭을 클릭 후, [대상 설정] 버튼을 클릭합니다.
-
대상 설정 팝업창에서 등록된 대상을 확인하고, 대상을 삭제하거나 추가 후 [적용] 버튼을 클릭합니다.
- 대상 수정 중 초기 상태로 되돌리려면 추가한 대상 목록 상단의 [되돌리기] 버튼을 클릭합니다.
주의- 하나의 대상 그룹에 설정된 대상은 모두 동일한 포트 번호로 설정되어야 합니다.
- DSRNLB 사용 시 로드 밸런서와 대상 인스턴스는 동일한 서브넷에 존재해야 합니다.
트래픽 가중치 설정
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
트래픽 가중치 설정을 변경하려는 대상 그룹을 선택합니다.
-
상세 화면에서 대상 탭을 클릭 후, [트래픽 가중치 설정] 버튼을 클릭합니다.
-
트래픽 가중치 설정 팝업창에서 가중치를 변경 후, [설정] 버튼을 클릭합니다.
- 트래픽 가중치는
0
이상256
이하의 정수 형태로 입력할 수 있습니다. - 가중치는 아래와 같은 수식으로 계산되어 가중치 환산값으로 변환됩니다.
- 가중치 환산 : (가중치/256)*100 (소수점 첫째 자리 올림)
- 비율 : 가중치 환산 / 가중치 환산의 총합
- 트래픽 가중치는
상태 확인 설정
DSRNLB
의 경우 상태 확인을 정상적으로 수행하기 위해서는 대상 인스턴스 설정이 필요합니다.
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
상태 확인 설정을 변경하려는 대상 그룹을 선택합니다.
-
상세 화면에서 상태 확인 탭을 클릭 후, [상태 확인 설정] 버튼을 클릭합니다.
-
상태 확인 설정 팝업창에서 상태 확인 사용 여부를 변경하거나 설정값을 변경합니다.
대상 그룹 상태 확인 설정
구분 설명 대상 그룹 현재 대상 그룹 이름 프로토콜 대상 그룹의 프로토콜에 따라 선택 가능한 유형
- HTTP 대상 그룹:HTTP
,PING
- TCP 대상 그룹:PING
,TCP
- UDP 대상 그룹:TCP
,HTTP
상태 확인 사용 여부 유형: 상태 확인 유형
-PING
: 대상에 패킷을 전송하고 대상이 보낸 응답을 확인(ICMP Ping)
-HTTP
: 설정한 경로로 패킷을 전송하고 응답을 확인
-HTTPS
: 인증서를 사용하는 대상을 대상으로 HTTP와 동일한 방식으로 응답을 확인
-TCP
: TCP 프로토콜 포트를 이용하여 대상의 상태를 확인체크 주기: 대상의 상태 확인 주기(단위: 초)
- 1~3600초타임 아웃: 응답이 지연되는 대상을 기다리는 최대 시간 설정(단위: 초)
- 지정된 시간을 초과하는 경우, 대상과의 통신이 실패한 것으로 간주
- 체크 주기보다 작은 값으로 설정
- 1~900초상태 전환 기준(성공): 입력 횟수만큼 상태 확인이 연속적으로 성공한 경우 정상 대상으로 판단 상태 전환 기준(실패): 입력 횟수만큼 상태 확인이 연속적으로 실패한 경우 비정상 대상으로 판단하여 트래픽 분산 대상에서 제외 -
상태 확인 유형이
HTTP
,HTTPS
인 경우, 추가 속성을 설정할 수 있습니다.구분 설명 HTTP 메서드 GET
,HEAD
,OPTIONS
,POST
,PUT
,TRACE
,PATCH
,DELETE
,CONNECT
중 선택HTTP 버전 1.0
,1.1
중 선택HTTP 상태 코드 대상이 로드 밸런서로 응답할 것으로 예상되는 상태 코드 설정
- 사용자가 설정한 HTTP 상태 코드대로 대상이 응답한 경우 상태 확인에 성공한 것으로 처리
- 단일 상태 코드 입력 예시 :200
,201
- 다수의 상태 코드 입력 예시 :201
,202
,401
,402
- 범위 지정 예시 : 200-500체크 경로 상태 확인을 수행할 경로를 URL Path를 기준으로 입력 -
[적용] 버튼을 클릭합니다.
대상 그룹의 대상이 최신 CentOS 배포판에서 제공하는 SELinux 옵션을 사용할 경우, SELinux에서 shell_exec_t
호출을 거부합니다. 따라서, PING
유형의 상태 확인은 작동하지 않습니다.
고정 세션 설정
고정 세션은 리스너와 대상 그룹 프로토콜에 따라, 일부 대상 그룹에만 설정할 수 있습니다.
리스너와 대상 그룹 프로토콜별 고정 세션 옵션
대상 그룹\리스너 | HTTP | HTTPS | TCP | UDP |
---|---|---|---|---|
HTTP | HTTP 쿠키, App 쿠키 | X | X | X |
HTTPS | X | X | X | X |
TCP | X | X | 소스 IP | X |
UDP | X | X | X | 소스 IP |
PROXY | X | X | X | X |
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
고정 세션 설정을 변경하려는 대상 그룹을 클릭합니다.
-
상세 화면에서 속성 탭을 클릭 후, [고정 세션 설정] 버튼을 클릭합니다.
-
고정 세션 설정 팝업창에서 사용 여부를 변경하거나 설정값을 변경 후, [적용] 버튼을 클릭합니다.
대상 인스턴스 설정
DSRNLB를 정상적으로 사용하기 위해서는 대상 그룹에 설정된 대상 인스턴스에 운영체제에 따라 추가적인 설정을 해야 합니다. 사전에 대상으로 지정될 인스턴스를 생성 후 아래의 작업들을 진행하십시오. 이 작업을 수행하지 않을 경우 상태 확인이 정상적으로 수행되지 않습니다.
출발지/목적지 확인 변경 설정
-
카카오클라우드 콘솔 > Virtual Machine > 인스턴스 메뉴로 이동합니다.
-
대상으로 설정할 인스턴스의 [더 보기] 아이콘을 선택합니다.
-
더 보기에서 출발지/목적지 확인 변경을 선택합니다.
-
출발지/목적지 확인 변경 설정 팝업창에서 [비활성화] 버튼을 클릭 후 [닫기] 버튼을 클릭합니다. (기본값: 활성화)
주의- 출발지/목적지 확인 변경을 비활성으로 설정한 인스턴스를 사용할 경우, 자신을 목적지(Destination)로 하지 않은 모든 패킷을 수신하게 됩니다. 보안상 위험을 최소화하기 위해 보안 그룹의 규칙을 상세히 설정하시기 바랍니다.
- DSRNLB를 사용하기 위해서는 대상 인스턴스의 보안 그룹에서 DSRNLB의 프라이빗 IP 및 리스너 포트 번호에 대한 인바운드 트래픽을 허용해야 합니다.
- 출발지/목적지 확인 변경을 비활성으로 설정한 인스턴스를 사용할 경우, 자신을 목적지(Destination)로 하지 않은 모든 패킷을 수신하게 됩니다. 보안상 위험을 최소화하기 위해 보안 그룹의 규칙을 상세히 설정하시기 바랍니다.
대상 인스턴스 내 네트워크 설정
DSRNLB를 사용하기 위해서는 대상 인스턴스의 운영체제에 따른 추가적인 설정이 필요합니다. 주소 결정 프로토콜(Address Resolution Protocol, ARP) 관련 설정 및 Loopback 주소 관련 설정이 이에 포함됩니다.
- Linux 계열 운영체제
- Windows 계열 운영체제
-
대상이 될 인스턴스에 SSH를 통해 접속합니다.
-
아래의 명령어를 입력합니다.
<private_ip_of_dsrnlb>
는 이 대상 인스턴스가 설정될 대상 그룹과 연결된 DSRNLB의 프라이빗 IP 주소(예: 10.0.3.49)입니다.주의아래 명령어는 root Privilege로 수행해야 합니다.
sudo -i
명령어로 전환 후 입력하세요.네트워크 설정sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
ip a del 127.0.0.1 dev lo
ip a add <private_ip_of_dsrnlb>/32 dev lo
ip link set dev lo up재부팅 시에도 설정을 유지하는 방법위 설정의 경우, 인스턴스를 재부팅할 때마다 다시 설정이 필요합니다. 인스턴스 재부팅 후에도 설정이 유지되도록 하기 위해서는 별도의 작업이 필요합니다. 자세한 설명은 crontab 설정으로 부팅 시 스크립트 자동 실행을 참고하시기 바랍니다.
crontab 설정으로 부팅 시 스크립트 자동 실행
Linux 운영체제의 경우, 인스턴스가 재부팅될 때 앞서 설정한 작업이 초기화되어 다시 설정이 필요합니다. 인스턴스가 재부팅되어도 설정이 적용되도록 하기 위해 앞서 작업한 설정 작업을 스크립트 파일로 저장 후, crontab
명령어로 재부팅 시 이 스크립트 파일을 실행하도록 설정할 수 있습니다.
-
아래의 명령어로 crontab 파일을 엽니다.
crontab 파일 열기crontab -e
-
해당 파일에
@reboot
Expression을 사용하여 재부팅 시 자동 실행될 코드를 추가합니다.재부팅 시 자동 실행될 코드 추가@reboot sh /<file_directory>/<file_name>
파라미터 설명 <file_directory>
실행될 파일이 위치된 경로 <file_name>
재부팅 시 실행될 Shell 스크립트 파일의 파일명
- 예시: @reboot sh /home/setup_dsr.sh -
실행될 Shell 스크립트를 작성합니다. 이 예제는 대상 인스턴스 내 네트워크 설정의 작업 내용 및 대상 인스턴스에서 실행되는 Process를 DSRNLB의 프라이빗 IP로 바인딩의 작업 내용을 실행하는 Shell 스크립트입니다.
setup_dsr.sh#!/bin/sh
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
ip a del 127.0.0.1 dev lo
#이 대상 인스턴스가 설정될 대상 그룹과 연결된 DSRNLB의 프라이빗 IP 주소
ip a add 172.30.4.237/32 dev lo
ip link set dev lo up
#UDP 리스너를 사용 시 대상 인스턴스에서 실행되는 Process를 DSRNLB의 프라이빗 IP로 바인딩(UDP Server 실행)
python3 /home/sample_python_udp_server.py -
이 스크립트 파일 및 Python 스크립트 파일이 실행될 수 있도록 권한 설정을 조정합니다. 각 파일의 경로를 입력하거나 파일이 있는 경로까지 이동하여 실행하십시오.
실행 권한 부여chmod +x setup_dsr.sh
chmod +x sample_python_udp_server.py -
재부팅 후 설정이 유지되고 있는지 확인합니다.
각 항목 설정 확인#ARP 설정 확인
sysctl -a | grep net.ipv4.conf.all.arp_ignore
sysctl -a | grep net.ipv4.conf.all.arp_announce
#Loopback IP 주소 확인
ip a
#UDP Server가 정상적으로 실행되고 있는지 확인(Python 스크립트에서 지정한 포트 번호를 확인)
netstat -tuln | grep 12345
Step 1. Microsoft KM-TEST 루프백 어댑터 설치
-
Windows 바탕 화면의 좌측 하단 검색 창에서 실행을 검색 후 선택합니다.
-
실행 창에서
hdwwiz
를 입력 후 [확인] 버튼을 클릭합니다. -
하드웨어 추가 마법사가 표시되며, [다음] 버튼을 클릭합니다.
-
목록에서 직접 선택한 하드웨어 설치(고급) 을 선택합니다.
-
네트워크 어댑터를 선택한 후 [다음] 버튼을 클릭합니다.
-
제조업체에서
Microsoft
를 선택 후, 모델에서Microsoft KM-TEST 루프백 어댑터
를 선택합니다. [다음] 버튼을 클릭합니다. -
설치 진행을 위해 [다음] 버튼을 클릭합니다.
-
설치 완료 후 [마침] 버튼을 클릭합니다.
Step 2. 어댑터에 IP 설정
-
Windows 바탕 화면의 좌측 하단 검색 창에서 네트워크 상태를 검색 후 선택합니다.
-
네트워크 상태 창에서 어댑터 옵션 변경을 클릭합니다.
-
네트워크 연결 창에서 식별되지 않은 네트워크로 표기된 이더넷을 확인 가능합니다. 이 이더넷을 우클릭 후 [속성]을 선택합니다.
-
이더넷 속성 창에서 인터넷 프로토콜 버전 4(TCP/IPv4) 를 선택한 후, [속성] 버튼을 클릭합니다.
-
인터넷 프로토콜 버전 4(TCP/IPv4) 속성 창에서 [일반] 탭을 선택 후, 다음 IP 주소 사용(S):를 선택합니다. 아래의 정보를 입력합니다.
- IP 주소(I): DSRNLB의 프라이빗 IP 주소
- 서브넷 마스크(U): 255.255.255.255
Step 3. ARP 요청 무시 및 Weak Host Model 설정
-
Windows 바탕 화면의 좌측 하단 검색 창에서 명령 프롬프트를 검색 후 선택합니다.
-
아래의 명령어를 입력하여 ARP 요청에 응답하지 않도록 설정합니다.
<loopback_adapter_name>
은 Step 1. Microsoft KM-TEST 루프백 어댑터 설치 단계에서 새로 추가된 어댑터의 이름(예: 이더넷)을 의미합니다.ARP 요청 무시netsh interface ipv4 set interface <loopback_adapter_name> metric=254
-
아래의 명령어를 입력하여 Weak Host Model에 대한 설정을 진행합니다.
<default_network_adapter_name>
은 새로 추가한 어댑터가 아닌 기본으로 구성되어 있는 어댑터의 이름(예: tap6d769000e-0a)을 의미합니다.Weak Host Model 설정netsh interface ipv4 set interface <default_network_adapter_name> weakhostreceive=enabled
netsh interface ipv4 set interface <loopback_adapter_name> weakhostreceive=enabled
netsh interface ipv4 set interface <loopback_adapter_name> weakhostsend=enabled
UDP 리스너 사용 시 대상 인스턴스 추가 설정
DSRNLB의 UDP 리스너를 사용할 경우, 대상 인스턴스의 운영체제는 Linux 계열만 지원됩니다. 또한, 아래의 3가지 추가 설정 중 하나를 적용해야 이용할 수 있으며, 설정을 정상적으로 완료한 경우에도 UDP 통신의 특성상 패킷 유실이 발생하여 간헐적으로 정상 작동되지 않을 수 있습니다.
- 대상 인스턴스에서 실행되는 Process를 DSRNLB의 프라이빗 IP로 바인딩
- Linux Kernel에서 제공하는 iptables를 사용하여 NAT 설정(Stateful)
- Linux Kernel에서 제공하는 nftable을 사용하여 NAT 설정(Stateless)
대상 인스턴스에서 실행되는 Process를 DSRNLB의 프라이빗 IP로 바인딩
-
대상 인스턴스에서 다음의 예제 코드를 작성합니다. 본 예제에서는 Python 코드로 작성되었으나, 사용자의 편의에 따라 적절한 프로그래밍 언어로 대체할 수 있습니다.
sample_python_udp_server.pyimport socket
localIP = "172.30.4.237" # DSRNLB의 프라이빗 IP
localPort = 12345 # 이 소스 코드로 실행 및 생성될 UDP Server가 사용할 포트 번호
bufferSize = 1024
msgFromServer = "Hello UDP Client, this is Simple UDP Server."
bytesToSend = str.encode(msgFromServer)
# Create a datagram socket
UDPServerSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
# Bind to address and ip
UDPServerSocket.bind((localIP, localPort))
print("UDP server up and listening")
# Listen for incoming datagrams
while(True):
bytesAddressPair = UDPServerSocket.recvfrom(bufferSize)
message = bytesAddressPair[0]
address = bytesAddressPair[1]
clientMsg = "Message from Client:{}".format(message)
clientIP = "Client IP Address:{}".format(address)
print(clientMsg)
print(clientIP)
# Sending a reply to client
UDPServerSocket.sendto(bytesToSend, address) -
예제 코드를 실행합니다.
Linux Kernel에서 제공하는 iptables를 사용하여 NAT 설정(Stateful)
NAT 수행을 위해 추가 CPU가 사용되며, DNAT가 'Stateful'이기 때문에 메모리 소비도 높을 수 있습니다.
-
대상 인스턴스에서 다음의 예제 코드를 작성합니다. 본 예제에서는 Python 코드로 작성되었으나, 사용자의 편의에 따라 적절한 프로그래밍 언어로 대체할 수 있습니다.
- 이 예제 코드는 위와 동일하나,
localIP
주소를0.0.0.0
으로 수정한 것입니다.
sample_python_udp_server.pyimport socket
localIP = "0.0.0.0"
localPort = 12345 # 이 소스 코드로 실행 및 생성될 UDP Server가 사용할 포트 번호
bufferSize = 1024
msgFromServer = "Hello UDP Client, this is Simple UDP Server."
bytesToSend = str.encode(msgFromServer)
# Create a datagram socket
UDPServerSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
# Bind to address and ip
UDPServerSocket.bind((localIP, localPort))
print("UDP server up and listening")
# Listen for incoming datagrams
while(True):
bytesAddressPair = UDPServerSocket.recvfrom(bufferSize)
message = bytesAddressPair[0]
address = bytesAddressPair[1]
clientMsg = "Message from Client:{}".format(message)
clientIP = "Client IP Address:{}".format(address)
print(clientMsg)
print(clientIP)
# Sending a reply to client
UDPServerSocket.sendto(bytesToSend, address) - 이 예제 코드는 위와 동일하나,
-
예제 코드를 실행합니다.
-
iptables DNAT 규칙을 추가하기 위해 아래의 명령어를 입력합니다.
DNAT 규칙 추가iptables -p udp -t nat -A POSTROUTING -j RETURN -d <private_ip_of_target> --dport <udp_server_port>
iptables -p udp -t nat -A PREROUTING -j DNAT --dport <udp_server_port> --to-destination <private_ip_of_target> -d <private_ip_of_dsrnlb>항목 설명 <private_ip_of_target>
대상 인스턴스 자신의 프라이빗 IP 주소 <udp_server_port>
위 예제 코드에서 설정된 포트 번호(localPort 값) <private_ip_of_dsrnlb>
대상 인스턴스가 설정될 대상 그룹과 연결된 DSRNLB의 프라이빗 IP 주소
Linux Kernel에서 제공하는 nftable을 사용하여 NAT 설정(Stateless)
nftables을 사용하려면 Linux 커널 버전이 4.10 이상이어야 합니다.
-
대상 인스턴스에서 Linux Kernel에서 제공하는 iptables를 사용하여 NAT 설정(Stateful)의 1번 예제 코드를 작성합니다.
-
예제 코드를 실행합니다.
-
다음 명령어를 입력합니다.
송신 패킷의 IP 헤더에서 Source 주소 수정nft add table raw
nft add chain raw postrouting {type filter hook postrouting priority 300 \; }
nft add rule raw postrouting ip saddr <private_ip_of_target> udp sport <udp_server_port> ip saddr set <private_ip_of_dsrnlb>구분 설명 <private_ip_of_target>
대상 인스턴스 자신의 프라이빗 IP 주소 <udp_server_port>
위 예제 코드에서 설정된 포트 번호(localPort 값) <private_ip_of_dsrnlb>
대상 인스턴스가 설정될 대상 그룹과 연결된 DSRNLB의 프라이빗 IP 주소
대상 관리
대상 그룹에 추가된 대상을 조회하고 수정, 삭제할 수 있습니다.
상태 확인 IP는 대상이 있는 서브넷별로 2개씩 생성됩니다. 상태 확인을 위해서는 해당 IP를 통한 통신을 허용해야 합니다.
상태 확인 IP 조회와 상태 확인 IP 통신 허용 문서를 참고하여 보안 그룹에 인바운드 규칙을 추가하시기 바랍니다.
상태 확인 IP 조회
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
상태 확인 IP를 조회하려는 대상 그룹을 선택합니다.
-
상세 화면에서 대상 탭을 선택합니다.
-
탭 상세 화면 상단의 서브넷별 상태 확인 IP를 클릭하면, 상태 확인 IP 목록을 조회할 수 있습니다.
상태 확인 IP 통신 허용
상태 확인 IP 통신 허용을 위한 보안 그룹 설정 방법은 두 가지가 있습니다.
사용자의 편의에 따라 아래 두 가지 방법 중 한 가지를 선택하여 통신을 허용하시기 바랍니다.
첫 번째, 대상 인스턴스의 기존 보안 그룹에 해당 IP를 허용하는 인바운드 규칙 등록
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
상태 확인 IP를 조회하고 통신을 허용할 대상 그룹을 선택합니다.
-
상세 화면에서 대상 탭을 선택합니다.
-
탭 상세 화면 상단의 서브넷별 상태 확인 IP를 클릭하여, 상태 확인 IP 목록을 확인합니다. 상태 확인 IP 조회 화면을 유지하거나, 해당 목록을 복사해둡니다.
-
탭 상세 화면 하단의 대상 목록에서 상태 확인 IP의 통신을 허용할 인스턴스를 확인하고, 해당 인스턴스의 보안 그룹 이름을 클릭합니다.
- 연결된 보안 그룹이 여러 개인 경우, 한 개만 임의로 선택하여 등록합니다.
- 연결된 보안 그룹 중 하나 이상에 이미 동일한 규칙이 추가된 경우, 통신이 허용된 상태입니다.
-
보안 그룹 상세 화면의 인바운드 규칙 탭에서 [인바운드 규칙 관리] 버튼을 클릭합니다.
-
보안 그룹 규칙 관리 팝업창에서 인바운드 규칙 탭 하단의 [추가하기] 버튼을 클릭해 새 규칙 입력칸을 추가합니다.
보안 그룹 규칙 관리
-
과정 5의 대상 그룹 > 대상 탭 상세 정보를 바탕으로 규칙 정보를 입력하고 우측의 [적용] 버튼을 클릭합니다.
구분 설명 프로토콜 통신을 위한 프로토콜(TCP, UDP, ICMP, ALL)로 대상 그룹의 상태 확인 유형에 따라 선택
- 상태 확인 유형이 PING인 경우:ICMP
- 상태 확인 유형이 HTTP, HTTPS, TCP인 경우:TCP
패킷 출발지(Source) 접속을 허용할 출발지 IP
- 대상 상세에서 확인한 상태 확인 IP 입력
- 대상이 포함된 서브넷에서 생성된 상태 확인 IP 2개에 대하여 각각 등록포트 통신할 포트
- 대상의 모니터 포트 입력규칙 설명 (선택) 규칙에 대한 설명 -
보안 그룹 규칙 관리 팝업창 하단의 [닫기] 버튼을 클릭해 규칙 등록을 완료합니다.
두 번째, 상태 확인을 위한 신규 보안 그룹을 생성해 대상 인스턴스에 연결
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
상태 확인 IP를 조회하고 통신을 허용할 대상 그룹을 선택합니다.
-
상세 화면에서 대상 탭을 선택합니다.
-
탭 상세 화면 상단의 서브넷별 상태 확인 IP를 클릭하여, 상태 확인 IP 목록을 확인합니다.
상태 확인 IP 조회 화면을 유지하거나, 해당 목록을 복사해 둡니다. -
보안 그룹 생성을 참고하여 새 보안 그룹 생성 화면에 진입합니다.
-
보안 그룹 생성 팝업창에서 보안 그룹 이름과 설명을 입력하고, 인바운드 규칙을 추가합니다.
보안 그룹 생성
-
과정 3의 대상 그룹 > 대상 탭 상세 정보를 바탕으로 규칙 정보를 모두 입력합니다.
- 하나의 보안 그룹에 상태 확인 IP를 모두 등록하고, 해당 보안 그룹에 대상 인스턴스 전체를 연결합니다.
또는 서브넷별로 보안 그룹을 생성하여, 해당 서브넷에서 생성된 상태 확인 IP만 등록 후 동일 서브넷의 대상 인스턴스만 연결할 수도 있습니다.
구분 설명 프로토콜 통신을 위한 프로토콜(TCP, UDP, ICMP, ALL)로 대상 그룹의 상태 확인 유형에 따라 선택
- 상태 확인 유형이 PING인 경우:ICMP
- 상태 확인 유형이 HTTP, HTTPS, TCP인 경우:TCP
패킷 출발지(Source) 접속을 허용할 출발지 IP
- 대상 상세에서 확인한 상태 확인 IP 입력
- 대상이 포함된 서브넷에서 생성된 상태 확인 IP 2개에 대하여 각각 등록
- 하나의 보안 그룹으로 관리할 경우, 전체 상태 확인 IP에 대하여 각각 등록포트 통신할 포트
- 대상의 모니터 포트 입력
- 단일 포트 또는 범위로 입력 가능규칙 설명 (선택) 규칙에 대한 설명 - 하나의 보안 그룹에 상태 확인 IP를 모두 등록하고, 해당 보안 그룹에 대상 인스턴스 전체를 연결합니다.
-
[생성] 버튼을 클릭해 보안 그룹 생성을 완료합니다.
-
보안 그룹 목록에서 생성한 보안 그룹 우측의 [연결 자원 관리] 버튼을 클릭하여 대상 인스턴스를 연결하여 설정을 완료합니다.
- 연결 자원 관리에 대한 자세한 내용은 연결 자원 관리를 참고하시기 바랍니다.
모니터 포트 설정
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
대상을 수정하려는 대상 그룹을 선택합니다.
-
상세 화면에서 대상 탭을 선택합니다.
-
대상 그룹에 추가된 대상 목록을 확인합니다.
-
모니터 포트 설정을 변경할 대상의 [더 보기] 아이콘을 선택합니다.
-
더 보기에서 [모니터 포트 설정]을 선택합니다.
-
모니터 포트 설정 팝업창에서 정보를 변경합니다.
- 대상 포트와 동일한 포트로 설정: 트래픽 포트와 모니터 포트가 동일
- 대상 포트와 다른 포트로 설정: 트래픽 포트와 모니터 포트가 다르므로 모니터 포트 입력
-
[적용] 버튼을 클릭합니다.
대상 조회
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
대상을 조회하려는 대상 그룹을 클릭합니다.
-
상세 화면에서 대상 탭을 선택합니다.
-
대상 그룹에 추가된 대상 목록을 확인합니다. 필요시, 필터를 통해 원하는 대상을 쉽게 검색할 수 있습니다.
구분 설명 IP 대상 IP 포트 대상 포트 인스턴스 대상 인스턴스의 이름 및 ID 서브넷 대상이 포함된 서브넷 이름 보안 그룹 대상 인스턴스에 연결된 보안 그룹 모니터 포트 상태 확인이 이루어지는 포트 가중치 비율 입력한 가중치를 계산식에 의하여 환산한 가중치 비율 프로비저닝 상태 대상이 정상적으로 추가되었는지 또는 수정이나 삭제가 진행 중인지에 대한 정보 운영 상태 추가한 대상이 사용 가능한 상태인지에 대한 정보 더 보기 아이콘 모니터 포트 설정, 대상 연결 해제 기능 제공
대상 수정
추가한 대상의 포트는 수정할 수 없습니다. 포트 변경을 원하는 경우 대상 삭제 후, 대상 설정을 이용하여 다시 추가해야 합니다.
대상 연결 해제
-
카카오클라우드 콘솔 > Beyond Networking Service > Load Balancing > 대상 그룹 메뉴로 이동합니다.
-
대상 연결을 해제할 대상 그룹을 클릭합니다.
-
상세 화면에서 대상 탭을 선택합니다.
-
대상 그룹에 추가된 대상 목록을 확인합니다.
-
연결을 해제할 대상의 [더 보기] 아이콘을 클릭합니다.
-
더 보기에서 [대상 연결 해제]를 선택합니다.
-
대상 연결 해제 팝업창에서 연결 해제 확인 문구를 입력 후, [연결 해제] 버튼을 클릭합니다.
대상의 연결을 해제해도 인스턴스는 삭제되지 않습니다. 다시 연결하려면 대상 설정에서 추가하시기 바랍니다.