환경변수
Configmap
기본 개념
Configmap
이란 Pod내부에 환경변수를 설정해 주는 Object라고 생각하시면 됩니다.
해당 데이터는 Pod이 올라갈때 key
와 value
를 읽어 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
이름으로 파일이 생성되며 PV
와 PVC
를 이용해 마운트한 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내부에서 자체 암호화를 하거나 서드파티를 사용해서 암호화를 사용하는 방법을 채택하기도 합니다.
'FrameWorks > Kubernetes' 카테고리의 다른 글
[Kubernetes] Component 동작으로 이해하기 (0) | 2025.03.11 |
---|---|
[Kubernetes] Application 이해하기 - PVC, PV, Deployment, Service, HPA (0) | 2025.03.11 |
[Kubernetes] Application 기능 이해하기 - Pod(Probe) (0) | 2025.03.09 |
[Kubernetes] Object의 metadata 그림으로 파헤치기 (0) | 2025.03.07 |
[Kubernetes] 쿠버네티스에 모니터링 시스템 설치하기(feat. Prometheus, Loki-stack) (0) | 2025.03.07 |
댓글