1. 쿠버네티스 클러스터의 네트워크 기본 구성1) 클러스터 구조(1) 마스터 노드- 쿠버네티스 컨트롤 플레인을 실행 - API 서버, 스케줄러, 컨트롤러 매니저, ETCD와 같은 주요 컴포넌트를 포함(2) 워커 노드- 애플리케이션 워크로드를 실행하여, kubelet과 kube-proxy가 동작 2) 네트워크 요구 사항(1) 노드 인터페이스 - 각 노드는 최소 하나 이상의 네트워크 인터페이스를 가져야 하며, 이 인터페이스는 고유한 IP 주소를 가져야 함 - 각 노드는 고유한 호스트 이름과 MAC 주소를 가져야 하며, 이는 특히 VM을 복제하여 생성한 경우 확인해야 함.(2) 마스터 노드 필수 포트- 6443: Kubernetes API 서버 포트- 10259: Kubernetes 스케줄러 사용 포트- 1..
1. 볼륨1) 컨테이너와 Pod 의 특성- Docker 컨테이너와 쿠버네티스 파드는 일시적으로 설계되었습니다. 작업 완료 후 삭제 되며, 내부데이터도 함께 사라짐- Kubernetes의 파드도 일시적이며, 파드가 삭제되면 데이터도 삭제됨 2) 쿠버네티스에서 볼륨 사용- 쿠버네티스의 파드도 일시적이며 파드가 삭제되면 데이터도 사라짐- 따라서 중요한 데이터의 유실을 방지하기 위해 볼륨을 파드에 연결하여 데이터를 외부에 저장하여 데이터를 독립적으로 유지3) 볼륨 구현 예제 apiVersion: v1kind: Podmetadata: name: random-number-generatorspec: containers: - image: alpine name: alpine command: [..
1. Network Policies 1) 정의(1) Kubernetes에서 특정 파드 그룹이 서로 및 다른 네트워크 엔트포인트와 어떻게 통신할 수 있는지를 정의 - IP 주소, 포트 수준에서 작동하며 ingress(들어오는), egress(나가는) 트래픽을 허용 및 차단하며 관리한다. 2) 네트워크 정책의 구성요소 apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: example-policy namespace: defaultspec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - podSelecto..
1. Authorization Mode1) Authorization Mode란?(1) 정의- Kubernetes API 서버는 클라이언트 요청 처리하기 전에 인증과 권한 부여를 수행 - 클라이언트가 요청한 작업(리소스 생성, 수정, 삭제 등)이 허용되는지 확인- 기본적으로 모든 요청은 거부(Deny by Default). 즉, 명시적으로 허용되지 않은 요청은 차단 --> 여기에 RBAC,ABAC등을 통해 요청을 허용하면 된다. 2. 주요 Authorization Modes1) AlwaysAllow- 모든 요청을 허용- 디버깅이나 테스트 환경에서 주로 사용2) AlwaysDeny- 모든 요청을 거부- 테스트 목적으로만 사용(특정 시나리오에서 API 서버접근을 완전히 차단하고 싶을때)3) ABAC(1) 정의..
1. API 그룹1) API 그룹이란?(1) 정의: Kubernetes의 리소스를 논리적으로 그룹화하여 관리하는 그룹. 새로운 기능을 추가하거나 기존 기능을 유지 관리하기 쉽게 만들어줌. - 각 그룹에서는 특정 리소스(pod 등)과 동작('get','create','delete')을 정의합니다. (2) 필요성:- 리소스의 모듈화: API를 모듈화하여 필요한 리소스의 경우, 해당 모듈에만 추가함으로써, 확장가능성을 높였다. 또한 각 리소스 API 그룹마다 충돌하지 않도록 모듈처럼 설계하였다.2) 보안성:- 일부 API 그룹들의 엔드포인트는 공개적으로 내용을 조회할 수 있지만, 일부는 그렇지 않다. - 조회하기 위해서 추가적인 승인절차가 요구된다. (1) 공개 API 그룹들:- Kubernetes API ..
1. 사용자 등록 및 승인- 'jane'이라는 승인할 때 쿠버네티스에 등록하자 1) 생성과정 (1) 개인키 및 CSR 생성 ##개인키 생성openssl genrsa -out jane.key 2048##CSR 생성openssl req -new -key jane.key -out jane.csr -subj "/CN=jane/O=developers" (2)CSR 제출##jane-csr.yaml 파일 등록kubectl apply -f jane-csr.yaml##jane-csr.yamlapiVersion: certificates.k8s.io/v1kind: CertificateSigningRequestmetadata: name: janespec: request: $(cat jane.csr | base64 | tr..
1. 쿠버네티스 구성요소(ETCD, Kubelet, Kube Scheduler)등 주요 요소 간 안전한 통신을 위해, TLS인증서를 통해 암호화한다. 1) 네트워크 정책 : 클러스터에서 Pod 간의 트래픽과 Pod과 외부 네트워크 간의 트래픽을 제어하는 규칙- By default, 모든 트래픽 허용 --> 규칙을 설정해서 특정 트래픽만 허용하도록 제한 가능즉, 아무것도 정의되지 않으면, 모든 트래픽이 허용되고, 규칙이 추가될 시, 명시된 규칙에 적힌 트래픽만 통과.##192.168.1.0/24:80에서 오는 트래픽만 Pod에 허용 apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: allow-specific-ingress names..
1. 리소스 구성 백업1) 데이터 저장소- 쿠버네티스의 모든 구성정보는 etcd에 저장 - 애플리케이션이 영구 스토리지를 사용하고 있다면, 이 또한 백업 대상이 됩니다. 2) 구성 파일 관리- 선언적 접근 방식: YAML 파일을 사용하여 리소스를 정의하고 kubectl apply 명령어로 적용. 이 방식은 구성 파일을 소스 코드 저장소에 저장하여 팀이 관리 - 명령적 접근 방식: kubectl create 명령어를 사용하여 직접 리소스를 생성. 이 경우, 별도의 기록이 없으면 추적이 어려울 수 있음 3) Kube API 서버 쿼리- kubectl get all -all-namespaces -o yaml >all-deploy-services.yaml 명령어를 사용하여 모든 네임스페이스의 리소스를 YAML ..
1. 쿠버네티스 버전 1) 쿠버네티스 버전 체계- 주 버전, 부 버전, 패치버전으로 구성된 세가지 숫자로 버전을 관리- Semantic Versioning을 따르며 각 버전이 어떤 종류의 변경을 포함하는지를 이해하는 데 도움을 줌 - 주버전: 주요 변경사항을 포함하며, 이전 버전과 호환되지 않을 수 있다.- 부버전: 새로운 기능과 개선사항을 포함하며, 기존 배포와 호환 - 패치 버전: 버그 수정 및 보안 취약점 해결에 중점 2) 릴리스 주기- 쿠버네티스는 일반적으로 매년 세 번의 주요 릴리스를 발표. (1) 릴리스 주기 단계- 알파 릴리스: 초기 기능이 도입되며 기본적으로 비활성화되어 있음. 불안정- 베타 릴리스: 기능이 기본적으로 활성화되며, 안정성을 위해 철저히 테스트- 안정 릴리스: 완전히 테스트된..
1. Cordon, Drain, Uncordon1) 노드 관리: Cordon과 Drain- 운영체제 업그레이드 수행하기 전에, 해당 노드에서 실행중인 워크로드를 안전하게 처리하기 위해, cordon,drain,uncordon 명령어를 활용(1) Cordon: 노드 스케줄링 비할성화- kubectl cordon : 해당 노드를 스케줄링 불가능 상태로 설정(SchedulingDisabled)- 이 명령은 새로운 Pod이 해당 노드에 배치되지 않도록 하지만, 기존 Pod는 그대로 유지 (2) Drain: 워크로드 이동- kubectl drain : 명령어는 해당 노드에 존재하는 모든 Pod을 제거하고, 다른 노드로 재배치- DaemonSet과 같은 특정 Pod은 기본적으로 이동되지 않으므로 '--ignor..