MSA

spring cloud config vault

초록색거북이 2024. 6. 20. 09:21
728x90
반응형
SMALL

(그림에는 git 저장소를 이용했지만, 저희는 vault를 이용하였습니다.)

 

사용이유?

 
위의 그림으로도 간단히 설명이 가능합니다.
 
spring cloud config는 여러 서비스들의 설정 정보들을 중앙으로 관리하기 용이하도록 도와주는 것입니다.
 
 
예를들어
 
A , B, C 서비스가 있고, 각각의 서비스들은 같은 설정 정보를 사용한다고 가정해봅시다.
 
설정정보가 바뀌면, A, B, C 모든 서비스에 설정 정보를 수정해야 합니다.
그리고 설정 정보를 변경했으므로 모두 재배포를 해야합니다. 
 
그와중 한군데의 설정 정보를 잘못 변경하면 장애로 전파 될 수 있습니다.
 
그러므로 설정 정보의 변경 시 관리 용이를 위해 외부에 중앙으로 관리하는 것이 관리적인 측면에서 편합니다.
 
 

 

사용법?

우선 vault를 설치해야합니다
이 글에서는 docker-compose를 이용합니다.
 
mkdir vault (vault 디렉토리를 만들어줍니다.)
cd vault (vault 디렉토리로 들어갑니다.)
mkdir config
mkdir file
mkdir logs

config 디렉토리에 들어가서 local.json 파일을 만들어줍니다.
 
local.json
{
   "listener":{
       "tcp":{
         "address":"0.0.0.0:8200",
         "tls_disable":1
      }
   },
   "backend":{
      "file":{
         "path":"/vault/file"
      }
   },
   "default_lease_ttl":"876000h",
   "max_lease_ttl":"876000h",
   "ui":true,
   "log_level": "info"
}
docker-compose.yml 을 만들어줍니다.
 
docker-compose.yml
version: '3'

services:
  vault:
    image: vault:1.13.3
    container_name: vault
    ports:
      - 8200:8200
    environment:
      - SKIP_CHOWN=true
    volumes:
      - ./config:/vault/config
      - ./file:/vault/file
      - ./logs:/vault/logs
    cap_add:
      - IPC_LOCK
    command: vault server -config=/vault/config/local.json

 

 

최종 디렉토리 구조

 

 

docker compose up -d 명령어를 통해 실행해줍니다.
 
실행이 완료되면, http://localhost:8200 로 접속해줍니다.

key shares는 공유받을 키 개수
key threshold는 접속시 일치하는 키 개수 

 

 
총 3개의 키를 받고 2개만 일치하면 통과시켜주겠다 라고 세팅하는 의미입니다.
 

 

위에서 설정한대로 총 3개의 key와 root token(최종적으로 접근할때 필요한 토큰입니다) 을 받았습니다.
 
download keys버튼을 눌러 따로 저장해둡니다.
 
이런식으로 json으로 내려다 줍니다.
 
이제 접속할때 받은 키로 값을 입력을 해야합니다. (2번 해야 통과)
오른쪽은 최종적으로 키를 두번 입력하였을때 마지막으로 입력해야하는 토큰입니다.

여기까지 왔으면 이런화면이 뜨는데 이게 초기 화면입니다.

 

secret engine을 추가해줍니다.

 

 

 

추가가 완료되면

 

 

그 이후 이 secret engine 에 저장할 데이터를 작성해줍니다.

"username" : "김영재" 라고 vault에 데이터를 저장했습니다.

 

이제 vault에서의 설정은 끝입니다.

 

 

Spring cloud config server 구축

module-config-server 라고 새로 만들었습니다.
 
build.gradle.kts

application.yml

 

위에 설정은 방금전에 로컬에서 8200포트로 띄었던 vault 연동 설정입니다.
scheme => SSL 적용전이기에 http
backend => secret engine 에서 만들어준 엔진이름
default-key => 해당엔진 내부 디렉토리로 만든 경로
profile-separator => 프로파일 분리 조건
authentication => 권한방식설정
token => vault 접속할때 필요한 토큰 (아까 받은 토큰)
kv-version => kv의 버전

 

Spring cloud config Client 구축 (module-advisor 로 테스트)

 

build.gradle.kts

 

 

application.yml

여기도 동일하게 configserver와 연동을 해주면 됩니다.
 

잘나오는지 테스트

vault 안에 있는 값을 제대로 가져오는것을 알수있습니다.
 
또한 Actuator 기능을 통해 서버를 재기동하지않아도, /actuator/refresh를 통해 vault에 변경된 값을 감지하여 빈을 재등록해줍니다.
728x90
반응형
LIST