Skip to content

juu-n-oo/resource-group-controller

 
 

Repository files navigation

Resource Group Controller

개요

Resource Group Controller는 다음과 같은 기능을 제공하는 쿠버네티스 컨트롤러 입니다

  • 네임스페이스에 특정 노드를 전용 할당하는 작업의 자동화

  • 네임스페이스 관리자의 보편적인 권한을 가지는 Role, ClusterRole 생성 및 할당 자동화

설치법

  • Prerequisites

    • kubectl 사용 가능 상태

    • ClusterRole(cluster-admin) 권한

    • 직접 소스를 빌드하지 않고 Docker Hub에 배포된 이미지를 사용하려면 반드시 릴리즈 태그로 체크아웃 하세요

      • 예: git checkout tags/v1.0.0

  1. 프로젝트 클론

    git clone https://github.com/ten1010-io/resource-group-controller.git
    cd resource-group-controller
    # checkout branch or tag you want to use
    # example: git checkout tags/v1.0.0
  2. 빌드 (릴리즈 태그 체크아웃시 생략 가능)

    ./build-images.sh
    # distribute image to all nodes
  3. 인증서 설정 및 쿠버네티스에 배포

    cd kubernetes/controller/cert
    ./configure.sh
    cd ..
    kubectl apply -k .

사용법

모든 설정은 ResourceGroup 커스텀 리소스를 사용합니다.

  • case 1 : 네임스페이스에 노드 전용 할당하기

    아래 예제는 ns1 네임스페이스에 node1 노드를 전용 할당합니다.

    apiVersion: resource-group.ten1010.io/v1beta1
    kind: ResourceGroup
    metadata:
      name: group1
    spec:
      nodes: ["node1"]
      namespaces: ["ns1"]
      daemonSet:
        daemonSets: []
      subjects: []
  • case 2 : 데몬셋 등록하기

    특정 데몬셋의 팟이 그룹의 노드에 스케쥴링 되는 것을 허용합니다.

    네임스페이스와는 다르게 daemonSet 필드로 등록한 데몬셋에 대한 권한은 그룹의 subject에 할당되지 않습니다.

    apiVersion: resource-group.ten1010.io/v1beta1
    kind: ResourceGroup
    metadata:
      name: group1
    spec:
      nodes: ["node1"]
      namespaces: ["ns1"]
      daemonSet:
        daemonSets:
          - namespace: ds1
            name: ds1
      subjects: []
  • case 3 : 네임스페이스 관리자 역할(Role) 생성 및 할당하기(RoleBinding)

    아래 예제는 user1 유저에게 ns1 네임스페이스의 관리자 권한을 할당합니다.

    apiVersion: resource-group.ten1010.io/v1beta1
    kind: ResourceGroup
    metadata:
      name: group1
    spec:
      nodes: ["node1"]
      namespaces: ["ns1"]
      daemonSet:
        daemonSets: []
      subjects:
        - apiGroup: "rbac.authorization.k8s.io"
          kind: "User"
          name: "user1"

자동 생성되는 역할

ResourceGroup을 생성하면 그룹내 네임스페이의 관리자 역할(Role)이 자동 생성되며 subjects 필드에 존재하는 모든 subject에 할당됩니다.

자동 생성되는 역할은 그룹 내 네임스페이스에 존재하는 아래와 같은 리소스의 CRUD 권한을 가집니다.

1. core api
    1. Pod
    2. Service
    3. ConfigMap
    4. Secret
    5. PersistentVolumeClaim
    6. ServiceAccount
    7. LimitRange
    8. Event
    9. ReplicationController
2. events.k8s.io api
    1. Event
3. batch api
    1. Job
    2. CronJob
4. apps api
    1. Deployment
    2. StatefulSet
    3. Daemonset
    4. ReplicaSet
5. autoscaling api
    1. HorizontalPodAutoscaler
6. policy api
    1. PodDisruptionBudget

지원하는 workload controller

1. batch/CronJob
2. apps/Daemonset
3. apps/Deployment
4. batch/Job
5. apps/ReplicaSet
6. core/ReplicationController
7. apps/StatefulSet

보안 취약점 리포팅

보안 취약점 발견시 절대 이슈에 리포팅하지 마시고 [email protected]으로 리포팅해주세요.

버그 리포팅 및 개선 사항, 질의

버그를 발견하시거나 개선 사항, 질의가 있다면 Github Issue를 열어주세요.

About

Resource Group Controller

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.3%
  • Other 0.7%