해당 글은 쿠버네티스 교과서 책과 공식 홈페이지(https://kubernetes.io/ko/)를 참조하여 작성되었습니다
언제든지 바뀔 수 있는 설정값들이나 환경별(개발, 테스트, 운영 등)로 다른 값들은 직접 설정해줘야 하는 값 이기에 애플리케이션이 자체적으로 가지고있기 어렵다
때문에 그러한 값들은 외부에서 주입해주는 방식으로 사용하게 되는데, 이를 위한 리소스가 바로 컨피그맵과 비밀값이다
해당 리소스는 클러스터 내에서 독립적인 위치에 보관되기 때문에, 파드에서 얼마든지 참조하여 읽어올 수 있다
적합한 용도의 오브젝트가 있는데 굳이 다른 방법을 찾을 필요가 없다. 우선 컨피그맵과 시크릿 오브젝트를 만드는 것을 추천한다
컨피그맵과 시크릿 오브젝트를 생성했다면, 이제 파드는 이를 참조하여 자유롭게 사용할 수 있다
애플리케이션 필요에 따라 컨테이너 환경변수로 설정하든, 그대로 파일을 가져오든 마음대로 구현하면 된다
(환경변수란 모든 운영체제가 가지고 있는 핵심 기능으로, 모든 애플리케이션이 이를 읽을 수 있다. 애플리케이션이 외부로부터 값을 주입받을 수 있는 가장 기본적이고 간편한 방법이라고 할 수 있다)
요약하자면 사용방법은 다음 2단계 절차로 나뉜다고 할 수 있다
어떻게 리소스를 생성할 것인지?
어떻게 애플리케이션이 사용할 것인지?
그럼 컨피그맵과 시크릿에 대해 알아보도록 하자
특별한 무언가가 있는 것은 아니고, 단순히 특정 값들(위에서 말한 설정값 등)을 저장하기 위한 리소스이다
Key-value, plain text, binary 등 다양한 포맷을 지원하며, 읽기 전용이기 때문에 여러 파드에서 사용할 수 있다
컨피그맵과 비슷한 리소스이나, 민감한 정보를 다루기에 클러스터 내부에서 별도로 관리된다
해당 오브젝트를 생성하면 사용할 노드에만 전달되며, 디스크에 저장하는 것이 아닌 메모리에만 담긴다
그리고 전달 및 저장할 때 모두 암호화된 값이지만 객체에 접근 권한이 있다면 Base64 인코딩된 값을 볼 수 있다
즉 비밀값이지만 기본적으로 난독화 평문으로 존재하고 사용할 때 암호화로 주고받는다
역시 항상 문제는 민감정보를 어떻게 다루느냐이다
시크릿 오브젝트는 기본적으로 Base64 평문으로 저장되고 누구나 확인할 수 있기에 비밀의 의미가 없다
그리고 파드는 결국 해당 값을 가져다 쓸텐데, 이 과정에서 노출이 없는지도 고민해봐야 한다
이 문제는 내 입장이 무엇인지에 따라 다르다