FrameWorks/Kubernetes

[Kubernetes] Application 기능 이해하기 - Configmap, Secret

ABCD 2025. 3. 10.

환경변수

Configmap

기본 개념

Configmap이란 Pod내부에 환경변수를 설정해 주는 Object라고 생각하시면 됩니다.
해당 데이터는 Pod이 올라갈때 keyvalue를 읽어 jar 실행시 환경변수를 -D옵션으로 자동으로 삽입해줍니다.
이 과정을 통해 예전에는 모든 명령어를 작성해 주어야했던것을 Object로 관리 할 수 있는 것이죠.

data속성 안에 설정하고자하는 환경변수를 넣어주면 됩니다.

data :
spring_profiles_active: "dev"
application_role: "ALL"
postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"

위에 Configmap.yaml파일을 살펴보면 Pod에서 jar명령어를 실행할 때 아래처럼 입력시킵니다.

app.jar -Dspring.profiles.active=${spring_profiles_active} -Dapplication.role=${application_role} -Dpostgresql.filepath=${postgresql_filepath} 50 Jps -Dapplication.home=/usr/java/openjdk-17 -Xms8m -Djdk.module.main=jdk.jcmd

Secret

기본 개념

Secret은 이름을 보면 엄청난 보안을 해줄 수 있는거 같아 보이지만, 실상은 그렇지 않습니다.
인코딩을 한번 진행하지만 개발자라면 흔히 알고 있는 Base64인코딩을 하기 때문에 누구나 복호화를 할 수 있죠.

 

그렇기 때문에 Secret의 경우에는 Hub에 올리기보단, Pod내부에서 작업하는게 더 좋을 수도 있습니다. 유출이 되면 안되니까요...?

 

Secret의 기본 type은 Opaque입니다.

stringData

stringData:
application-security.yaml:
ddriver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://prostgresql:5431"
username: "username_test"
password: "password_test"

 

위의 stringData속성에 작성된 내용들은 아래와 같이 Base64로 인코딩되어 저장됩니다.

data:
postgresql-info.yaml: >-
ZHJpdmVyLWNsYXNzLW5hbWU6ICJvcmcucG9zdGdyZXNxbC5Ecml2ZXIiCnVybDogImpkYmM6cG9zdGdyZXNxbDovL3Bvc3RncmVzcWw6NTQzMSIKdXNlcm5hbWU6ICJ0ZXN0IgpwYXNzd29yZDogInRlc3QxMjMiCg==

 

이 파일을 다시 읽을 때는 Base64 디코딩을 사용하여 해석해서 사용하게 됩니다.

 

또한, stringData하위에 파일형식으로 한번 넣은 것을 확인할 수 있는데요.
아래와 같이 작성하면 application-security.yaml이름으로 파일이 생성되며 PVPVC를 이용해 마운트한 path에 파일이 저장되게 됩니다.

stringData:
application-security.yaml:

이미지이미지

Secret의 또 다른 사용방법

private dockerHub

보통 우리가 dockerHub에서 가져오는 이미지들은 대게 public한 이미지들 입니다.
하지만, 우리는 접근에 제한을 갖는 private한 이미지들도 갖을 수 있는데요.

 

그럴경우 우리는 해당 private dockerHub에 접근하기 위해 비밀정보를 가지고 있어야합니다.
이 비밀정보를 Secret에 담을 수 있습니다. 다음과 같이 말이죠.

type: docker-registry
data:
docker-username: "private"
docker-password: "private123"
docker-email: "private@gmail.com"

인증서

우리는 인증서 또한 Secret을 통해 관리 할 수 있습니다.

type: tls
data:
tls.crt: "MIIC2..."
tls.key: "MIICEpG..."

이미지

Configmap vs Secret

앞서 말씀드린대로 Secret은 보안에 대한 기능은 없습니다.
때문에 Configmap에 작성해도 무방하죠... 하지만, Configmap에 작성된 데이터는 Pod내부에 접속해서 다음 명령어를 치면 전부 노출이 됩니다.

env

 

때문에 Application내부에서 자체 암호화를 하거나 서드파티를 사용해서 암호화를 사용하는 방법을 채택하기도 합니다.

728x90
반응형

댓글