728x90

해당 포스팅은 "쿠버네티스 인 액션"을 공부하고 정리한 글입니다. 모든 내용은 해당 도서를 기준으로 합니다.
◼️ 8.1 Downward API로 메타데이터 전달
파드의 IP, 호스트 노드 일므 또는 파드 자체의 이름과 같이 실행 지점까지 알려지지 않은 데이터의 경우에는 쿠버네티스의 Downward API로 해결됨.
- 환경변수 또는 파일로 파드와 해당 환경의 메타데이터를 전달할 수 있음.
Downward API
- 애플리케이션이 호출해서 데이터를 가져오는 REST 엔드포인트와 다름.
- 환경 변수 또는 파이렝 파드의 스펙 또는 상태 값이 채워지도록 하는 방식임.
- 그림 8.1
- 파드 자체의 메타데이터를 해당 파드 내에서 실행 중인 프로세스에 노출할 수 있음.
- 파드의 이름
- 파드의 IP 주소
- 파드가 속한 네임스페이스
- 파드가 실행 중인 노드의 이름
- 파드가 실행 중인 서비스 어카운트 이름
- 각 컨테이너의 CPU와 메모리 요청
- 각 컨테니어늬 CPU와 메모리 제한
- 파드의 레이블
- 파드의 이노테이션
- 위 목록에 있는 대부분의 항목은 환경변수 또는 downwardAPI 볼륨으로 컨테이너에 전달될 수 있지만 레이블과 어노테이션은 볼륨으로만 노출될 수 있음.
◾ 8.1.2 환경변수로 메타데이터 노출하기
(예제 8.1)
(그림 8.2)
- 환경변수와 그 값이 어디에서 왔는지를 보여줌.
- 파드의 이름, IP와 네임스페이스는 각각 POD_NAME, POD_IP와 POD_NAMESPACE 환경 변수로 노출 됨.
- 자원 제한 또는 요청을 노출시키는 환경 변수의 경우 제수를 지정함.
◾ 8.1.3 downwardAPI 볼륨에 파일로 메타데이터 전달
(예제 8.3)
- 환경변수 대신 파일로 메타데이터를 노출하려는 경우 downwardAPI 볼륨을 정의해 컨테이너에 마운트 할 수 있음.
(그림 8.3)
- 각 항목은 메타데이터를 기록할 경로와 파일에 저장할 값의 파드 수준의 필드나 컨테이너 리소스 필드에 대한 참조를 지정함.
레이블과 어노테이션 업데이트
- 파드가 실행되는 동안 레이블과 어노테이션을 수정할 수 있음.
- 레이블이나 어노테이션이 변경될 때 쿠버네티스가 이 값을 갖기ㅗ 있는 파일을 업데이트 해서 파드가 항상 최신 데이터를 볼 수 있도록 함.
- 레이블과 어노테이션이 왜 호나경변수로 노출될 수 없는지도 설명 함.
- 환경변숫값은 나중에 업데이트할 수 없기 때문에 파드의 레이블 또는 어노테이션이 환경변수로 노출된 경우 변경이 발생한 다음에 새로운 값을 노출할 수 있는 방법이 없음.
볼륨 스펙에서 컨테이너 수준의 메타데이터 참조
(예제 8.6)
- 볼륨 스펙 내에서 컨테이너의 리소스 필드를 참조할 때는 참조하는 컨테이너의 이름을 명시적으로 지정해야 함.
- 컨테이너가 하나인 파드에서도 마찬가지임.
Downward API 사용 시기 이해
- 애플리케이션을 쿠버네티스에 독립적으로 유지할 수 있게 함.
- 환경변수의 특정 데이터를 호라용하는 기존 애플리케이션을 처리할 때 특히 유용함.
- 애플리케이션을 다시 짜거나 데이터를 가져와서 환경변수에 노출하는 셸 스크립트를 사용하지 않고도 데이터를 애플리케이션에 노출 할 수 있음.
- 사용 가능한 메타데이터는 상당히 제한적임.
- 더 많은 정보가 필요한 경우 쿠버네티스 API 서버에서 직접 가져와야 함.
◼️ 8.2 쿠버네티스 API 서버와 통신하기
DownwardAPI는 단지 파드 자체의 메타데이터와 모든 파드의 데이터 중 일부만 노출함.
애플리케이션에서 클러스터에 정의된 다른 파드나 리소스에 관한 더 많은 정보가 필요할 수도 있음
- 이 경우 Downward API는 도움이 되지 않음.
(그림 8.4)
kubectl proxy로 쿠버네티스 API 살펴보기
(예제 8.7)
배치 API 그룹의 REST 엔드포인트 살펴보기
(예제 8.8)
클러스터에 있는 모든 잡 인스턴스 나열하기
(예제 8.10)
◾ 8.2.2 파드 내에서 API 서버와 통신
- API 서버의 위치를 찾아야 함.
- API 서버와 통신하고 있는지 확인해야 함.
- API 서버로 인증해야 함.
- 그렇지 않으면 볼 수도 없고 아무것도 할 수 없음.
API 서버와의 통신을 시도하기 위해 파드 실행
(예제 8.12)
파드가 실행 중인 네임스페이스 얻기
(예제 8.14)
파드가 쿠버네티스와 통신하는 방법 정리
- 애플리케이션은 API 서버의 인증서가 인증 기관으로부터 서명됐는지를 검증해야 하며, 인증 기관의 인증서는 ca.cart 파일에 있음.
- 애플리케이션은 token 파일의 내용을 Authorization HTTP 헤더에 Bearer 토큰으로 넣으 전송해서 자신을 인증해야 함.
- namespace 파일은 파드의 네임스페이스 안에 있는 API 오브젝트의 CRUD 작업을 수행할 때 네임스페이스를 API 서버로 전달하는 데 사용해야 함.
(그림 8.5)
앰배서더 컨테이너 패턴 소개
- API 서버와 직접 통신하는 대신 메인 컨테이너 옆의 앰배서더 컨테이너에서 kubectl proxy를 실행하고 이를 통해 API 서버와 통신할 수 있음.
- API 서버와 직접 통신하는 대신 메인 컨테이너의 애플리케이션은 HTTPS 대신 HTTP로 앰배서더에 연결하고 앰배서더 프록시가 API 서버에 대한 HTTPS 연결을 처리하도록 해 보안을 투명하게 관리할 수 있음.
(그림 8.6)
(예제 8.15)
(예제 8.16)
(그림 8.7)
728x90