1. Ingress1) 정의- Ingress: 쿠버네티스 클러스터 내부의 여러 서비스를 외부로 노출하기 위한 단일 진입점 역할- 각 서비스 마다 개별적으로 LoadBalance, NodePort를 사용하는 번거로움을 줄임 - 도메인 기반 가상 호스팅: 하나의 Ingress를 통해 여러 도메인 이름(app1.example.com, app2.example.com)으로 트래픽 처리 가능 2) 구성요소 (1) Ingress 리소스 - 외부 트래픽을 클러스터 내부 서비스로 라우팅하기 위한 규칙을 정의하는 객체- 호스트 이름과 URL경로를 기반으로 트래픽을 특정 서비스와 포트로 전달하는 규칙을 담고 있다.(2) Ingress 컨트롤러- Ingress 리소스의 규칙을 구현하는 특수한 로드밸런서 - 대표적인 Ingre..
1. Core DNS1) 정의- 쿠버네티스 클러스터에서 DNS 역할을 수행하는 기본 DNS서버로, 쿠버네티스는 클러스터 내부에서 Pod와 서비스 간의 통신을 윟나 이름 해석을 제공하기 위해 CoreDNS을 사용 - 플러그인 기반 아키텍처로 설계되어 있으며, 유연하고 확장 가능한 DNS 솔루션 2) 주요 역할(1) Pod와 서비스의 이름 해석- Pod와 서비스는 IP 주소 대신 이름으로 서로를 참조 가능 (2) 클러스터 내부 DNS 관리- 클러스터 내에서 생성된 서비스와 Pod에 대해 자동으로 DNS 레코드를 생성 - ClusterIP, NodePort, LoadBalancer 등 모든 서비스 유형에 대해 DNS를 제공 (3) 확장성과 유연성:- 플러그인 기반 구조로 다양한 기능(캐싱,로깅,외부 DNS 포..
1. 쿠버네티스 서비스란?1) 서비스의 정의- 쿠버네티스에서 Pod를 안정적으로 접근할 수 있는 네트워크 엔드포인트를 제공- Pod는 동적으로 생성되고 삭제되므로, 서비스는 고정된 IP주소와 DNS이름을 제공하여 클라이언트가 Pod에 안정적으로 접근 2) 유형(1)ClusterIP- 기본 서비스유형- 클러스터 내부에서만 접근 가능- Pod 간 통신에 사용- DB 와 같은 내부 애플리케이션에서 사용 (2) NodePort- 클러스터 외부에서 접근 가능하도록 노드의 고정포트를 노출- : 형식으로 접근- 웹서버와 같은 외부 어플리케이션에서 사용(3) LoadBalancer - 로드밸런서를 통해 외부 트래픽을 서비스로 라우팅- 클라우드 제공자와 연동이 가능- NodePort와 ClusterIP를 기반으로 동작..
1. CNI1) 정의- 컨테이너 런타임과 네트워크 플러그인 간의 상호작용을 정의하는 표준 인터페이스 2) 역할- 컨테이너 생성 시 네트워크 설정 자동화 - IP 주소 할당 및 라우팅 테이블 구성- 컨테이너 삭제 시 네트워크 정리 (1) 컨테이너 런타임과 CNI- 컨테이너 런타임: 컨테이너를 생성, 실행, 관리하는 소프트웨어로 컨테이너의 핵심적인 동작을 지원하며, 쿠버네티스와 같은 오케스트레이션 도구와 통합되어 클러스트 내에서 컨테이너 배포 및 관리를 자동화 (Docker, Containerd, CRI-O)- 컨테이너 런타임은 CNI 플러그인을 호출하여 Pod의 네트워크를 설정 (2) CNI플러그인의 동작 - 컨테이너 런타임은 Pod 생성시 CNI플러그인을 호출 - CNI 플러그인은 Veth Pair 생성..
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..