Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Machine Learning
- php
- mariadb
- python
- Redis
- rabbitmq
- nodejs
- deep learning
- Redux
- CentOS
- phpredis
- Node
- linux
- fastapi
- javascript
- 블레이드 템플릿
- nginx
- Babel
- For
- Go
- webpack
- Backbone.js
- SQL
- 기초 수학
- laravel
- AWS
- docker
- Switch
- NCP
- React
Archives
- Today
- Total
개발일기
NCP(Naver Cloud Platform) - Containers 정리 본문
728x90
반응형
Container Repository
Docker Registry v2 스펙의 프라이빗 도커 컨테이너 이미지 저장소
- 컨테이너 이미지를 손쉽게 저장, 관리 및 배포 가능
- 도커 컨테이너의 이미지 조회, 삭제 및 메타 데이터 관리 가능
- 도커 레지스트리 HTTP API V2를 지원하며 Docker CLI를 통해 컨테이너 레지스트리와 연동
- API 작업(Change, View)를 설정할 수 있어 저장소의 다른 사용자와 공유 가능
- 매니저(Change, View) : 도커 컨테이너 이미지 업로드(Push), 다운로드(Pull), 레지스트리 및 컨테이너 이미지 삭제 권한
- 뷰어(View) : 컨테이너 이미지 다운로드(Pull) 권한
- Sub Account를 사용하여 권한 제어 및 모니터링 가능하며 사용자, 역할별로 다른 권한을 지정하여 정책 세분화
- Public, Private Endpoint 제공하여 내부 네트워크에 환경에서만 사용하거나 외부망을 통한 사용자 접근을 차단시켜 보안 강화 가능
- CVE 체계를 기반으로 컨테이너 이미지의 취약점을 식별 가능하며 제공 받은 스캔 결과를 기반으로 취약점을 제거하여 컨테이너 보안 강화
- 업로드한 프라이빗 도커 컨테이너 이미지를 Objest Storage에 저장
- 서브 계정에 Manager, Viewer의 권한 부여
- 메모 : 업로드한 이미지에 내용 식별 가능한 메모 입력 가능
- Short Description : 100자 이내에 간단한 메모 입력
- Full Description : Markdown 양식 지원하며 메타 데이터 기술 가능
- 추가적인 요금 청구는 없으며 연동된 Object Storage에 대한 요금만 청구
- Object Storage와 연동하여 프라이빗 도커 컨테이너 이미지를 Push, Pull하여 활용 가능
- 컨테이너 이미지와 연동된 Object Storage 수정, 삭제 시 정상 동작이 되지않음
- Private Endpoint : NCP의 VPC 네트워크 내에서만 사용 가능한 엔드포인트. 사설 통신 구간에 해당하기에 Object Storage 버킷과 통신 시 네트워크 요금 발생
- <random-id>.<region-code>.private-ncr.ntruss.com
- Public Endpoint : 외부 인터넷 사용 환경 구성 필요. NAT Gateway와 Public Subnet으로 구성되며 Public IP 필요
- <registry-name>.<region-code>.ncr.ntruss.com
- WORM, Lifecycle Management, ACL 기능이 활성화된 경우 Container Repository와 연동된 Object Storage의 기능이 정상 작동하지 않을 수 있음
- ACL 기능 활성 시, 접근 제어가 설정된 서버에서 Private Endpoint를 이용한 컨테이너 레지스트리 서비스 이용 가능
- 컨테이너 레지스트리와 이미 연동된 Object Storage는 추가로 연동 불가. 연동 필요 시, 새로운 스토리지 생성 필요
- 퍼블릭 엔드포인트를 활성화하면 외부 네트워크 이용이 가능한 환경에서 Container Registry사용 가능
- 퍼블릭 엔드포인트를 비활성화 상태면 Container Registry는 공개되지 않으며, 비활성 상태여도 프라이빗 레지스트리는 네트워크 환경 내에서 이용 가능
- 퍼블릭 레지스트리는 권한이 없는 사용자도 이미지를 다운로드(Pull)할 수 있도록 설정하는 기능
- 퍼블릭 레지스트리가 활성화 상태여도 권한이 없는 사용자는 이미지 업로드(Push)는 불가능
- 운영 중인 레지스트리를 삭제할 수 있으며 레지스트리를 삭제해도 Object Storage에 저장된 도커 컨테이너 이미지는 유지됨
- 보안 취약점
- 컨테이너 이미지를 수동으로 스캔하거나 이미지가 업로드될 때, 자동으로 취약점 스캔 가능. 자동으로 스캔하는 Scan on push 기능은 추가적인 요금이 발생
- 보안 취약점은 High-level, Medium-level, Low-level, Negligible-level, Unknown-level 순으로 구분하여 표시
- CVE : 보안 취약점을 식별하여 나타내는 번호 형식을 나타내며 [CVE-연도-일련번호] 형식으로 보안 취약점 1개 마다 CVE ID 1개가 부여되어 생성
- CVSS는 보안 취약점의 심각도를 0~10 점수로 표현하며 점수가 높을수록 보안이 취약
Kubernetes Service
- 쿠버네티스는 애플리케이션의 컨테이너화, 배포, 스케일링, 관리 등을 자동화하는 오픈 소스 플랫폼
- 복잡하고 반복적인 클러스터 설정 작업을 간소화
- 작업자 노드와 관리형 제어 영역 사이의 안전한 통신 제공하며 작업자 노드를 빠르게 프로비저닝하여 확장
- 온 디맨드 업그레이드 및 패치 가능
- CPU 사용률, 직접 설정한 측정값에 기반한 수평형 pod 자동 확장, 노드 풀별로 실행되는 클러스터 자동 확장 등의 자동 확장 기능 제공
- Docker Bridge 대역의 충동 방지를 위해 172.17.0.0/16 범위 내의 Private Subnet, 로드 밸런서 전용 서브넷 사용 불가
- 클러스터
- 클러스터 생성시, Private 서브넷은 최대 5개까지 선택 가능
- 클러스터의 노드풀은 최대 10개까지 생성하여 추가 가능하여 서브넷을 활용할 수 있는 IP 수와 VM 생성 한도에 따라 설정할 수 있는 최대 노드 수가 결정
- kuberctl은 클러스터 제어에 사용되는 CLI
- 클러스터 상세 정보 보기의 Audit Log를 활성화하면 CLA에서 로그 수집 가능
- kubeconfig 설정 파일을 재설정할 수 있으며 새로이 만들어진 설정 파일을 다운로드하여 사용해야함
- 클러스터 Autoscaler를 사용하여 클러스터를 자동으로 확장, 축소 가능
- Autoscaler는 사용자가 요청한 Pod의 자원량에 비해 클러스터 자원이 부족한 경우 자동으로 노드를 증가시키며 일정 시간 동안 특정 노드의 사용률이 낮게 유지되면 노드 개수 감소
- Autoscaler 사용 중에는 노드 개수를 수동으로 변경 불가능
- Controller에 의해 제어되지 않거나 Local Storage가 설정된 경우, 다른 노드로 Pod가 이동 불가능한 경우, 어노테이션 safe-to-evict가 false로 설정된 경우 노드 사용률이 낮아도 노드 개수가 감소하지 않음
- PodDisruptionBudget를 통해 클러스터가 업그레이드 중에도 서비스 중인 Pod를 원하는 비율, 개수로 유지 가능
- Readiness Probe를 통해 Pod가 재배치될 때, Pod가 서비스 가능 상태일때만 쿠버네티스 리소스를 통해 접근 가능하도록 설정 가능
- 공인 IP 주소를 기반으로 Kubernetes Control Plane에 대한 IP ACL을 최대 20개까지 등록하여 설정
- 접근 소스 - IPv4 기반의 CIDR Block
- 액션 - 접근 소스 CIDR에 해당하는 IP가 접근 시 처리할 방법 선택
- 메모 - 입력할 규칙에 대한 메모 작성
- 노드풀의 정보는 노드 라벨에 추가되며 ‘ncloud.com/nks-nodepool: { 노드풀 이름 }’ 형태로 표시
- ncp-iam-authenticator를 통해 IAM 인증을 제공
- ALB Ingress Controller
- ALB Ingress Controller를 통해 Kubernetes Ingress를 로드 밸런서와 연동하여 트래픽 라우팅 가능
- Kubernetes Ingress가 생성되면 Ingress는 설정 값을 활용하여 로드밸런서 인스턴스 생성
- 생성된 로드밸런서 인스턴스의 Ingress Rule에서 설정한 서비스의 노트 포트를 포트 값으로 사용시, 타겟 그룹을 생성하고 인스턴스에 등록
- 생성된 로드밸런서의 설정 변경은 반드시 Kubernets에서 생성된 Ingress 리소스 수정을 통해 진행
- ALB Ingress Controller 생성시, 필요한 Service Account, ClusterRole, ClusterRoleBinding, IngressClass가 함께 생성
- Service Type : NodePort - Ingress를 통해 노출시킬 서비스는 모두 NodePort 타입으로 생성
- Default Rule : 매칭되는 규칙이 없을 때 적용. 별도의 규칙 및 use-annotation 설정은 불가능하며, 기본 80포트로 설정된 기본 타겟 그룹이 생성. spec.defaultBackend에서 규칙 설정 가능
- Rule Priority : Ingress에 정의한 규칙의 순서에 따라 우선순위 결정
- Block Storage CSI
- 컨테이너 재시작, 프로세스 종료 후에도 새로 추가된 파일들이 유지되도록 설정
- CSI (Container Storage Interface)를 제공하여 블록 스토리지 생성, 삭제, 리사이징 등의 작업 지원
- 10GB 단위로 용량 할당 가능하며, 별도 정의가 없을 경우 기본값인 20GB로 블록 스토리지 생성. 최대 2,000GB까지 확장 가능
- 각 스토리지의 정책과 타입을 설정한 Storage Class 오브젝트 제공
- 볼륨의 생성, 삭제, 할당, 할당 해제, 스냅샷 등의 각종 제어와 관리를 담당하는 CSI Controller 인터페이스 제공
- 쿠버네티스의 워커 노드마다 하나씩 동작하는 CSI노드는 볼륨의 포맷, 마운트, 언마운트 등을 담당
- NAS Volume CSI
- Block Storage CSI와 동일하게 컨테이너 재시작, 프로세스 종료 후에도 새로 추가된 파일들이 유지되도록 설정
- NAS 볼륨 컨테이너를 배포할 때, PVC(Persistent Volume Claim)를 생성하여 추가 가능
- 100GB 단위로 용량 할당이 가능하며, 별도 정의가 없을 경우 기본값인 500GB로 NAS 볼륨 생성. 최대 10,000GB까지 확장 가능
- Storage Class, CSI Controller, CSI Node 등을 지원
- PVC는 요청된 리소스를 삭제하여도 함께 삭제되지 않으므로 별도의 명령어를 입력하여 삭제(kubectl —kubeconfig $KUBE_CONFIG delete pvc static-pvc)
- NFS Client Provisioner
- PVC를 통해 구성된 기존의 NFS 서버에 Persistent Volume을 자동 생성하는 프로비져너
- Helm CLI를 사용해 NAS 서비스에 생성된 볼륨 연동 가능
- Cluster Monitoring
- 클러스터내 리소스들에 대한 사용량을 수집하여 Cloud Insight 전달시켜 대시보드에서 수집된 데이터를 확인할 수 있게 하는 모니터링 서비스
- namespace내 pod들에 대한 모니터링은 지원하지 않음
- Grafana - 시계열 데이터에 대한 시각화 제공 도구. 클러스터 하위 목록의 모니터링 항목에서 해당 링크 확인 가능하며 Cloud Insight로 전송된 데이터를 대시보드에서 확인 가능
- GPU Node
- KR리전에서만 사용 가능하며 외부 통신이 필요하기에 NAT Gateway를 반드시 생성해야함(Private Subnet)
- 쿠버네티스 서비스에서 제공되는 기본 오브젝트는 일반 노드를 필요로 하기에 일반 노드풀에 GPU 노드풀을 추가하여 사용(GPU Node로만 구성된 클러스터는 사용에 제약 발생)
- Velero 플러그인
- 클러스터 백업이 필요한 경우 사용
- 쿠버네티스 객체를 Object Storage에 압축, 백업하며 클러스터의 Persistent Volume에 대한 스냅샷을 생성하여 이전 상태로 복원 가능
- 아웃바운드 인터넷 트래픽 활성화를 위해 NAT Gateway 생성 필요
- 클러스터 권한 제어
- InitScript
- 미리 작성해 둔 스크립트를 실행하여 노드의 초기 환경 관리 진행
- DaemonSet으로 생성되어 각 노드에 스케줄링
- 서버 생성 스크립트와 유사하지만 다른 방식이며 DaemonSet으로 동작하므로 CRI, Kubelet 설정에는 관여하지 않음
- 특정 스크립트를 실행하려면 InitScript Daemonset이 환경변수 값으로 BASE4로 인코딩 된 스크립트 내용 기재
- Private CA Issuer
- TLS 인증서 라이프 사이클 관리를 위해 cert-manager 사용. 이를 통해 인증서, 인증서 발급자를 추가하고 해당 인증서를 획득, 갱신 및 사용하는 프로세스를 단순화
- cert-manager로 다양한 지원 소스에서 인증서 발급을 할 수 잇으며 Private CA를 위한 오픈 소스 플러그인 제공
- cert-manager의 External Issuer로 사용할 수 있도록 지원
- OpenID Connect(OIDC)
- 클러스터 인증 방식으로 OIDC 제공자를 추가하여 OIDC 인증 사용자의 역할, 권한을 구성하여 권한 부여
- 하나의 OIDC 제공자만 설정 가능하며 Self Signed 인증서를 사용하는 제공자는 지원하지 않음
- 공개 서명 키를 검색할 수 있도록 OIDC 제공자에게 공개적으로 접근가능해야 하기에 NAT Gateway추가와 Routing 설정이 필요
- OIDC 인증 설정
- 필수 정보
- Issuer URL : API 서버가 공개 서명 키를 검색할 수 있도록 하는 URL. https URL만 허용되며, 하위 경로가 없는 검색 URL
- Client ID : OIDC 제공자의 Client ID
- 부가 정보
- Username claim : username 사용 claim이며 기본값은 sub. 다른 플러그인과 충돌을 막기 위해 Issuer URL이 접두사로 붙음
- Groups claim : groups로 사용할 JWT claim. 존재할 경우 문자열 배열
- Username prefix : username과의 충돌을 방지하기 위해 Username claim 앞에 접두사로 추가
- Groups prefix : 기존 groups와의 충돌을 방지하기 위해 Groups claim 앞에 접두사로 추가
- Required claim : ID 토큰에 필수 claim을 지정하는 key=value 쌍. 설정된 경우 ID 토큰에서 일치하는 claim이 있는지 확인 후 ‘’,로 구분하여 여러 claim을 지정
- 필수 정보
참고 사이트 :
https://guide.ncloud-docs.com/docs
https://guide.ncloud-docs.com/docs/containerregistry-overview
728x90
반응형
'자격증 > NCP' 카테고리의 다른 글
NCP(Naver Cloud Platform) - Architecture 정리 (0) | 2022.12.24 |
---|---|
NCP(Naver Cloud Platform) - Analytics 정리 (0) | 2022.12.24 |
NCP(Naver Cloud Platform) - Media 정리 (0) | 2022.11.23 |
NCP(Naver Cloud Platform) - AI / Application 정리 (0) | 2022.11.18 |
NCP(Naver Cloud Platform) - Security 정리 (0) | 2022.11.18 |
Comments