쿠버네티스 클라우드 컨트롤러 매니저

앞선 쿠버네티스 컴포넌트 글에서 클라우드 컨트롤러 매니저는 컨트롤 플레인 컴포넌트라고 했다.

클라우드 공급자와 통신하여 클라우드 환경에서 필요한 리소스를 관리하는 역할을 담당한다.

 

클라우드 컨트롤러 매니저의 기능

노드 컨트롤러

클라우드 인프라스트럭처에 새 서버가 생성될 때 노드를 업데이트하는 역할

클라우드 공급자의 사용자 테넌시 내에서 실행되는 호스트에 대한 정보를 가져온다.

여기서 사용다 테넌시(user tenancy)는 클라우드 환경에서 사용되는 용어로, 동일한 클라우드 서비스를 사용하는 사용자 그룹 또는 조직을 구분하는 데 사용된다. 클라우드 환경에서 사용자 또는 조직 간의 경계를 정의하고 각각 독립적인 환경을 제공하는 그룹이라고 한다.

  • 클라우드 공급자 API를 통해 획득한 서버의 고유 id를 노드에 업데이트
  • 클라우드 관련 정보를 사용해 노드에 어노테이션과 레이블을 작성
  • 노드의 호스트 이름과 네트워크 주소 가져옴
  • 노드 상태 확인

라우트 컨트롤러

사용자의 쿠버네티스 클러스터의 다른 노드에 있는 각각 컨테이너가 서로 통신할 수 있도록 클라우드에서 라우트를 적절히 구성한다.

서비스 컨트롤러

쿠버네티스 클러스터 내에서 서비스 리소스를 관리

서비스 리소스를 생성하기도 하고 클러스터 내부에서 서비스를 찾기 위한 DNS 이름이나 IP주소를 사용할 수 있도록 도와준다.

서비스 컨트롤러는 로드 밸런서를 사용하여 클러스터 내에서 서비스로의 트래픽을 여러 파드에 분산시키기도 한다.

 

인가

공식문서에 인가에 대한 파트가 있는데 뭔 소리인지 이해가 안가서 영어로 보니 클라우드 컨트롤러 매니저가 작업을 수행하기 위해서 API에 하는 필요한 작업들을 설명하는거 같다.(아닌거 같으면 말해주세요.)

노드 컨트롤러

노드 컨트롤러는 노드 오브젝트를 읽고 수정하려면 전체 접근권한이 필요하다.

v1/Node를 사용하는데 이는 쿠버네티스 API의 한부분으로 클러스터 내의 서비스를 다루는 엔드포인트이다.

서비스는 지난 글에 파드 집합에 대한 단일 진입점이라고 하였다.

v1/Node:

  • Get : 특정 노드의 상세정보 가져오기
  • List : 클러스터 내의 모든 노드 목록 가져오기
  • Create : 새로운 노드를 클러스터에 추가
  • Update : 기존 노드 속성을 수정
  • Patch : 기존 노드의 일부 속성을 변경
  • Watch : 노드 오브젝트에 대한 실시간 이벤트 수신(노드 변경사항에 대해 이벤트 스트리밍)
  • Delete : 특정 노드를 클러스터에서 제거

라우트 컨트롤러

라우트 컨트롤러는 노드의 생성을 수신하고 적절하게 라우트를 구성해야하기 때문에 노드에 대한 접근 권한이 필요하다.

v1/Node:

  • Get

서비스 컨트롤러

서비스에 접근하려면 목록과 감시 접근 권한이 필요하고, 서비스를 업데이트 하려면 패치와 업데이트 접근 권한이 필요하다. 또한 엔드포인트를 설정하려면 생성, 목록, 가져오기, 감시, 업데이트에 대한 접근권한이 필요하다.

v1/Service:

  • Get: 특정 서비스의 상세 정보를 가져온다.
  • List: 클러스터 내의 모든 서비스의 목록을 가져온다.
  • Watch : 클러스터 내의 서비스 객체에 대한 변경사항을 실시간으로 감시
  • Patch : 서비스 객체의 일부 정보를 수정
  • Update : 서비스 객체의 전체 정보를 수정

그외

클라우드 컨트롤러 매니저 핵심 구현을 위해서는 이벤트 오프젝트 생성과 안전한 작동 보장을 위해 서비스 어카운트를 생성해야한다고 한다.

이벤트 오브젝트는 클러스터 내에서 발생하는 중요한 이벤트 정보를 포함하고 클러스터 상태를 모니터링 하고 추적하는데 사용된다.

서비스 어카운트는 클러스터 내 컴포넌트에 인증이나 권한을 부여하는데 사용된다. ccm은 이 서비스 어카운트를 활용해서 클라우드 공급자의 API에 접근하고 필요한 작업을 수행한다.

v1/Event:

  • Create
  • Patch
  • Update

v1/ServiceAccount:

  • Create

RBAC 클러스터롤

공식문서에 클라우드 컨트롤러 매니저의 RBAC 클러스터롤은 다음과 같다고 나와있었다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cloud-controller-manager
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - '*'
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - persistentvolumes
  verbs:
  - get
  - list
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - endpoints
  verbs:
  - create
  - get
  - list
  - watch
  - update

우선 RBAC는 클러스터내에서 사용자나 그룹이나 서비스 어카운트에 특정 작업이나 리소스에 대한 권한을 할당하는 매커니즘을 제공한다고 하는데 클러스터 전역에서 사용되는 권한에 대한 정의인것 같다. 

위의 규칙을 살펴보면

evnets에 대해 create, patch, update에 대한 권한을 부여하고 있고

node에 대해서는 모든(*)동작을 부여하고 있다.

이런식으로 읽어나가면 되는거 같다.

myoskin