2 minute read

일지

특이 사항 없음

오늘의 할일

  • 220607 TIL 작성
  • Kubernetes udemy 강좌 수강

주요 키워드

k8s

  • 인증과 권한관리

CI/CD

  • 개발 방식, 과정
  • DevOps

공부 정리

서비스어카운트(ServiceAccount)

  • 쿠버네티스 클러스터 내 사용자 계정 리소스
  • 네임스페이스 범위로 생성
  • 사용자 계정 생성 시 사용자 계정의 인증정보를 포함하는 시크릿 리소스가 함께 생성

서비스어카운트 리소스 예시

  apiVersion: v1
  kind: ServiceAccount
  metadata:
    name: <계정이름>
    namespace: default

명령을 사용한 서비스어카운트 리소스 생성

  • kubectl create sa <계정이름>

서비스어카운트와 함께 생성되는 시크릿 정보

  • kubectl get secret
    • <계정명>-token-<임의의5문자>

kubectl 명령어 실행 시 사용되는 사용자 계정의 정보

  • ~/.kube/config

권한 부여

RBAC

  • Role Based Access Control
    • 일반적으로 쿠버네티스 클러스터 내에서 권한을 부여하기 위한 방식
    • 역할 리소스 생성하여 적용 : 역할 바인딩

ABAC

  • Attribute Based Access Control
    • 권한 부여에 대한 내용을 API Server에 직접 설정
    • API 서버에 직접 접근하여 설정 수정 / 설정을 반영하기 위하여 재시작

역할의 종류

  • Role: 네임스페이스 단위로 범위가 제한된 권한 리소스
  • ClusterRole: 전체 클러스터 단위가 범위인 권한 리소스(네임스페이스가 없음)

역할을 사용자에게 연결하기 위한 리소스의 종류

  • RoleBinding: Role을 사용자에게 연결하기 위한 리소스
  • ClusterRoleBinding: ClusterRole을 사용자에게 연결하기 위한 리소스

역할 리소스(Role)

  • 특정 리소스에 대하여 허용할 권한을 명시하는 리소스
  • verbs 항목
    • create : 개체에 대한 생성 권한
    • get : 특정 개체의 개별 정보 조회
    • list : 개체의 목록 조회
    • update : 개체에 대한 전체 내용 갱신 권한
    • patch : 개체에 대한 일부 내용 수정 권한
    • delete : 개별 개체 삭제 권한
    • deletecollection : 다수 개체 삭제 권한
    • watch : 개체가 사용하는 자원 개별 확인

역할 바인딩

  • 역할 개체와 서비스어카운트/그룹을 연결하는 리소스
    • roleRef: 역할 개체의 정보
    • subject: 역할을 부여받을 대상의 정보

클러스터역할(ClusterRole)

  • 네임스페이스 범위가 아닌 전체 클러스터 범위의 권한을 부여하는 역할
  • 알려진 역할
    • cluster-admin: 클러스터 전체에 대한 권한을 가지고 있는 역할
    • admin: 역할/역할바인딩, 네임스페이스 기록권한을 가지고 있지 않고, 나머지권한을 가지고 있는 권한을 가지고 있는 클러스터역할
    • edit: 대부분의 리소스에 대한 읽기/쓰기 권한
    • view: 대부분의 리소스에 대한 읽기 권한

클러스터 역할 바인딩

  • 클러스터 역할을 사용자 및 그룹에 연결하기 위한 리소스

개발

개발 방식의 종류

  • 컴파일러
    • Compiler: 개발자가 작성한 코드를 기계어로 변환
    • 기계어: 0과 1. 실행파일 형태로 작성된 코드
    • 실행 효율이 높음
    • 컴파일 과정이 필요
  • 인터프리터
    • Script의 내용을 Interpreter가 해석
    • 코드의 내용을 라인 단위로 해석하여 실행
    • 별도의 컴파일 과정이 필요하지 않음
    • 실행 효율 등은 낮음

개발 과정

요구사항 분석
소프트웨어 설계
구현
테스트
배포
유지보수

  1. 요구사항 분석
    • 필요로 하는 목표를 탐색
    • 개발 가능 여부
    • 비용/예산 등
  2. 소프트웨어 설계
    • 기능 구현을 위한 논리적 설계, 구조 설계
    • 개발 언어 및 운영 플랫폼
    • 인터페이스
  3. 구현
    • 설계에 따른 프로그래밍
    • 역할 및 업무 분담에 따른 협업
  4. 테스트
    • 기본적인 요구사항에 대한 동작 확인
    • 오류 확인
    • 변경된 요구사항에 대한 반영
  5. 배포
    • 개발된 제품을 운영환경으로 반영
    • 모니터링
  6. 유지보수
    • 추가 요구사항에 대한 반영, 시스템 장애 및 오류에 대한 대응

전통적인 개발 방식의 한계점

  • 코드 통합의 문제
    • 각자 작성한 코드를 통합하는 과정에서 다수의 문제가 발생
    • 테스트 환경 구성 및 코드 통합 작업 등에서 많은 시간이 소요
  • 버전 관리
    • 소스코드 개발 단계 및 테스트 단계에서 버전의 관리가 되지 않을 경우
  • 커뮤니케이션
    • 역할 간 소통 부재로 인한 장애 발생

DevOps

  • Development(개발) + Operations(운영)
  • 전통적인 개발 방식의 문제점을 해결하기 위한 노력
  • 문제점을 해결해 나가기 위한 일종의 ‘문화’
  • 상호존중, 실패에 대한 비난 금지, 긍정적인 자세

DevOps 실천방안

  • 마이크로서비스 아키텍처(MSA) ⇔ 모놀리식 아키텍처
  • IaC: Infrastructure as Code
  • 모니터링, 로깅
  • CI/CD
    • Continuous Integration
      • 지속적 통합
      • 코드 통합 등의 문제(Integration Hell)를 해결하기 위한 과정
      • 개발 코드 공유, 수시로 빌드를 통한 테스트, 자동화
    • Continuous Deploy
      • 지속적 배포
      • 변경된 코드에 대한 즉각적인 배포 수행
      • 자동화

CI/CD

  • 코드 관리(git)
  • CI(Jenkins)
  • CD(ArgoCD)

Categories:

Updated:

Leave a comment