반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- @configuration
- 해시
- 루씬 인 액션
- @EnableScheduling
- 전화번호 목록
- 검색 기능 확장
- 크론 표현식
- 스프링 스케쥴러
- kubenetes
- 정렬
- 영속 자료구조
- @Setter
- 코딩 테스트
- H-index
- @Getter
- 스택/큐
- 알고리즘
- @Data
- 프로그래머스
- 기능개발
- 커링
- Java
- 다리를 지나는 트럭
- 쿠버네티스
- 완주하지 못한 선수
- 가장 큰 수
- 고차원 함수
- 모던 자바 인 액션
- K번째수
- 롬복 어노테이션
Archives
- Today
- Total
Today I Learned
[쿠버네티스 인 액션] 7. 컨피그맵과 시크릿 : 애플리케이션 설정 (3) 본문
728x90
7.1 시크릿으로 민감한 데이터를 컨테이너에 전달
7.5.1 시크릿 소개
- 보안이 유지돼야하는 자격증명과 개인 암호화 키와 같은 정보를 보관하기 위해 시크릿이라는 별도 오브젝트가 제공된다.
- 시크릿은 컨피그맵과 같은 방식으로 사용할 수 있으며, 다음과 같은 상황에서 사용된다.
- 환경변수로 시크릿 항목을 컨테이너에 전달
- 시크릿 항목을 볼륨 파일로 노출
- 시크릿에 접근해야하는 파드가 실행되고 있는 노드에만 개별 시크릿을 배포하며 시크릿이 메모리에만 저장되게 해서 안전하게 유지한다.
7.5.2 기본 토큰 시크릿 소개
- 모든 파드에는 secret 볼륨이 자동으로 연결돼있다. kubectl descirbe 명령어의 출력을 보면 다음과 같은 내용이 포함된다.
- 시크릿은 리소스이기 때문에 kubelctl get secrets 명령어로 목록을 조회하고 거기서 default-token 시크릿을 찾을 수 있다.
- kubectl describe secret 명령으로 좀 더 자세히 살펴보자.
- 시크릿이 갖고 있는 세 가지 항목(ca.crt, namespace, token)은 파드 안에서 쿠버네티스 API 서버와 통신할 때 필요한 모든 것을 나타낸다.
- kubectl describe pod 명령어는 secret 볼륨이 마운트된 것을 보여준다.
- 컨피그맵과 마찬가지로 secret 볼륨이 마운트된 디렉터리에서 세 개의 파일을 볼 수있으며, kubectl exec 명령어로 확인할 수 있다.
7.5.3 시크릿 생성
- fortune-serving Ngnix 컨테이너가 HTTPS 트래픽을 제공할 수 있도록 개선하기 위해 인증서와 개인키를 만들고 시크릿을 생성해보자.
- 시크릿에 대해 몇 가지 사항을 잘 성명하기 위해 foo라는 더미파일을 만들고 bar라는 문자열을 저장하자.
- 이제 kubectl create secret 명령으로 세 가지 파일에서 시크릿을 만들 수 있다.
7.5.4 컨피그맵과 시크릿 비교
- 시크릿과 컨피그맵의 YAML을 비교해보자.
- 시크릿 항목의 내용은 Base64 인코딩 문자열로 표시되고, 컨피그맵의 내용은 일반 텍스트로 표시된다.
- 시크릿의 YAML과 JSON 메니페스트에는 각 항목을 설정할 때마다 인코딩과 디코딩이 필요하다.
바이너리 데이터 시크릿 사용
- Base64 인코딩을 사용하는 이유는 시크릿 항목에 일반 텍스트 뿐만 아니라 바이너리 값도 담을 수 있기 때문이다.
stringData 필드 소개
- 모든 민감한 데이터가 바이너리 형태는 아니기 때문에, 시크릿의 값을 stringData 필드로 설정할 수 있다.
- stringData 필드는 쓰기 전용이며, 값을 설정할 때만 사용할 수 있다.
- kubectl get -o yaml 명령으로 시크릿의 YAML 정의를 가져올 때 stringData 필드는 표시되지 않지만, stringData 필드로 지정한 모든 항목은 data 항목 아래에 Base64로 인코딩돼 표시된다.
파드에서 시크릿 항목 읽기
secret 볼륨을 통해 시크릿을 컨테이너에 노출하면, 시크릿 항목의 값이 일반 텍스트인지 바이너리 데이터인지에 관계 없이 실제 형식으로 디코딩돼 파일에 기록된다. 환경변수로 시크릿 항목을 노출할 때도 마찬가지다.
7.5.5 파드에서 시크릿 사용
인증서와 키 파일을 모두 포함하는 fortune-https 시크릿을 Ngnix에서 사용할 수 있도록 설정하는 것이 필요하다.
HTTPS를 활성화하도록 fortune-config 컨피그맵 수정
- 설정에서 서버가 인증서와 키 파일을 /etc/ngnix/certs 경로에서 읽도록 지정했기 때문에 secret 볼륨을 해당 위치에 마운트하는 것이 필요하다.
fortuen-https 시크릿을 파드에 마운트
- fortune-https 파드를 만드고 인증서와 키를 가지고있는 secret 볼륨을 web-server 컨테이너 안의 적당한 위치에 마운트한다.
Ngnix 가 시크릿의 인증서와 키를 사용하는지 테스트
- 파드가 실행되면 포트 포워드 터널링으로 파드의 43번 포트로 열고 curl 명령으로 HTTPS 트래픽을 제공하는지 확인할 수 있다.
시크릿 볼륨을 메모리에 저장하는 이유
- secret 볼륨은 시크릿 파일을 저장하는 데 인메모리 파일 시스템(tmpfs)을 사용한다. 디스크는 민감한 데이터를 노출시킬 수도 있기 때문이다.
환경변수로 시크릿 항목 노출
- 시크릿의 개별 항목도 환경 변수로 노출할 수 있는데, 다음과 같이 foo 키를 환경변수 FOO_SECRET으로 노출 할 수 있다.
- 이것은 INTERVAL 환경변수를 설정하는 것과 비슷하며, 컨피그 맵을 참조하던 configMapKeyRef 대신 secretKeyRef를 사용해 시크릿을 참조하는 점만 다르다.
7.5.6 이미지를 가져돌 때 사용하는 시크릿 이해
- 프라이빗 컨테이너 이미지 레지스트리를 사용하는 경우처럼 쿠버네티스에서 자격증명을 전달하는 것이 필요할 때가 있다.
도커 허브에서 프라이빗 이미지 사용
- 도커 허브를 통해 프라이빗 레지스트리를 만들 수 있으며, 프라이빗 저장소를 사용하는 파드를 실행하려면 다음 작업이 필요하다.
- 도커 레지스트리 자격증명을 가진 시크릿 생성
- 파드 메니페스트 안에 imagePullSecrets 필드에 해당 시크릿 참조
도커 레지스트리 인증을 위한 시크릿 생성
- 도커 레지스트리 인증에 필요한 자격증명을 저장하는 시크릿을 생성하는 것은 generic 시크릿과 동일하게 kubectl create secret 명령을 사용하지만 옵션과 유형이 다르다.
파드 정의에서 도커 레지스트리 시크릿 사용
- 프라이빗 도커 허브 저장소에서 이미지를 가져올 때 시크릿을 사용하려면 시크릿의 이름을 지정해야 한다.
728x90
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스 인 액션] 12. 쿠버네티스 API 서버 보안 (0) | 2023.02.02 |
---|---|
[쿠버네티스 인 액션] 8. 애플리케이션에서 파드 메타데이터와 그 외의 리소스에 액세스하기 (1) (0) | 2022.11.17 |
[쿠버네티스 인 액션] 7. 컨피그맵과 시크릿 : 애플리케이션 설정 (2) (0) | 2022.11.07 |
[쿠버네티스 인 액션] 7. 컨피그맵과 시크릿 : 애플리케이션 설정 (1) (0) | 2022.11.07 |
[쿠버네티스 인 액션] 6. 볼륨: 컨테이너에 디스크 스토리지 연결 (2) (0) | 2022.10.20 |
Comments