kubernetes에서 API란?
1. REST API는 쿠버네티스의 근본적인 구조이다.
2. 모든 조작, 컴포넌트 간의 통신과 외부 사용자의 명령은 API 서버에서 처리할 수 있는 REST API 호출된다.
3. 쿠버네티스 플랫폼 안의 모든 것은 API 오브젝트로 취급되고, API에 상응하는 항목이 있다.
예)
API 버전 규칙
- 알파(Alpha)
- 버전 이름에 alpha가 포함된다(예: v1alpha1).
- 버그가 있을 수도 있다. 이 기능을 활성화하면 버그에 노출될 수 있다. 기본적으로 비활성화되어 있다.
- 기능에 대한 기술 지원이 언제든 공지 없이 중단될 수 있다.
- 다음 소프트웨어를 릴리스할 때 공지 없이 API의 호환성이 깨지는 방식으로 변경될 수 있다.
버그에 대한 위험이 높고 장기간 지원되지 않으므로 단기간 테스트 용도의 클러스터에서만 사용하기를 권장한다.
- 베타(Beta)
- 버전 이름에 beta가 포함된다(예: v2beta3).
- 코드가 잘 테스트 되었다. 이 기능을 활성화해도 안전하다. 기본적으로 활성화되어 있다.
- 구체적인 내용이 바뀔 수는 있지만, 전반적인 기능에 대한 기술 지원이 중단되지 않는다.
- 오브젝트에 대한 스키마나 문법이 다음 베타 또는 안정화 릴리스에서 호환되지 않는 방식으로 바뀔 수도 있다. 이런 경우, 다음 버전으로 이관할 수 있는 가이드가 제공된다. 스키마 변경은 API 오브젝트의 삭제, 편집 또는 재생성이 필요할 수도 있다. 편집 절차는 좀 생각해볼 필요가 있다. 이 기능에 의존하고 있는 애플리케이션은 다운타임이 필요할 수도 있다.
- 이 소프트웨어는 프로덕션 용도로 권장하지 않는다. 이후 여러 버전에서 호환되지 않는 변경 사항이 적용될 수 있다. 복수의 클러스터를 가지고 있어서 독립적으로 업그레이드할 수 있다면, 이런 제약에서 벗어날 수도 있다.
- 안정화(Stable)
- 버전 이름이 vX이고 X 는 정수다.
- 안정화 버전의 기능은 이후 여러 버전에 걸쳐서 소프트웨어 릴리스에 포함된다.
API 그룹
- 쿠버네티스 API를 더 쉽게 확장
- API 그룹은 REST 경로와 직렬화된 오브젝트의 apiVersion 필드에 명시
- /apis/GROUPNAME/VERSION
- apiVersion: GROUPNAME/VERSION
- API 그룹 활성화 / 비활성화 방법
- 특정 리소스 및 API 그룹은 기본적으로 활성화
- API 서버에서 --runtime-config 를 설정하여 활성화 또는 비활성화
- 비활성화 : --runtime-config=batch/v1=false
- 활성화 : --runtime-config=batch/v2alpha1
API에 접근 방법
kubectl, 클라이언트 라이브러리, REST 요청으로 API에 접근할수 있음.
-
전송 보안
- 쿠버네티스 클러스터에서 API는 443번 포트에서 서비스하고, API 서버는 인증서를 제시함.
- 인증서는 종종 자체 서명되기 때문에 일반적으로 사용자 머신의 $USER/.kube/config는 API 서버의 인증서에 대한 루트 인증서를 포함한다.
-
인증 (Authentication)
- TLS가 설정되면 HTTP 요청이 인증 단계로 넘어간다
- 클러스터 생성 스크립트 또는 클러스터 관리자는 API 서버가 하나 이상의 인증기 모듈을 실행하도록 구성
- 인증은 HTTP 요청이지만 일반적으로 헤더 그리고/또는 클라이언트 인증서를 검사한다.
- 인증 모듈
- 여러개 지정 할수 있음, 인증 성공될때까지 각 모듈이 순차적으로 시도됨
- 클라이언트 인증서
- 암호 및 일반 토큰
- 부트스트랩 토큰
- JWT 토큰(서비스 어카운트에 사용됨)
- 인증 실패
-
인가(Authorization)
- 요청이 인증된 후에는 인가되어야 한다
- 절차
- 사용자가 요청할 수 있는 작업에 대한 정책을 선언 할수 있다.
- 요청에는 username, 작업 및 해당 작업이 영향을 주는 오브젝트를 포함해야 한다.
- 예) 1. 아래와 같이 Bob에게 projectCaribou 네임스페이스에서만 파드를 읽을수 있는 정책을 선언한다.
- 예) 2. 아래와 같이 Bob이 projectCaribou namespace pod에 요청할수 있음.
- create, update는할 수 없음
- 인가 모듈
- 가 모듈이 2개 이상 구성되면 쿠버네티스가 각 모듈을 확인하고, 어느 모듈이 요청을 승인하면 요청을 진행
- ABAC, RBAC, WebHook mode 여러개의 인가 모듈을 지원
- 인가 실패
-
Admission Control
- 요청을 수정하거나, 거부할 수 있는 소프트웨어 모듈
- 오브젝트를 생성, 수정, 삭제 또는 (프록시에) 연결하는 요청에 따라 작동
- 여러 개의 어드미션 컨트롤러가 구성되면 순서대로 호출된다.
- 절차
API 서버 포트와 IP
- localhost port:
- 테스트 및 부트스트랩을 하기 위한 것이며 마스터 노드의 다른 구성요소 (스케줄러, 컨트롤러 매니저)가 API와 통신하기 위한 것이다.
- TLS가 없다.
- 기본 포트는 8080이며, --insecure-port 플래그를 사용하여 변경한다.
- 기본 IP는 로컬호스트(localhost)이며, --insecure-bind-address 플래그를 사용하여 변경한다.
- 요청이 인증 및 인가 모듈을 우회한다.
- 요청이 어드미션 제어 모듈(들)에 의해 처리된다.
- 호스트 접근 요구로부터 보호를 받는다.
- secure port
- 가능한 항상 사용하는 것이 좋다.
- TLS를 사용한다. --tls-cert-file 플래그로 인증서를 지정하고 --tls-private-key-file 플래그로 키를 지정한다.
- 기본 포트는 6443이며, --secure-port 플래그를 사용하여 변경한다.
- 기본 IP는 로컬호스트가 아닌 첫 번째 네트워크 인터페이스이며, --bind-address 플래그를 사용하여 변경한다.
- 요청이 인증 및 인가 모듈에 의해 처리된다.
- 요청이 어드미션 제어 모듈(들)에 의해 처리된다.
- 인증 및 인가 모듈을 실행한다.