220607 Today I Learned
일지
특이 사항 없음
오늘의 할일
- 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문자> 임의의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가 해석
- 코드의 내용을 라인 단위로 해석하여 실행
- 별도의 컴파일 과정이 필요하지 않음
- 실행 효율 등은 낮음
개발 과정
요구사항 분석
소프트웨어 설계
구현
테스트
배포
유지보수
- 요구사항 분석
- 필요로 하는 목표를 탐색
- 개발 가능 여부
- 비용/예산 등
- 소프트웨어 설계
- 기능 구현을 위한 논리적 설계, 구조 설계
- 개발 언어 및 운영 플랫폼
- 인터페이스
- 구현
- 설계에 따른 프로그래밍
- 역할 및 업무 분담에 따른 협업
- 테스트
- 기본적인 요구사항에 대한 동작 확인
- 오류 확인
- 변경된 요구사항에 대한 반영
- 배포
- 개발된 제품을 운영환경으로 반영
- 모니터링
- 유지보수
- 추가 요구사항에 대한 반영, 시스템 장애 및 오류에 대한 대응
전통적인 개발 방식의 한계점
- 코드 통합의 문제
- 각자 작성한 코드를 통합하는 과정에서 다수의 문제가 발생
- 테스트 환경 구성 및 코드 통합 작업 등에서 많은 시간이 소요
- 버전 관리
- 소스코드 개발 단계 및 테스트 단계에서 버전의 관리가 되지 않을 경우
- 커뮤니케이션
- 역할 간 소통 부재로 인한 장애 발생
DevOps
- Development(개발) + Operations(운영)
- 전통적인 개발 방식의 문제점을 해결하기 위한 노력
- 문제점을 해결해 나가기 위한 일종의 ‘문화’
- 상호존중, 실패에 대한 비난 금지, 긍정적인 자세
DevOps 실천방안
- 마이크로서비스 아키텍처(MSA) ⇔ 모놀리식 아키텍처
- IaC: Infrastructure as Code
- 모니터링, 로깅
- CI/CD
- Continuous Integration
- 지속적 통합
- 코드 통합 등의 문제(Integration Hell)를 해결하기 위한 과정
- 개발 코드 공유, 수시로 빌드를 통한 테스트, 자동화
- Continuous Deploy
- 지속적 배포
- 변경된 코드에 대한 즉각적인 배포 수행
- 자동화
- Continuous Integration
CI/CD
- 코드 관리(git)
- CI(Jenkins)
- CD(ArgoCD)
Leave a comment