카테고리 없음

Application 기능으로 이해하기 - Configmap, Secret

종종이94 2024. 3. 26. 13:44

 

 

<ConfigMap Data 정의>

 

 

-  spring_profiles_active: "dev"   <인프라 환경에 대한 값>

인프라에는 다양한 환경 개발, 검증, 운영 환경등이 있고, "dev"라는 뜻 개발환경에서 애플리케이션이 앱이 기동되는 시점을 알려줌

 

- application_role:"ALL"      <앱의 기능을 제어하기 위한 값>

이 APP의 역할을 정해줌  

 

 

- postgresql_filepath: "/usr/src~~"  <외부 환경을 앱으로 주입시키기 위한 값>

String data로 연결할 파일의 경로에요. 이 경로는 Pod의 마운팅 Path에서 정합니다.

그리고 이 경로를 환경 변수로 주면 앱에서 기동할 때 환경 변수 값을 보고 DB의 정보를 확인해서 접속할 수 있도록 로직이돼 있는데 그러면 파드에서 마운팅 Path의 경로를 바꾸고 싶을 대 앱을 다시 빌드하지 않고 컨피그 맵만 수정해서 간단하게 처리를 할 수가 있습니다.

 

 

 

 

 

 

 

<앱 실행 시 ConfigMap과 Secret 관계>

 

 pod가 생성됐을 때 상황을 애기를 해보겠습니다.

먼저 Config-map에 있는 데이터의 모든 내용이 컨테이너 내부의 환경변수로 주입이 됩니다.

그리고 이미지를 만들 때 "java -Dspring.profiles.active~~~~" 이 실행 명령이 컨테이너 생성 후에 자동으로 동작하면서 여기 환경 변수 값들이 매칭이 돼서 들어가는데 만약에 환경 변수로 "spring-profiles-active"가 없다면 이 값은 null로 들어가게 됩니다. spring-profiles-active가 어떻게 쓰이냐면 스프링을 개발해 보신 분들은 잘 아시겠지만 소스 내부에 이렇게 각 환경별로 값들을 세팅할 수 있는 파일들이 있습니다. 

그리고 스프링이 dev라는 값을 보고 이 파일을 선택을 하는데 Kubernetes가 있기 전부터 앱에는 각 환경에 값을 다르게 줄 목적으로 이렇게 사용하는 파일들이 있었습니다.  

 

 

여기서  configmap과 application.yaml 중 어떤 것을 사용해야하는지 의문이 생긴다???

Chat Gpt는 다음과 같이 답변을 해주었는데 정확히 이해가 안가니 뒷장에서 제대로 이해해봐야겠다.

  • 클러스터 수준의 설정을 관리하려면 ConfigMap을 사용합니다.
  • 애플리케이션 수준의 설정을 관리하려면 application.yaml을 사용합니다.

또한, 애플리케이션을 Kubernetes에서 실행할 경우 ConfigMap과 application.yaml을 함께 사용하여 Kubernetes 환경에서 애플리케이션의 설정을 관리할 수 있습니다. ConfigMap을 사용하여 클러스터 수준의 설정을 관리하고, 애플리케이션은 이러한 설정을 application.yaml에서 읽어와 사용할 수 있습니다.

 

 

계속 이어서 파드에 MountingPath라는 속성을 주면 컨테이너 안에 이렇게 Path가 만들어집니다. 

그리고 볼륨이 매칭이 돼서 Secret랑 연결이 되고 컨테이너 안에 이렇게 파일(data) 만들어지는데 이때 다시 Value 값이 디코딩 되기 때문에 이 파일을 조회해보면 내가 원래 입력을 했던 형태의 값이 보입니다.

앱이 기동할 때 이 파일을 읽어서 DB를 연결하도록 로직 처리가 되어 있습니다.

일단 Secret은 컨테이너의 보안을 위해서 쓰는 거다 정도로 이해하자

 

 

 

 

 

 

 

 

환경변수 주입하면 실시간으로 앱의 값 반영 못함(Configmap)

APP 실행 시킬 때 이미 값이 들어가고 끝났기 때문에 그 이후에 변경해줘도 값이 적용되지 않음

값을 적용하기 위해서는 파드를 재시작해줘야 

 

 

 

 

 

 

 

대시보드에서 시크릿 값을 편안하게 수정할 수 있게 인코딩된 형태로 Secret 파일 제공

 

 

 

 

볼륨으로 연결하면 실시간으로 앱의 값 반영 됨(Secret)

 

 

오.....!

Configmap만 쓰면 되는데 굳이 왜 Secret을 같이 쓸까 했는데, Secret은 APP에 환경변수를 바로바로 적용할 수 있다는 장점이 있구나