OpenSearch 설치 · 17 min read · Sep 12, 2025

우분투 22.04에서 Docker를 통해 OpenSearch 설치하는 방법

OpenSearch는 Amazon이 주도하는 커뮤니티 프로젝트로 Elasticsearch와 Kibana의 포크입니다. 이는 풍부한 기능과 혁신적인 기능을 갖춘 완전한 오픈 소스 검색 엔진 및 분석 스위트입니다. OpenSearch 프로젝트의 주요 구성 요소는 OpenSearch(Elasticsearch의 포크)와 OpenSearch Dashboards(Kibana의 포크)입니다. 두 구성 요소는 기업 보안, 경고, 기계 학습, SQL, 인덱스 상태 관리 등과 같은 기능을 제공합니다.

OpenSearch는 100% 오픈 소스이며 Apache 2.0 라이센스 하에 있습니다. 이를 통해 로그 분석, 애플리케이션 검색, 기업 검색 등 다양한 사용 사례에 대해 데이터를 쉽게 수집, 보호, 검색, 집계, 보기 및 분석할 수 있습니다.

이 튜토리얼에서는 Ubuntu 22.04 서버에서 Docker를 통해 OpenSearch(오픈 소스 검색 엔진 및 분석 스위트)와 OpenSearch Dashboards(오픈 소스 시각화 도구)를 설치하고 설정합니다. 여러 컨테이너와 단일 OpenSearch Dashboard를 통해 OpenSearch 클러스터를 배포합니다. 또한 사용자 정의 TLS 인증서와 인증 및 권한 부여를 활성화하여 배포를 보호합니다.

이 가이드는 새 일반 Ubuntu 서버를 사용하므로 이 튜토리얼에는 Ubuntu 22.04 시스템에 Docker 엔진과 Docker Compose를 설치하는 내용이 포함되어 있습니다.

전제 조건

이 가이드를 완료하려면 다음 요구 사항이 필요합니다:

  • 최소 RAM 4-8GB가 있는 Ubuntu 22.04 서버 - 이 예제에서는 호스트 이름 ‘’과 IP 주소 ‘’를 가진 Ubuntu 서버를 사용합니다.
  • sudo/root 관리자 권한이 있는 비루트 사용자.

이 요구 사항이 준비되면 OpenSearch 설치를 시작할 수 있습니다.

시스템 설정

첫 번째 단계에서는 OpenSearch 배포를 위해 Ubuntu 시스템을 준비합니다. SWAP과 페이징을 비활성화한 다음, ‘/etc/sysctl.conf ‘ 파일을 통해 최대 메모리 맵을 증가시켜야 합니다.

아래 명령을 실행하여 시스템에서 스왑을 비활성화합니다. 여기서 ‘sed’ 명령은 ‘/etc/fstab ‘ 파일의 스왑 구성 줄의 시작 부분에 주석 ‘# ‘을 추가하여 스왑을 영구적으로 비활성화합니다. ‘swapoff ‘ 명령은 현재 세션에서 스왑을 비활성화합니다.

sudo sed -i '/ swap / s/^\(.*\)$/#
1/g' /etc/fstab  
sudo swapoff -a

다음으로 아래 명령을 통해 스왑 상태를 확인합니다. 비활성화된 경우 스왑 섹션에서 ‘0 ‘이라는 출력을 받아야 합니다.

free -m

출력:

disable swap

마지막으로, Ubuntu 시스템의 최대 메모리 맵을 증가시키기 위해 ‘/etc/sysctl.conf ‘ 파일에 구성을 추가합니다.

아래 명령을 실행하여 ‘ vm.max_map_count=262144 ‘ 매개변수를 ‘ /etc/sysctl.conf ‘ 파일의 끝에 추가합니다. 그런 다음 ‘ sysctl -p ‘ 명령을 통해 변경 사항을 적용합니다.

sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf  
sudo sysctl -p

이제 아래 명령을 실행하여 최대 메모리 맵을 확인합니다. 성공적으로 수행되면 최대 메모리 맵은 ‘262144 ‘여야 합니다.

cat /proc/sys/vm/max_map_count

출력:

setup sysctl

스왑이 비활성화되고 최대 메모리 맵이 ‘262144 ‘로 증가했으므로 이제 Docker 엔진과 Docker Compose 설치를 시작합니다.

Docker CE 및 Docker Compose 설치

OpenSearch를 배포하고 설치하는 방법은 여러 가지가 있으며, 전통적인 방법으로 가상 머신에 OpenSearch를 설치하거나 컨테이너 환경에 설치할 수 있습니다.

전통적인 방법으로 가상 머신에 설치하려면 Tarball을 통해 수동으로 OpenSearch를 설치하거나 패키지 관리자를 통해 설치할 수 있습니다(예: RHEL 기반 배포판). 컨테이너 배포의 경우 Docker와 Kubernetes를 사용하여 OpenSearch를 설치할 수 있습니다.

이 예제에서는 Docker 엔진과 Docker Compose를 통해 컨테이너화된 환경에 OpenSearch를 설치합니다. 따라서 이제 공식 Docker 리포지토리에서 Docker 패키지를 설치합니다.

시작하려면 아래 apt 명령을 실행하여 기본 종속성을 설치합니다. 프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 진행합니다.

sudo apt install ca-certificates curl gnupg lsb-release

출력:

install basic dependencies

다음으로 아래 명령을 실행하여 Docker 패키지의 GPG 키와 리포지토리를 추가합니다.

sudo mkdir -p /etc/apt/keyrings  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \  
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \  
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

출력:

그 후, 아래 apt 명령을 통해 Ubuntu 패키지 인덱스를 업데이트하고 새로 고칩니다.

sudo apt update

출력:

update repo

Docker 리포지토리가 추가되었으므로 이제 아래 apt 명령을 사용하여 Docker 엔진과 Docker Compose 플러그인을 설치할 수 있습니다. 프롬프트가 표시되면 y를 입력한 후 ENTER를 눌러 진행합니다.

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

출력:

install docker and docker compose

Docker 서비스는 자동으로 시작되고 활성화됩니다. 다음 systemctl 명령 유틸리티를 통해 Docker 서비스를 확인할 수 있습니다.

sudo systemctl is-enabled docker  
sudo systemctl status docker

Docker 서비스가 활성화되어 부팅 시 자동으로 실행된다는 출력과 Docker 서비스의 상태가 실행 중이라는 출력을 받아야 합니다.

마지막으로 비루트 사용자가 Docker 컨테이너를 실행할 수 있도록 하려면 사용자를 ‘docker ‘ 그룹에 추가해야 합니다. 아래 usermod 명령을 실행하여 사용자를 ‘docker ‘ 그룹에 추가합니다. 또한 사용자 이름을 자신의 사용자로 변경해야 합니다.

sudo usermod -aG docker alice

이제 사용자로 로그인하고 아래 명령을 통해 Docker 컨테이너를 실행할 수 있습니다.

su - alice  
docker run hello-world

성공하면 다음 스크린샷과 같이 Docker 컨테이너에서 hello-world 메시지를 받아야 합니다.

verify docker

OpenSearch Docker 이미지 다운로드

이 단계에서는 DockerHub에서 OpenSearch 및 OpenSearch Dashboards 이미지를 다운로드합니다. 그런 다음 테스트 목적으로 새 OpenSearch 컨테이너를 실행합니다.

OpenSearch 및 OpenSearch Dashboards 이미지를 다운로드하려면 다음 명령을 실행합니다.

docker pull opensearchproject/opensearch:latest  
docker pull opensearchproject/opensearch-dashboards:latest

출력:

download opensearch image

download opensearch dashboards

다운로드가 완료되면 아래 명령을 실행하여 시스템의 Docker 이미지 목록을 확인합니다. OpenSearch 및 OpenSearch Dashboards 이미지가 시스템에 사용 가능해야 합니다.

docker images

출력:

다음으로 아래 명령을 사용하여 Docker를 통해 OpenSearch를 직접 실행할 수 있습니다. 이는 OpenSearch 컨테이너를 단일 모드로 생성하고 실행하며 호스트 머신에서 기본 TCP 포트 9200 및 9600을 노출합니다.

docker run -d -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" opensearchproject/opensearch:latest

아래 ‘ docker ps ‘ 명령을 통해 실행 중인 컨테이너 목록을 확인합니다.

docker ps

이와 같은 출력을 받아야 합니다 - OpenSearch 컨테이너가 생성되었고 실행 중입니다. 컨테이너와 Docker 호스트 모두에서 노출된 TCP 포트는 92009600입니다.

아래 curl 명령을 통해 OpenSearch 컨테이너에 접근할 수 있습니다. OpenSearch 컨테이너의 기본 사용자 이름과 비밀번호는 ‘admin ‘입니다.

curl https://localhost:9200 -ku 'admin:admin'

성공하면 다음과 같은 출력이 표시됩니다 - OpenSearch 컨테이너가 실행 중이며 Docker 호스트 머신을 통해 접근할 수 있습니다.

verify opensearch container

이제 아래 ‘docker’ 명령을 실행하여 OpenSearch 컨테이너를 중지하고 삭제할 수 있습니다. 다음 단계에서는 Docker Compose를 통해 OpenSearch 클러스터를 생성할 것입니다. 다음 명령에서 컨테이너 이름을 변경해야 합니다.

docker stop container-name or container-id  
docker rm container-name or container-id

OpenSearch 컨테이너가 제거되었는지 확인하려면 ‘docker ps ‘ 명령을 추가 옵션 ‘-a ‘와 함께 실행합니다. 이는 실행 중인 컨테이너와 종료된 컨테이너 모두의 상태를 보여줍니다.

docker ps -a

출력:

remove container

프로젝트 디렉토리 설정

다음 명령으로 사용자로 로그인합니다. 이 예제에서는 사용자 ‘alice’를 사용하므로 아래 명령에서 사용자 이름을 변경해야 합니다.

su - alice

이제 프로젝트의 주요 루트 디렉토리로 사용될 ‘ opensearch-project ‘라는 새 프로젝트 디렉토리와 사용자 정의 TLS 인증서를 저장하는 데 사용될 ‘ certs ‘ 디렉토리를 생성합니다.

mkdir -p ~/opensearch-project/certs; cd ~/opensearch-project

opensearch-project’ 디렉토리 내에서 OpenSearch 컨테이너와 OpenSearch Dashboards를 생성하는 데 사용될 새 파일을 생성하기 위해 아래 명령을 실행합니다.

touch docker-compose.yml opensearch.yml opensearch_dashboards.yml internal_users.yml

파일 목록:

  • docker-compose.yml - OpenSearch 프로젝트를 위한 Docker Compose의 주요 구성입니다.
  • opensearch.yml - OpenSearch 컨테이너를 위한 사용자 정의 구성입니다.
  • opensearch_dashboards.yml - OpenSearch Dashboards 컨테이너를 위한 사용자 정의 구성입니다.
  • internal_users.yml - OpenSearch 및 OpenSearch Dashboards를 위한 사용자 인증 및 권한 부여입니다.

SSL/TLS 인증서 생성

이 단계에서는 OpenSearch 배포를 보호하는 데 사용될 여러 TLS 인증서를 생성합니다. 다음 인증서를 생성합니다:

  • Root CA 인증서: 이 인증서는 다른 인증서에 서명하는 데 사용됩니다.
  • Admin 인증서: 이 인증서는 보안 플러그인과 관련된 모든 작업을 수행할 수 있는 관리 권한을 얻는 데 사용됩니다.
  • OpenSearch Dashboards 인증서: 이 인증서는 OpenSearch Dashboards를 보호하는 데 사용되며 HTTPS 연결을 통해 OpenSearch Dashboards에 접근할 수 있도록 합니다.
  • 노드 및 클라이언트 인증서: 이 인증서는 OpenSearch 클러스터 내의 노드 및 클라이언트에서 사용됩니다.

시작하려면 아래 명령을 실행하여 TLS 인증서를 저장하는 데 사용될 새 디렉토리를 생성합니다.

mkdir -p certs/{ca,os-dashboards}

새 TLS 인증서를 생성하는 데 사용될 환경 변수 ‘MYDN’을 생성합니다. 자신의 정보로 세부 정보를 변경해야 합니다.

export MYDN="/C=CA/ST=ONTARIO/L=TORONTO/O=HWDOMAIN"

이제 OpenSearch 배포를 위한 TLS 인증서를 생성할 준비가 되었습니다.

setup certs

CA 인증서 생성

아래 명령을 사용하여 루트 CA 인증서에 대한 개인 키를 생성합니다.

openssl genrsa -out certs/ca/ca.key 2048

이제 아래 명령을 통해 자체 서명된 루트 CA 인증서를 생성합니다. ‘- subj’ 매개변수의 값은 현재 세션에서 생성한 환경 변수 ‘MYDN ‘을 사용합니다.

openssl req -new -x509 -sha256 -days 1095 -subj "$MYDN/CN=CA" -key certs/ca/ca.key -out certs/ca/ca.pem

이로써 루트 CA 개인 키 ‘ca.key ‘와 루트 CA 인증서 ‘ca.pem ‘을 얻어야 합니다. 다음 명령을 통해 생성한 CA 인증서를 확인할 수 있습니다.

ls certs/ca/

출력 - CA 개인 키 ‘ca.key ‘와 CA 인증서 ‘ca.pem ‘ 파일이 있어야 합니다.

Admin 인증서 생성

새 admin 인증서 개인 키 ‘admin-temp.key ‘를 생성하고 생성된 인증서를 PKCS#12 호환 알고리즘(3DES)으로 변환합니다. 이로써 admin 개인 키는 ‘admin.key ‘가 됩니다.

openssl genrsa -out certs/ca/admin-temp.key 2048  
openssl pkcs8 -inform PEM -outform PEM -in certs/ca/admin-temp.key -topk8 -nocrypt -v1 PBE-SHA1-3DES -out certs/ca/admin.key

다음으로 아래 명령을 실행하여 ‘admin.key ‘ 개인 키에서 admin CSR(인증서 서명 요청)을 생성합니다. 생성된 CSR은 ‘admin.csr ‘ 파일이 됩니다.

openssl req -new -subj "$MYDN/CN=ADMIN" -key certs/ca/admin.key -out certs/ca/admin.csr

이제 아래 명령을 실행하여 루트 CA 인증서와 개인 키로 admin CSR에 서명합니다. admin 인증서의 출력은 ‘admin.pem ‘ 파일입니다.

openssl x509 -req -in certs/ca/admin.csr -CA certs/ca/ca.pem -CAkey certs/ca/ca.key -CAcreateserial -sha256 -out certs/ca/admin.pem

마지막으로 다음 명령을 통해 인증서 목록을 확인합니다.

ls certs/ca/

출력 - admin 인증서 파일 ‘admin.pem ‘과 개인 키 ‘admin.key ‘가 있어야 합니다.

OpenSearch Dashboards 인증서 생성

OpenSearch Dashboards에 사용될 새 인증서를 생성합니다.

아래 명령을 실행하여 개인 키 ‘os-dashboards-temp.key ‘를 생성하고 생성된 인증서를 PKCS#12 호환 알고리즘(3DES)으로 변환합니다. 이로써 admin 개인 키는 ‘os-dashboards.key ‘가 됩니다.

openssl genrsa -out certs/os-dashboards/os-dashboards-temp.key 2048  
openssl pkcs8 -inform PEM -outform PEM -in certs/os-dashboards/os-dashboards-temp.key -topk8 -nocrypt -v1 PBE-SHA1-3DES -out certs/os-dashboards/os-dashboards.key

다음으로 아래 명령을 실행하여 OpenSearch Dashboards의 CSR(인증서 서명 요청)을 생성합니다. 생성된 CSR은 ‘os-dashboards.csr ‘ 파일이 됩니다.

openssl req -new -subj "$MYDN/CN=os-dashboards" -key certs/os-dashboards/os-dashboards.key -out certs/os-dashboards/os-dashboards.csr

이제 아래 명령을 실행하여 루트 CA 인증서와 개인 키로 OpenSearch Dashboards CSR에 서명합니다. admin 인증서의 출력은 ‘os-dashboards.pem’ 파일입니다.

openssl x509 -req -in certs/os-dashboards/os-dashboards.csr -CA certs/ca/ca.pem -CAkey certs/ca/ca.key -CAcreateserial -sha256 -out certs/os-dashboards/os-dashboards.pem

마지막으로 다음 명령을 실행하여 OpenSearch Dashboards CSR 파일을 삭제하고 OpenSearch Dashboards에 대한 인증서 목록을 확인합니다.

rm certs/os-dashboards/os-dashboards-temp.key certs/os-dashboards/os-dashboards.csr  
ls certs/os-dashboards/

출력 - OpenSearch Dashboards 인증서 파일 ‘os-dashboards.pem’ 및 개인 키 ‘os-dashboards.key ‘가 있어야 합니다.

OpenSearch 노드 인증서 생성

아래 명령을 실행하여 노드 인증서를 생성합니다. 이를 통해 ‘certs’ 디렉토리 아래에 여러 디렉토리를 생성하고 여러 호스트에 대한 TLS 인증서를 생성합니다.

for NODE_NAME in "os01" "os02" "os03"  
do  
    mkdir "certs/${NODE_NAME}"  
    openssl genrsa -out "certs/$NODE_NAME/$NODE_NAME-temp.key" 2048  
    openssl pkcs8 -inform PEM -outform PEM -in "certs/$NODE_NAME/$NODE_NAME-temp.key" -topk8 -nocrypt -v1 PBE-SHA1-3DES -out "certs/$NODE_NAME/$NODE_NAME.key"  
    openssl req -new -subj "$MYDN/CN=$NODE_NAME" -key "certs/$NODE_NAME/$NODE_NAME.key" -out "certs/$NODE_NAME/$NODE_NAME.csr"  
    openssl x509 -req -extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1,DNS:$NODE_NAME") -in "certs/$NODE_NAME/$NODE_NAME.csr" -CA certs/ca/ca.pem -CAkey certs/ca/ca.key -CAcreateserial -sha256 -out "certs/$NODE_NAME/$NODE_NAME.pem"  
    rm "certs/$NODE_NAME/$NODE_NAME-temp.key" "certs/$NODE_NAME/$NODE_NAME.csr"  
done

‘certs’ 디렉토리의 디렉토리 목록을 확인합니다.

ls certs/

출력 - 새 디렉토리 ‘os01, os02,os03‘이 있어야 합니다.

generate node certificates

마지막으로 아래 명령을 통해 os01, os02,os03 디렉토리에 있는 인증서 목록을 확인합니다.

ls certs/os01/  
ls certs/os02/  
ls certs/os03/

출력 - 각 디렉토리에서 ‘osX.key ‘ 및 ‘osX.pem ‘ 두 개의 인증서를 얻어야 합니다.

list nodes certificates

마지막으로 아래 명령을 실행하여 ‘certs ‘ 디렉토리의 소유권을 ‘1000 ‘으로 변경해야 합니다. 이를 통해 Docker 컨테이너가 ‘certs ‘ 디렉토리에 접근할 수 있습니다.

sudo chown -R 1000:1000 certs/

TLS 인증서가 생성되었으므로 이제 해시된 비밀번호를 생성하고 OpenSearch 사용자를 정의합니다.

사용자 설정

이 단계에서는 OpenSearch 및 OpenSearch Dashboards에서 사용할 비밀번호 해시를 생성합니다. 두 개의 서로 다른 사용자에 대해 두 개의 비밀번호 해시를 생성한 다음, ‘internal_users.yml’ 구성 파일을 수정하고 OpenSearch 사용자를 설정합니다.

다음 docker 명령을 실행하여 새 비밀번호 해시를 생성합니다. 이는 임시 OpenSearch 컨테이너를 실행하고 비밀번호 해시 생성을 위한 스크립트 ‘hash.sh ‘를 실행합니다.

docker run -it --rm opensearchproject/opensearch sh -c "/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh"

이제 비밀번호를 입력하면 터미널에서 해시된 비밀번호를 얻을 수 있습니다. 생성된 해시 비밀번호를 복사하고 다시 명령을 실행하여 다른 해시 비밀번호를 생성합니다.

출력 - OpenSearch 사용자에 대해 생성된 해시 비밀번호.

generate password hash

다음으로 아래 nano 편집기 명령을 사용하여 ‘internal_users.yml ‘ 파일을 엽니다.

nano internal_users.yml

파일에 다음 줄을 추가하고 생성된 비밀번호로 해시 값을 변경해야 합니다. 이를 통해 OpenSearch 배포를 위한 두 사용자를 정의합니다. 사용자 ‘admin ‘은 OpenSearch의 관리자이며 사용자 ‘kibanaserver ‘는 OpenSearch Dashboards에 연결하는 데 사용됩니다.

---  
# 내부 사용자 데이터베이스입니다.  
# 해시 값은 bcrypt 해시이며 plugin/tools/hash.sh로 생성할 수 있습니다.  
  
_meta:  
  type: "internalusers"  
  config_version: 2  
  
# 내부 사용자를 여기에 정의합니다.  
  
admin:  
  hash: "$2y$12$y8UzXWoZKQc8GTgGsRz4g.CarjlC6sMPYN8XOD/NPQysRi2oq.Ws6"  
  reserved: true  
  backend_roles:  
  - "admin"  
  description: "관리자 사용자"  
  
kibanaserver:  
  hash: "$2y$12$AKpGe4tM5nIWYFoM56yRue22pQh0jFfx59MUgUKnBu8qnyGeAm2Ze"  
  reserved: true  
  description: "OpenSearch Dashboards 사용자"

파일을 저장하고 편집기를 종료합니다.

internal_users.yml

docker-compose.yml 스크립트 설정

이 단계에서는 OpenSearch 및 OpenSearch Dashboards를 배포하기 위한 새로운 Docker Compose 스크립트를 생성합니다. OpenSearch 클러스터를 설정하기 위해 여러 OpenSearch 컨테이너를 생성하고 OpenSearch 클러스터에 연결될 OpenSearch Dashboards 컨테이너를 설정합니다.

아래 nano 편집기 명령을 사용하여 ‘docker-compose.yml ‘ 파일을 엽니다.

nano docker-compose.yml

파일에 다음 줄을 추가합니다.

version: '3.7'  
  
services:  
  
  os01:  
    restart: always  
    image: opensearchproject/opensearch:latest  
    environment:  
      OPENSEARCH_JAVA_OPTS: "-Xms1024m -Xmx1024m" # 최소 및 최대 Java 힙 크기, 시스템 RAM의 50%로 설정하는 것이 좋습니다.  
      node.name: os01  
      discovery.seed_hosts: os01,os02,os03  
      cluster.initial_master_nodes: os01,os02,os03  
      plugins.security.ssl.transport.pemkey_filepath: certificates/os01/os01.key # 상대 경로  
      plugins.security.ssl.transport.pemcert_filepath: certificates/os01/os01.pem  
      plugins.security.ssl.http.pemkey_filepath: certificates/os01/os01.key  
      plugins.security.ssl.http.pemcert_filepath: certificates/os01/os01.pem  
      DISABLE_INSTALL_DEMO_CONFIG: "true"  
      JAVA_HOME: /usr/share/opensearch/jdk  
      bootstrap.memory_lock: "true" # 아래 memlock 설정과 함께 스왑을 비활성화합니다.  
      network.host: "0.0.0.0"  
    ulimits:   
      memlock:  
        soft: -1  
        hard: -1  
    volumes:  
      - "./opensearch.yml:/usr/share/opensearch/config/opensearch.yml"  
      - "./internal_users.yml:/usr/share/opensearch/config/opensearch-security/internal_users.yml"  
      - "os-data1:/usr/share/opensearch/data"  
      - "./certs:/usr/share/opensearch/config/certificates:ro"  
    ports:  
      - 9200:9200  
      - 9600:9600 # 성능 분석기 필요  
  
  os02:  
    restart: always  
    image: opensearchproject/opensearch:latest  
    environment:  
      OPENSEARCH_JAVA_OPTS: "-Xms1024m -Xmx1024m" # 최소 및 최대 Java 힙 크기, 시스템 RAM의 50%로 설정하는 것이 좋습니다.  
      node.name: os02  
      discovery.seed_hosts: os01,os02,os03  
      cluster.initial_master_nodes: os01,os02,os03  
      plugins.security.ssl.transport.pemkey_filepath: certificates/os02/os02.key # 상대 경로  
      plugins.security.ssl.transport.pemcert_filepath: certificates/os02/os02.pem  
      plugins.security.ssl.http.pemkey_filepath: certificates/os02/os02.key  
      plugins.security.ssl.http.pemcert_filepath: certificates/os02/os02.pem  
      DISABLE_INSTALL_DEMO_CONFIG: "true"  
      JAVA_HOME: /usr/share/opensearch/jdk  
      bootstrap.memory_lock: "true" # 아래 memlock 설정과 함께 스왑을 비활성화합니다.  
      network.host: "0.0.0.0"  
    ulimits:   
      memlock:  
        soft: -1  
        hard: -1  
    volumes:  
      - "./opensearch.yml:/usr/share/opensearch/config/opensearch.yml"  
      - "./internal_users.yml:/usr/share/opensearch/config/opensearch-security/internal_users.yml"  
      - "os-data2:/usr/share/opensearch/data"  
      - "./certs:/usr/share/opensearch/config/certificates:ro"  
  
  os03:  
    restart: always  
    image: opensearchproject/opensearch:latest  
    environment:  
      OPENSEARCH_JAVA_OPTS: "-Xms1024m -Xmx1024m" # 최소 및 최대 Java 힙 크기, 시스템 RAM의 50%로 설정하는 것이 좋습니다.  
      node.name: os03  
      discovery.seed_hosts: os01,os02,os03  
      cluster.initial_master_nodes: os01,os02,os03  
      plugins.security.ssl.transport.pemkey_filepath: certificates/os03/os03.key # 상대 경로  
      plugins.security.ssl.transport.pemcert_filepath: certificates/os03/os03.pem  
      plugins.security.ssl.http.pemkey_filepath: certificates/os03/os03.key  
      plugins.security.ssl.http.pemcert_filepath: certificates/os03/os03.pem  
      DISABLE_INSTALL_DEMO_CONFIG: "true"  
      JAVA_HOME: /usr/share/opensearch/jdk  
      bootstrap.memory_lock: "true" # 아래 memlock 설정과 함께 스왑을 비활성화합니다.  
      network.host: "0.0.0.0"  
    ulimits:   
      memlock:  
        soft: -1  
        hard: -1  
    volumes:  
      - "./opensearch.yml:/usr/share/opensearch/config/opensearch.yml"  
      - "./internal_users.yml:/usr/share/opensearch/config/opensearch-security/internal_users.yml"  
      - "os-data3:/usr/share/opensearch/data"  
      - "./certs:/usr/share/opensearch/config/certificates:ro"  
  
  osdashboards:  
    restart: always  
    image: opensearchproject/opensearch-dashboards:latest  
    ports:  
      - 5601:5601  
    volumes:  
      - "./certs:/usr/share/opensearch-dashboards/config/certificates:ro"  
      - "./opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml"  
    environment:  
      OPENSEARCH_HOSTS: '["https://os01:9200","https://os02:9200","https://os03:9200"]' # 공백 없이 문자열로 지정해야 합니다.  
      DISABLE_INSTALL_DEMO_CONFIG: "true"  
  
volumes:  
  os-data1:  
  os-data2:  
  os-data3:

파일을 저장하고 ‘docker-compose.yml ‘ 파일을 종료합니다.

이로써 OpenSearch 배포를 위한 4개의 컨테이너/서비스가 생성됩니다. 아래는 각 컨테이너에 대한 자세한 정보입니다.

  • 3개의 OpenSearch 컨테이너 os01, os02, os03 - OpenSearch 클러스터를 생성하는 데 사용됩니다. 이러한 컨테이너는 이미지 ‘opensearchproject/opensearch:latest ‘를 기반으로 하며 동일한 구성 ‘opensearch.yml ‘ 및 ‘internal_users.yml ‘을 사용합니다.
  • OpenSearch Dashboards 컨테이너 ‘osdashboards ‘는 ‘opensearchproject/opensearch-dashboards:latest ‘ 이미지를 기반으로 하며 OpenSearch 클러스터의 세 호스트 os01, os02, os03에 연결됩니다. 또한 OpenSearch Dashboards 컨테이너에서 데모 구성을 비활성화합니다.
  • 모든 OpenSearch 및 OpenSearch Dashboards 컨테이너는 ‘certs ‘ 디렉토리에 있는 사용자 정의 TLS 인증서를 통해 보호됩니다.
  • OpenSearch 컨테이너는 두 개의 포트 92009600을 노출하고 OpenSearch Dashboards 컨테이너는 포트 5601을 노출합니다.

OpenSearch 및 OpenSearch Dashboards 설정

이 단계에서는 OpenSearch ‘opensearch.yml’ 및 OpenSearch Dashboards ‘opensearch_dashbaords.yml’에 대한 새로운 구성을 생성합니다. 마지막으로 모든 필수 구성 및 인증서가 OpenSearch 프로젝트 디렉토리에 있는지 확인해야 합니다.

아래 nano 편집기 명령을 사용하여 OpenSearch 구성 파일 ‘opensearch.yml ‘을 엽니다.

sudo nano opensearch.yml

파일에 다음 줄을 추가합니다. CA 인증서 및 관리자 및 노드 인증서의 DN 경로를 변경해야 합니다. 이를 통해 ‘os-cluster ‘라는 이름의 OpenSearch 클러스터를 설정합니다.

cluster.name: os-cluster  
network.host: 0.0.0.0  
  
bootstrap.memory_lock: "true" # 아래 memlock 설정과 함께 스왑을 비활성화합니다.  
  
plugins.security.allow_unsafe_democertificates: true  
plugins.security.ssl.http.enabled: true  
plugins.security.ssl.http.pemtrustedcas_filepath: certificates/ca/ca.pem  
plugins.security.ssl.transport.enabled: true  
plugins.security.ssl.transport.pemtrustedcas_filepath: certificates/ca/ca.pem  
plugins.security.ssl.transport.enforce_hostname_verification: false  
  
plugins.security.authcz.admin_dn:  
  - 'CN=ADMIN,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
plugins.security.nodes_dn:  
  - 'CN=os00,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os01,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os02,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os03,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os04,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os05,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os06,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  - 'CN=os07,O=HWDOMAIN,L=TORONTO,ST=ONTARIO,C=CA'  
  
plugins.security.audit.type: internal_opensearch  
plugins.security.enable_snapshot_restore_privilege: true  
plugins.security.check_snapshot_restore_write_privileges: true  
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]  
cluster.routing.allocation.disk.threshold_enabled: false  
opendistro_security.audit.config.disabled_rest_categories: NONE  
opendistro_security.audit.config.disabled_transport_categories: NONE

파일 ‘opensearch.yml ‘을 저장하고 편집기를 종료합니다.

opensearch.yml

다음으로 아래 nano 편집기 명령을 사용하여 OpenSearch Dashboards 구성 파일 ‘opensearch_dashboards.yml ‘을 엽니다.

nano opensearch_dashboards.yml

파일에 다음 줄을 추가합니다. OpenSearch Dashboards의 사용자 ‘kibanaserver ‘의 사용자 이름과 비밀번호를 ‘internal_users.yml ‘ 파일의 세부 정보로 변경해야 합니다.

server.name: os_dashboards  
server.host: "0.0.0.0"  
  
opensearch.username: kibanaserver  
opensearch.password: password  
opensearch.requestHeadersWhitelist: [authorization, securitytenant]  
  
opensearch_security.multitenancy.enabled: true  
opensearch_security.multitenancy.tenants.preferred: [Private, Global]  
opensearch_security.readonly_mode.roles: [kibana_read_only]  
# HTTPS 없이 opensearch-dashboards를 실행하는 경우 이 설정을 사용하십시오.  
opensearch_security.cookie.secure: false  
  
# 브라우저와 OpenSearch-Dashboards 간의 트래픽 암호화  
server.ssl.enabled: true  
server.ssl.certificate: "/usr/share/opensearch-dashboards/config/certificates/os-dashboards/os-dashboards.pem"  
server.ssl.key: "/usr/share/opensearch-dashboards/config/certificates/os-dashboards/os-dashboards.key"  
  
# OpenSearch-Dashboards와 OpenSearch 간의 트래픽 암호화  
opensearch.ssl.certificateAuthorities: ["/usr/share/opensearch-dashboards/config/certificates/ca/ca.pem"]  
opensearch.ssl.verificationMode: full

파일을 저장하고 종료합니다.

opensearch dashboard config

마지막으로 아래 apt 명령을 실행하여 tree 패키지를 설치하고 OpenSearch 배포의 파일 및 디렉토리 목록을 확인합니다.

sudo apt install tree  
tree .

출력은 다음과 같아야 합니다.

list files and directories

이로써 Docker를 통해 OpenSearch를 배포하기 위한 모든 준비가 완료되었습니다. 이제 Docker 및 Docker Compose를 통해 OpenSearch를 배포할 준비가 되었습니다.

OpenSearch 클러스터 및 OpenSearch Dashboards 배포

시작하기 전에 OpenSearch 프로젝트 디렉토리 ‘opensearch-project ‘에 있는지 확인합니다. 그런 다음 다음 ‘docker compose ‘ 명령을 실행하여 OpenSearch 배포를 생성하고 시작합니다.

docker compose up -d

출력은 다음과 같아야 합니다 - 3개의 OpenSearch 컨테이너 os01, os02, os03이 생성되고 시작되었습니다. 또한 OpenSearch Dashboards 컨테이너 ‘osdashboards ‘가 생성되고 시작되었습니다.

start opensearch cluster and opensearch dashboards

다음 명령을 통해 OpenSearch 프로젝트에서 실행 중인 서비스/컨테이너 목록을 확인합니다.

docker compose ps

STATUS ‘가 ‘ Up ‘인 경우 컨테이너/서비스가 실행 중입니다. ‘ PORTS ‘ 섹션에서 컨테이너가 호스트 머신에 노출한 포트를 확인해야 합니다.

OpenSearch 클러스터가 실행 중이므로 이제 ‘internal_users.yml ‘ 파일을 통해 생성한 새 사용자 구성을 적용해야 합니다. 이를 위해 다음 ‘docker ‘ 명령을 실행할 수 있습니다. 또한 OpenSearch 클러스터가 실행 중인지 확인하기 위해 약 30-60초 기다린 후 이 명령을 실행해야 합니다.

다음 명령은 ‘os01 ‘ 컨테이너/서비스에서 bash 스크립트 ‘securityadmin.sh ‘를 실행하고 OpenSearch 클러스터에 새 사용자를 적용합니다.

docker compose exec os01 bash -c "chmod +x plugins/opensearch-security/tools/securityadmin.sh && bash plugins/opensearch-security/tools/securityadmin.sh -cd config/opensearch-security -icl -nhnv -cacert config/certificates/ca/ca.pem -cert config/certificates/ca/admin.pem -key config/certificates/ca/admin.key -h localhost"

출력:

apply new users

다음으로 아래 명령을 실행하여 컨테이너가 실행 중인지 확인합니다. 그런 다음 아래 ss 명령을 통해 Docker 호스트에서 열린 포트 목록을 확인할 수 있습니다.

docker compose ps  
ss -tulpn

출력 - 포트 92009600은 OpenSearch 클러스터에서 사용되며 포트 5601은 OpenSearch Dashboards에서 사용됩니다.

list open ports

마지막으로 ‘internal_users.yml ‘ 파일에서 생성한 사용자 이름과 비밀번호를 통해 OpenSearch 클러스터에 인증할 수 있습니다.

관리자 사용자로 OpenSearch 클러스터에 인증합니다.

curl https://192.168.5.100:9200 -u admin:password -k

출력 - 인증이 성공적으로 완료되며 현재 클러스터에서 사용 중인 OpenSearch 소프트웨어의 세부 정보를 확인할 수 있습니다.

verify curl admin user

kibanaserver 사용자로 OpenSearch 클러스터에 인증합니다.

curl https://192.168.5.100:9200 -u kibanaserver:password -k

출력 - 인증이 성공적으로 완료되며 현재 클러스터에서 사용 중인 OpenSearch 소프트웨어의 세부 정보를 확인할 수 있습니다.

verify curl kibanaserver

이로써 Docker 및 Docker Compose를 통해 OpenSearch 클러스터와 OpenSearch Dashboards를 배포했습니다. 다음 단계에서는 OpenSearch Dashboards 배포에 접근하고 OpenSearch Dashboards와 OpenSearch 클러스터 간의 연결을 확인합니다.

추가로 OpenSearch 배포에서 오류가 발생한 경우 아래 ‘docker compose ‘ 명령을 통해 각 컨테이너의 로그를 확인할 수 있습니다.

로그 확인을 위한 기본 사용법 ‘docker compose ‘입니다.

docker compose logs  
docker compose logs SERVICE

특정 컨테이너/서비스의 로그를 확인하는 ‘docker compose ‘ 명령입니다.

docker compose logs osdashboards  
docker compose logs os01  
docker compose logs os02  
docker compose logs os03

OpenSearch Dashboards 접근

웹 브라우저를 열고 서버 IP 주소 뒤에 OpenSearch Dashboards 포트 ‘5601 ‘을 입력합니다(예: https://192.168.5.100:5601/). OpenSearch Dashboards 로그인 페이지가 표시됩니다.

사용자 ‘kibanaserver ‘와 비밀번호를 입력한 후 ‘로그인 ‘을 클릭합니다.

opensearch login

성공하면 다음 페이지가 표시됩니다. ‘내가 직접 탐색하기 ‘를 클릭하면 OpenSearch Dashboard 홈 페이지를 볼 수 있습니다.

opensearch dashboards

이로써 OpenSearch Dashboards가 실행 중이며 인증이 활성화되었습니다. 또한 OpenSearch Dashboards는 생성한 SSL/TLS 인증서를 통해 안전한 HTTPS 연결로 실행되고 있습니다.

다음으로 OpenSearch Dashboards와 OpenSearch 클러스터 간의 연결을 OpenSearch API를 통해 확인합니다.

왼쪽 메뉴에서 관리 섹션으로 이동하여 ‘개발 도구 ‘를 클릭합니다.

이제 콘솔에 쿼리 ‘GET / ‘를 입력하고 재생 버튼을 클릭합니다. 성공하면 오른쪽에 OpenSearch 서버에 대한 자세한 정보가 포함된 출력이 표시됩니다. 또한 오른쪽 상단에서 HTTP 코드 ‘200 - OK ‘가 표시되어 쿼리가 오류 없이 실행되었음을 확인합니다.

get status opensearch

쿼리 ‘GET _cat/nodes?format=json&filter_path=ip,name ‘을 입력하여 OpenSearch 클러스터에서 사용 가능한 OpenSearch 노드를 확인합니다. OpenSearch 클러스터에서 세 개의 서로 다른 노드 os01(IP 주소 172.23.0.5), os02(IP 주소 ‘172.23.0.3 ‘), os3(IP 주소 ‘172.23.0.2 ‘)를 확인할 수 있습니다.

list nodes

이로써 OpenSearch Dashboards가 OpenSearch 클러스터에 연결되었음을 확인합니다.

결론

이 튜토리얼에서는 Ubuntu 22.04 서버에서 Docker 및 Docker Compose를 통해 OpenSearch를 설치했습니다. Docker에서 3개의 서로 다른 컨테이너로 OpenSearch 클러스터를 생성했습니다. 또한 TLS 인증서를 통해 OpenSearch를 보호하고 인증 및 권한 부여를 활성화했으며 OpenSearch에서 사용자를 구성했습니다. 또한 OpenSearch를 배포하기 위해 Ubuntu Linux 서버를 구성하고 최적화했습니다.

Docker 및 Docker Compose를 통해 OpenSearch Dashboards를 설치했습니다. 그런 다음 OpenSearch Dashboards 컨테이너를 OpenSearch 클러스터에 연결했습니다.

이 설정을 통해 OpenSearch에 대해 더 많은 탐색을 하고 OpenSearch에 통합을 추가하며 추가 인증을 설정하는 등 다양한 작업을 수행할 수 있습니다. OpenSearch에 대한 모든 정보는 OpenSearch의 공식 문서에서 확인할 수 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.