클라우드 엔지니어 면접 질문 정리 - 쿠버네티스 편

1. 클라우드 엔지니어 면접 질문 정리 - 쿠버네티스 편

1. 쿠버네티스란?

컨테이너화된 애플리케이션을 관리하는 도구로, 효율적인 배포, 확장, 유지가 가능한 오픈 소스 컨테이너 오케스트레이션 도구입니다.


2. 쿠버네티스의 주요 구성 요소는 무엇인가요?

쿠버네티스는 API를 관리하는 control-plane 과 실제 애플리케이션 워크로드를 띄우는 worker node로 구성됩니다.

control-plane에는 api-server, scheduler, controller-manager, etcd, core-dns로 구성되어있습니다.

 

이때 각각의 worker node들은 kube-proxy를 통해 통신하며 마스터와 상호작용하기 위해 kubelet이 동작합니다.


3. 오케스트레이션의 의미를 아는지?

오케스트레이션이란 컨테이너와 연결된 리소스를 자동으로 관리하고 조정해주는 것을 의미합니다.

쿠버네티스에서는 네트워크, 배포, 확장, 자가치유 등을 통한 리소스 관리를 의미합니다.


4. 쿠버네티스 서비스는 무엇이고, 타입에는 어떤 것들이 있고 각각 역할이 무엇인지?

같은 기능을 하는 파드의 집합에 대한 단일 DNS와 IP를 부여하여 로드밸런싱을 수행하는 리소스입니다.

ClusterIP: 서비스의 기본 타입으로 클러스터 내부에서만 접근할 수 있는 IP를 통해 Pod로 접속할 수 있습니다.

NodePort: ClusterIP와 반대로 클러스터의 IP주소와 NodePort를 통해 외부에서 접속할 수 있습니다.

LoadBalancer: CSP의 로드 밸런서와 연결하여 외부 트래픽을 클라우드 쿠버네티스 클러스터 내로 포워딩 해줍니다.

ExternalName: 클러스터내의 서비스를 조회하여 외부 서버에 대한 CNAME(Domain Name) 정보를 얻어 외부 서비스에 접근할 수 있습니다.


5. 쿠버네티스와 도커 스웜의 차이점에 대해
초기 설정 사용자 친화적, 초기 설정 간단 설정과 관리가 복잡, 높은 유연성과 확장성 제공
스케일링 빠른 서비스 시작 대규모 클러스터와 애플리케이션 지원
로드 밸런싱 자동 포트 게시 NodePort나 LoadBalancer 사용 필요
데이터 볼륨 로컬 볼륨, 스토리지 드라이버 사용 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC) 사용
업데이트 전략 rolling updates 사용 다양한 전략 제공 (예: RollingUpdate, Recreate)
통합 및 플러그인 Docker API 통합, 좋은 플러그인 호환성 넓은 생태계, 다양한 클라우드/스토리지/네트워크 통합 옵션
커뮤니티 및 지원 Docker, Inc. 지원, 상대적으로 적은 활동 강력한 커뮤니티, 여러 대기업 지원

6. ETCD란?

ETCD란 쿠버네티스 클러스터 내의 리소스 정보들을 key-value 형태로 저장한 데이터베이스입니다.

etcd에 저장도니 리소스 정보들을 바탕으로 scheduler는 어느 노드에 워크로드를 생성할지 판단하고

controller-manager는 워크로드의 수를 보장합니다.


7. 쿠버네티스 API 보안을 위한 솔루션에는 어떤 것들이 있습니까?

RBAC의 RoleBinding을 통한 사용자 및 Service Account에 대한 리소스 제어가 있습니다.

NetworkPolicy를 통한 IP, 파드, 네임스페이스, 포트에 대한 인바운드 아웃바운드 제어가 가능합니다.


8. 쿠버네티스 클러스터로 API 요청을 하는 방법에 대해서

kubectl, REST API, 프로그래밍 언어를 이용한 라이브러리 사용, kubectl proxy, Dashboard 등이 있습니다.


9. Ingress의 동작 원리에 대해서 알려주세요.

Ingress-Controller에 의해서 Ingress의 라우팅 정보를 습득한 후에

경로와 포트에 맞는 서비스를 타고 워크로드로 트래픽이 로드밸런싱 됩니다.


10. 특정 네임스페이스에 리소스를 제한하고 싶다면 어떻게 해야 하는가?

ResourceQuota를 이용하여 CPU 코어수와 메모리 크기를 제한할 수 있습니다.

또한, 특정 시간 이후로 자동으로 네임스페이스를 삭제하려고 할 때 TTL 옵션을 통해 주어진 시간 이후에 해당 네임스페이스를 자동으로 삭제할 수 있습니다


11. admin.conf 파일에는 어떤 정보들이 들어있는지?

admin.conf 파일은 클러스터 설정, 인증 정보, 연결할 클러스터 정보 등을 포함하고 있어

kubectl과 같은 클라이언트 도구로 클러스터와 통신하기 위한 용도로 사용됩니다.

클러스터에 대한 CA 인증서, 사용자 정보(토큰), 클러스터 정보, 현재 사용중인 context 등에 대한 정보가 담겨있습니다.


12. 쿠버네티스 버전 업그레이드 방식에 대해서 설명해주세요

먼저 kubeadm 버전을 확인하고 업데이트 버전을 다운받아 설치합니다.

control-plane 노드를 drain하고 kubectl, kubelet 업데이트 버전을 설치합니다.

시스템 데몬을 재시작하고, kubelet을 재시작합니다.


13. MSA의 장단점

Agile하게 독립적으로 서비스마다 배포가 가능하다는 것이며, 부하가 많은 서비스만 따로 수평적인 확장이 가능합니다.

하지만, 모놀리식에 비해 상대적으로 복잡하고 트랜잭션 등 고려해야 할 요소들이 많습니다.


14. Docker가 무엇인지 설명해주세요

Docker는 오픈소스 가상화 플랫폼으로 Host 운영체제가 달라도  항상 같은 환경에서 애플리케이션을 실행할 수 있도록 이미지화 할 수 있습니다.


15. Pod란 무엇인가요

Pod는 쿠버네티스에서 가장 기본적인 배포 단위이며, 하나 이상의 컨테이너를 포함하고 있습니다.


16. ReplicaSet의 목적은 무엇인가요?

Pod의 개수를 일정하게 보장해주기 위해 생성하는 리소스입니다.

control-plane의 controller-manager에 의해서 Pod의 개수가 일정하게 보장됩니다.


17. ConfigMap과 Secret의 차이는 무엇인가요?

기본적인 마운트 방식은 같지만 Secret의 경우에는 base64 타입으로 인코딩 되어 값이 저장됩니다.

일반적인 애플리케이션의 환경 설정에 필요한 변수들은 ConfigMap을 통해 저장하고,

애플리케이션이 동작하기 위해 필요한 Credential 등은 Secret을 이용해 저장합니다.


18. 쿠버네티스의 네트워킹 방식에 대해서 설명해주세요

1. Pod가 생성될 때, CNI 플러그인을 호출하여 해당 Pod에 대한 네트워크를 구성합니다.

2. 외부에서 특정 Pod나 Service에 접근하려 할 때, kube-proxy는 이를 감지하고 iptables 규칙을 사용하여 트래픽을 적절한 Pod로 라우팅합니다.

 

정리) CNI는 Pod의 네트워크 인터페이스와 관련된 기본 설정을 담당하고, 실질적인 트래픽 라우팅 및 로드밸런싱은 kube-proxy와 iptables이 담당합니다.


19. HPA(Horizontal Pod AutoScaling)에 대해서 설명해주세요

HPA는 metric-server에 의해 수집된 Pod의 CPU 및 메모리 사용량을 바탕으로 

수평적 확장 및 축소가 가능하게 해주는 기능입니다.


20. Rolling Update | Blue-Green | Canary Deployment에 대해 비교 설명 해주세요

Rolling Update는 업데이트된 파드를 성공적으로 띄우고 이전 버전의 파드를 지우면서 순차적으로 업데이트 하는 방식

Blue-Green은 별도의 Deployment를 이용하여 현재 버전(Blue)와 업데이트 버전(Green)을 동시에 준비하여 트래픽을 전환하는 방식으로 배포하는 방식

Canary는 새버전의 애플리케이션을 일부 사용자에게만 제공하는 방식입니다.


21. QoS에 대해서 설명해주세요

파드의 각 컨테이너를 띄울 때 우선순위를 정할 때 사용합니다.

limit과 request이 같은 Guaranteed,

limit이 더 큰 Burstable,

아무 설정을 하지 않은 BestEffort 순으로 우선순위가 정해집니다.


22. liveness vs readiness probes의 차이점에 대해서 설명해주세요

LivenessProbe의 경우에는 조건을 충족하지 못했을 때 Pod를 재시작합니다.

ReadinessProbe의 경우에는 조건을 충족하지 못했을 때 트래픽을 차단합니다.

※ ReadinessProbe의 경우에는 트래픽이 너무 과부하 되어서 조건을 충족하지 못할 때 트래픽을 잠시 차단하여 트래픽 부하를 덜어주는 기능을 수행할 수도 있습니다.


23. AWS 클라우드 환경의 쿠버네티스에서 IAM Role을 사용한 접근 제어 방법에 대해서 설명해주세요.

ServiceAccount의 어노테이션으로 IAM Role을 등록해줍니다.

권한에 대한 정의는 Role을 생성해주고 RoleBinding을 통해 ServiceAccount에 권한을 생성해줍니다.

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123412341234:role/my-role
  name: aws-sa
  namespace: default

24. Anti Affinity에 대해서 설명해주세요.

각각의 Pod들이 모두 다른 노드 혹은 다른 AZ에서 실행되게 설정하는 것입니다.

https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#an-example-of-a-pod-that-uses-pod-affinity

 

Assigning Pods to Nodes

You can constrain a Pod so that it is restricted to run on particular node(s), or to prefer to run on particular nodes. There are several ways to do this and the recommended approaches all use label selectors to facilitate the selection. Often, you do not

kubernetes.io


25. PDB(Pod Disruption Budget)에 대해서 설명해주세요.

Pod를 일괄적으로 업데이트할 때 최소한의 가용성을 유지하기 위해, 최대로 삭제할 수 있는 Pod의 개수를 제한하는 것을 의미합니다.


26. ReplicaSet과 Deployment의 차이는 무엇인가요?

Deployment는 ReplicaSet과 달리 롤백, 롤아웃 기능을 제공하며 버전관리가 가능합니다.


28. 쿠버네티스의 드레인(Drain) 작업의 목적은 무엇인가요?

해당 노드에 더이상 파드를 스케쥴링하지 않도록 설정하는 용도입니다.


29. 쿠버네티스의 네트워크 폴리시(Network Policy)에 대해 설명하세요.

Pod, Namespace, IP, Port를 기준으로 In & Out 트래픽을 제어하는 네트워크 제어 규칙입니다.


30. Affinity와 Anti-Affinity에 대해 설명하세요.

Affinity:
Node Affinity 

Pod가 특정 노드 레이블에 기반하여 스케줄링되도록 선호하는 노드를 지정하는 규칙을 정의할 수 있습니다.


Pod Affinity 

Pod가 특정 조건을 만족하는 다른 Pod와 같은 노드에 배치되도록 선호하는 규칙을 정의할 수 있습니다. 

 

Anti-Affinity:
Node Anti-Affinity

Pod가 특정 노드 레이블을 가진 노드에서 배치되는 것을 방지하는 규칙을 정의할 수 있습니다. 


Pod Anti-Affinity

Pod가 특정 조건을 만족하는 다른 Pod와 같은 노드에 배치되는 것을 방지하는 규칙을 정의할 수 있습니다. 이는 고가용성을 증가시키기 위해 유용하며, 한 노드에서 실패할 경우 모든 연관된 Pod가 동시에 실패하는 것을 방지하려는 경우에 사용됩니다.


31. StatefulSet의 주요 용도는 무엇인가요?

Stateful한 애플리케이션을 관리하기 위한 것입니다. 데이터베이스나, 캐시서버와 같이 특정 상태를 유지해야하는 애플리케이션이 다운되는 경우 재실행되더라도 같은 상태를 유지하기 위해 StatefulSet을 사용합니다.


32. 쿠브컨트롤(kubectl) 명령어 중 자주 사용하는 것들은 무엇인가요?

get, describe, run, create, apply, replace, logs, exec -it -- /bin/bash, edit, delete, config, top, rollout, scale, set image, ...


33. 쿠버네티스의 라벨과 어노테이션의 차이점은 무엇인가요?

라벨은 객체를 식별하고 선택하기 위한 용도이고,

어노테이션은 리소스에 대한 특정 도구나 라이브러리에 정보를 제공하기 위해 사용됩니다.

따라서, 라벨을 이용하여 리소스를 필터링할 수 있지만, 어노테이션은 불가능합니다.


34. 쿠버네티스에 있는 Namespace의 목적은 무엇인가요?

쿠버네티스 리소스들을 논리적으로 분리,

네임스페이스별 리소스 제한,

RBAC, NetworkPolicy등을 이용한 엑세스 제한


35. 쿠버네티스의 헬스 체크 종류에 대해 설명하세요.

Liveness, Readiness, Startup Probe가 있습니다.

Liveness Probe는 컨테이너가 정상적으로 동작 중인지 확인하며, 비정상적일 때 컨테이너를 재시작합니다.

Readiness Probe는 컨테이너가 요청을 처리할 준비가 되었는지 확인하며, 비정상적일 때 트래픽을 차단합니다.

Startup Probe는 컨테이너가 시작됐는지 확인합니다.

이러한 Probe들은

HTTP GET, TCP Socket, 특정 명령어를 기반으로 컨테이너가 정상적으로 동작됐는지 확인할 수 있습니다.


36. Job과 CronJob의 차이점은 무엇인가요?

Job은 일회성으로 한번 실행되고 종료되지만, CronJob은 일정 주기로 반복해서 실행됩니다.


37. 쿠버네티스에서 로드 밸런싱이 어떻게 이루어지나요?

Service를 이용하여 Pod들에 대한 단일 진입점(IP, Domain Name)을 통해 로드밸런싱 됩니다.

Ingress를 이용하여 L7 로드밸런싱이 가능합니다.


38. 쿠버네티스의 초기화 컨테이너(Init Containers)의 목적은 무엇인가요?

다른 컨테이너들이 실행되기 전에 가장 먼저 실행되는 컨테이너입니다.

실행되기 전에 필요한 서비스, 리소스, 조건 등이 올바르게 구성되었는지 확인하는데 사용됩니다.


39. CNI(Container Network Interface)에 대해 설명해주세요.

쿠버네티스와 같은 오케스트레이션 플랫폼에서는 CNI를 사용하여 컨테이너 간의 통신, 서비스 디스커버리, 로드 밸런싱 등의 네트워킹 요구 사항을 구현합니다. 


40. 쿠버네티스의 보안 기능 중 일부를 나열하고 설명하세요.

RBAC의 RoleBinding을 통한 사용자 및 Service Account에 대한 리소스 제어가 있습니다.

NetworkPolicy를 통한 IP, 파드, 네임스페이스, 포트에 대한 인바운드 아웃바운드 제어가 가능합니다.


41. 어떻게 컨테이너 간의 통신을 제어하나요?

생략


42. 쿠버네티스에서 스토리지 클래스(StorageClass)의 역할은 무엇인가요?

다양한 스토리지 유형과 해당 스토리지의 구성을 정의하게 해주는 리소스입니다.

동적 프로비저닝, 다양한 스토리지, 스토리지 설정 등이 가능합니다.


43. 쿠버네티스의 Custom Resource Definition(CRD)에 대해 설명하세요.

쿠버네티스 API를 사용하여 기본 오브젝트 외에도 커스터마이징한 리소스를 정의하고 사용할 수 있습니다.


44. DaemonSet의 주요 용도는 무엇인가요?

각 노드에 하나의 파드 인스턴스를 생성 및 보장하기 위해 사용됩니다.

모든 노드에서 지속적으로 생성되어야 하는 백그라운드 작업이나, 서비스를 관리하기 위해 사용됩니다.

ex) 모니터링, 로깅, 네트워크


45. 쿠버네티스에서의 오토스케일링 전략에 대해 설명해주세요.

HPA: 파드의 수를 자동으로 확장 및 축소합니다.

VPA: 파드의  CPU 및 메모리 리소스 요청 및 제한을 자동으로 조정합니다.

Cluster Autoscaler: CSP에서 제공하는 VM의 경우에는 인스턴스 스펙에 따라 최대 생성할 수 있는 파드의 수가 정해져있습니다. 따라서 Clsuter Autoscaler를 이용하여 노드의 개수를 조정할 수 있습니다.


46. 쿠버네티스의 연합(Federation) 클러스터의 장점은 무엇인가요?

여러 클러스터를 중앙에서 통합으로 관리할 수 있습니다. 

가용성이 높습니다.


47. 쿠버네티스의 API 서버는 어떤 역할을 하나요?

쿠버네티스 API-Server는 클러스터 내로 들어오는 모든 API 요청을 관리하는 역할을 합니다.

해당 API요청에 대한 인증 및 인가 처리를 하고 받은 API 요청에 따라 쿠버네티스 오브젝트 CRUD를 수행합니다.

특정 리소스로 들어오는 요청을 적절하게 라우팅합니다.


48. 쿠버네티스의 스케쥴러(Scheduler)의 작동 원리는 무엇인가요?

Pod를 어느 Node에 배치할지 결정하는 역할을 합니다.

1. Pod를 배치할 수 있는 Node를 필터링하고,

2. 메트릭 정보를 통해 우선순위 규칙에 맞게 노드 점수를 산정합니다.

3. 가장 높은 점수를 받은 Node에 파드를 할당하고, 같은 점수가 있을 경우 selectHost() 함수를 사용하여 라운드-로빈 방식으로 할당합니다.


49. 쿠버네티스에서 민감한 정보를 관리하는 베스트 프랙티스는 무엇인가요?

1. Secret 리소스를 사용하여 정보를 저장합니다. Secret은 기본적으로 base64 인코딩이 되어 저장되기 때문에 추가적인 암호 설정을 위한 플러그인이 필요합니다.(ex. HashiCorp Vault)

2. RBAC을 사용하여 Secret에 대한 접근을 차단합니다.

3. ETCD 데이터 암호화: KMS같은 서비스를 이용하여 ETCD에 저장되는 데이터 자체를 암호화합니다.


50. 쿠버네티스에서 어떻게 롤백(Rollback)을 수행하나요?

Deployment를 사용하여 배포한 애플리케이션의 경우 히스토리 기능이 있어

kubectl rollout undo 명령어를 이용하여 롤백할 수 있습니다.


51. 쿠버네티스에서의 파드 간 연결은 어떻게 이루어지나요?

파드 및 서비스의 IP나 Domain Name을 통해 이루어집니다.

각 노드에는 kube-proxy가 존재하며 kube-proxy의 iptables에 따라 통신이 이루어집니다.


52. 쿠버네티스의 티인트(Taint)와 톨러레이션(Toleration)에 대해 설명하세요.

Taint는 특정 노드에 스케쥴링을 제어하는 역할을 하고 Toleration은 Taint 설정된 노드에도 스케쥴링 될 수 있도록 합니다.

키:값:옵션 의 형태로 Taint를 설정할 수 있는데

옵션에는 NoSchedule, PreferNoSchedule, NoExecute, NodeCondition 등이 있습니다.


53. 쿠버네티스의 서비스 계정(Service Account)의 목적은 무엇인가요?

파드가 클러스터 내의 다른 쿠버네티스 API 리소스와 통신하기 위해 사용되는 계정입니다.


54. 쿠버네티스의 컨트롤 플레인(Control Plane)에 포함된 주요 구성요소는 무엇인가요?

api-server, controller-manager, etcd, scheduler가 있습니다.


55. 쿠버네티스에서 스토리지를 프로비저닝(Provisioning)하는 방법에는 어떤 것들이 있나요?

정적 프로비저닝과 동적 프로비저닝이 있습니다.

정적 프로비저닝은 볼륨을 수동으로 생성하여 PV를 정의하고 PVC에 바인딩하여 파드에서 사용하는 방법이고

동적 프로비저닝은 SotrageClass를 이용하여 사용자가 정의한 요구사항을 기반으로 동적으로 볼륨을 생성하고 바인딩하여 파드에서 사용하는 방법입니다.


56. Admission Controller에 대해 설명해주세요.

쿠버네티스 API를 특정 조건에 따라 거부하거나,

자동으로 오브젝트 생성시 환경변수나 볼륨을 자동으로 추가하는 등의 로직을 수행할 수 있습니다.

대표적으로 존재하지 않는 네임스페이스에 오브젝트를 생성하는 것을 막거나

네임스페이스에 할당된 리소스 할당 제한을 오브젝트에 적용하거나

보안 정책을 추가하거나 할 수 있습니다.


클라우드 엔지니어 면접 질문 정리 - 네트워크 편

OSI 7 Layer

서로 다른 시스템 또는 장치간의 네트워크 통신을 위한 표준 모델

1. Physical: 통신 채널을 위한 원시 비트 전송 / 케이블, 무선 신호, 광섬유 등의 물리적 매체

- Ethernet, USB, Bluetooth

2. Data Link: 네트워크상에 인접한 두 노드 간에 오류없는 데이터 전송 제공, 흐름제어, 오류감지, 오류수정을 위한 프로토콜

- ARP, VLAN

3. Network: 데이터 패킷의 경로를 설정하고 라우팅을 수행

- IP, ICMP

4. Transport: 데이터 전송을 관리, 오류 복구 및 흐름 제어

- TCP, UDP

5. Session: 통신 세션 설정, 관리, 종료 처리

- NetBIOS

6. Presentation: 데이터 변환, 암호화, 압축

- SSL/TLS, JPEG, GIF, MPEG, ASCII, ...

7. Application: 애플리케이션과 네트워크 간 인터페이스 제공

- HTTP, FTP, SMTP, POP3, DNS, DHCP, ...


대표적인 프로토콜

1. Ethernet
계층: 물리 계층 (Physical Layer) 및 데이터 링크 계층 (Data Link Layer)
설명: 네트워크 장치 간의 데이터 프레임 전송을 위한 기술로, 대부분의 LAN에서 사용됩니다.


2. ARP (Address Resolution Protocol)
계층: 데이터 링크 계층 (Data Link Layer)
설명: IP 주소를 해당 네트워크의 MAC 주소로 변환하는 프로토콜입니다.


3. VLAN (Virtual Local Area Network)
계층: 데이터 링크 계층 (Data Link Layer)
설명: 물리적 네트워크 내에서 논리적으로 분리된 네트워크 그룹을 생성하는 기술입니다.

 

4. IP (Internet Protocol)
계층: 네트워크 계층 (Network Layer)
설명: 데이터 패킷을 소스에서 목적지로 라우팅하는 프로토콜입니다.

 

5. ICMP (Internet Control Message Protocol)
계층: 네트워크 계층 (Network Layer)
설명: 네트워크 통신 중 오류 메시지나 다른 정보를 전송하는 데 사용되는 프로토콜입니다.

 

6. TCP (Transmission Control Protocol)
계층: 전송 계층 (Transport Layer)
설명: 연결 지향적이며 신뢰성 있는 데이터 전송을 제공하는 프로토콜입니다.

 

7. UDP (User Datagram Protocol)
계층: 전송 계층 (Transport Layer)
설명: 연결을 설정하지 않고 데이터를 전송하는 프로토콜로, 빠른 전송을 위해 사용됩니다.

 

8. gRPC (Remote Procedure Call)
계층: 응용 계층 (Application Layer)
설명: Google에서 개발한 RPC 프로토콜로, Protocol Buffers를 사용하여 효율적인 통신을 제공합니다.

네트워크 상의 다른 컴퓨터에서 프로시저나 함수를 호출하기 위한 프로토콜입니다.


9. gRPC vs HTTP
설명: Binary vs JSON

 

10. SSL/TLS (Secure Sockets Layer/Transport Layer Security)
계층: 표현 계층 (Presentation Layer) 및 응용 계층 (Application Layer)
설명: 네트워크 통신의 보안을 제공하는 암호화 프로토콜입니다.

 

11. HTTP (HyperText Transfer Protocol)
계층: 응용 계층 (Application Layer)
설명: 웹 브라우저와 서버 간의 문서 전송을 위한 프로토콜입니다.

 

12. FTP (File Transfer Protocol)
계층: 응용 계층 (Application Layer)
설명: 파일을 전송하기 위한 프로토콜입니다.

 

13.DNS (Domain Name System)
계층: 응용 계층 (Application Layer)
설명: 도메인 이름을 IP 주소로 변환하거나 그 반대의 작업을 수행하는 시스템입니다.

 

14. DHCP (Dynamic Host Configuration Protocol)
계층: 응용 계층 (Application Layer)
설명: 네트워크에 연결된 장치에 자동으로 IP 주소를 할당하는 프로토콜입니다.


Ipv4 vs Ipv6

8bit x 4

16bit x 8

네트워크 주소 개수의 한계를 해결하기 위해 도입됐지만, 사설 IP와 NAT가 등장하면서 Ipv4로도 가능.


정적 프로토콜 vs 동적 프로토콜

네트워크 관리자의 개입 여부에 따라서 나뉜다.

정적 프로토콜의 경우에는 정적 라우팅처럼 직접 관리자가 경로를 설정


라우팅 프로토콜 vs 라우티드 프로토콜

라우팅 프로토콜은 라우터 간에 경로 정보를 교환하고, 최적의 경로를 동적으로 학습하기 위해 사용되는 프로토콜

라우티드 프로토콜은 사용자의 데이터를 인터넷에 연결하여 전송하기 위해 사용되는 프로토콜


CIDR(Classless Inter-Domain Routing)

클래스 기반의 IP 주소 체계를 버리고 서브넷마스크를 이용한 서브네팅 기술로

IP 주소를 환경에 따라 효율적으로 사용할 수 있게 해주는 IP 주소 체계


Subnet

큰 IP 주소를 여러개의 작은 IP 주소 그룹으로 나누어 효율적으로 IP 주소를 관리하는 것을 의미


3 way handshake & 4 way handshake

3 way handshake는 TCP 연결 설정 과정에서 신뢰성 있는 연결을 위해 사용되는 매커니즘

SYN: 서버에 연결 요청(클라이언트의 초기 시퀀스 번호)

SYN(서버의 초기 시퀀스 번호) + ACK(클라이언트의 초기 시퀀스 번호 + 1)

ACK(서버의 초기 시퀀스 번호 + 1)

이 과정을 통해서 양쪽 모두 연결 준비가 되었음을 확인하고, 초기 시퀀스 번호를 동기화합니다.


Proxy

1. Forward Proxy

보안: 클라이언트와 인터넷 사이에 위치하는 프록시로 내부 서버가 직접 외부와 통신하지 않게 하는 역할을 합니다.

캐싱: 자주 접근하는 콘텐츠를 캐싱하여 리소스 사용을 줄입니다.

익명성: 실제 클라이언트의 IP 주소를 숨기고 프록시 IP 주소를 사용하여 통신합니다.

 

2. Reverse Proxy

로드밸런싱: 들어오는 요청을 여러 서버에 분산시킵니다.

SSL/TLS 종료: SSL/TLS 연결을 종료하고 내부에서느 암호화되지 않은 형태로 수행 가능

캐싱, 보안, 익명성

 

Forward Proxy는 클라이언트 측에서 작동하여 클라이언트의 요청을 대리로 처리하며, 주로 사용자의 요청을 제어하거나 수정하는 데 사용됩니다. 반면, Reverse Proxy는 서버 측에서 작동하여 서버의 응답을 대리로 처리하며, 주로 서버의 부하 분산, 보안, 성능 최적화 등의 목적으로 사용됩니다.


Load Balancer

Layer 4 (전송 계층) 
특징: 주로 TCP 및 UDP 트래픽을 기반으로 로드 밸런싱을 수행합니다. 클라이언트의 IP 주소, 대상 IP 주소, 포트 번호 등의 정보를 사용하여 트래픽을 분산시킵니다.
장점: 처리 속도가 빠르며, 오버헤드가 적습니다.
단점: 응용 프로그램의 상태나 데이터의 내용을 고려하지 않기 때문에, 더 세밀한 로드 밸런싱이 필요한 경우에는 적합하지 않을 수 있습니다.

 

Layer 4 스위치:
기능: 전송 계층의 정보 (예: 포트 번호)를 기반으로 트래픽을 전달합니다. 일반적으로 Layer 4 스위치는 고성능의 로드 밸런서로 사용되기도 합니다.
특징: 빠른 처리 속도와 효율적인 트래픽 분산이 가능합니다.


Layer 7 (응용 계층) 로드 밸런싱:
특징: HTTP/HTTPS 헤더, URL, 쿠키, SSL 세션 ID 등의 응용 계층 데이터를 기반으로 로드 밸런싱을 수행합니다.
장점: 사용자 요청의 내용을 기반으로 트래픽을 분산시킬 수 있어, 더 세밀하고 지능적인 로드 밸런싱이 가능합니다.
단점: 처리 속도가 Layer 4 로드 밸런싱에 비해 느릴 수 있으며, 오버헤드가 더 클 수 있습니다.
스위치:

 

Layer 7 스위치:
기능: 응용 계층의 정보 (예: HTTP 헤더, URL)를 기반으로 트래픽을 전달합니다. 이를 통해 특정 URL 또는 서비스 요청을 특정 서버로 라우팅하는 등의 고급 기능을 수행할 수 있습니다.
특징: 응용 프로그램의 상태나 요청의 내용을 기반으로 트래픽을 라우팅할 수 있습니다.
결론적으로, Layer 4와 Layer 7에서의 로드 밸런싱 및 스위치의 주요 차이점은 처리하는 데이터의 깊이와 그에 따른 세밀함에 있습니다. Layer 7은 더 고급 기능을 제공할 수 있지만, 처리 속도와 오버헤드 측면에서는 Layer 4가 더 효율적일 수 있습니다.


NAT(Network Address Translation)

IP 주소를 변환하는 것을 의미하고 대표적으로 공인 IP를 사설 IP 주소로 변환하여 하나의 공인 IP로도 다수의 시스템과 통신할 수 있도록 함


Bastion Host

보안을 목적으로 DMZ 영역의 특정 서비스에 대한 접근을 허용하거나 제한하기 위해

외부와 서비스 사이에 위치하여 통신을 제어합니다.


DNS 레코드 유형

A (Address) 레코드:
IPv4 주소를 도메인 이름에 매핑합니다.
예: example.com -> 192.168.1.1


AAAA (Quad-A) 레코드:
IPv6 주소를 도메인 이름에 매핑합니다.
예: example.com -> 2001:0db8:85a3:0000:0000:8a2e:0370:7334


CNAME (Canonical Name) 레코드:
한 도메인 이름을 다른 도메인 이름에 매핑합니다. 주로 별칭이나 서브도메인을 메인 도메인에 연결할 때 사용됩니다.
예: www.example.com -> example.com


MX (Mail Exchange) 레코드:
도메인의 이메일 서비스를 처리하는 서버를 지정합니다.
예: example.com mail server -> mail.example.com


NS (Name Server) 레코드:
도메인의 DNS 정보를 제공하는 네임서버를 지정합니다.
예: example.com name server -> ns1.examplehosting.com


SOA (Start of Authority) 레코드:
도메인에 대한 권한을 가진 주 네임서버와 관련된 정보를 제공합니다. 또한, 존의 다른 레코드에 대한 기본 정보와 존 전송에 사용되는 타이밍 정보를 포함합니다.


TXT (Text) 레코드:
도메인에 대한 텍스트 정보를 제공합니다. 다양한 목적으로 사용되며, 종종 인증 정보나 정책을 저장하는 데 사용됩니다.


SPF (Sender Policy Framework) 레코드
도메인에서 이메일을 보낼 수 있는 서버를 지정하는 데 사용됩니다. 이는 이메일 스푸핑을 방지하는 데 도움을 줍니다.

 

TLD(Top-Level Domain) 혹은 최상위 도메인은 DNS 이름에서 마지막 점(".")뒤에 오는 도메인 이름을 의미한다. TLD는 인터넷에서 가장 높은 수준의 도메인 이름을 나타낸다. 예를 들어 "example.com"에서 TLD는 ".com" 이다. ".org", ".co.kr", ".io", ".gov" 등이 TLD 이다.

 

DNS 구성 요소
DNS는 아래의 3가지 요소로 구성된다.

  • 도메인 네임 스페이스(Domain Name Space)
  • 네임 서버(Name Server) : 권한 있는 DNS
  • 리졸버(Resolver) : 권한 없는 DNS

VPC

Virtual Private Cloud로 클라우드 컴퓨팅 환경에서 제공되는 가상의 사설 네트워크 영역입니다.

물리적인 가용영역에 서브넷을 생성하고 IP주소를 지정하여 VPC로 묶어 사용자의 커스터마이징 된 네트워크 환경을 구성할 수 있습니다.


VPN

Virtual Private Network로 사설 네트워크 간의 통신이 공용 네트워크를 통하더라도 데이터를 암호화하여 전송하므로

안전하게 통신할 수 있게 해주는 기술입니다.

1. Site-to-Site VPN: 두 개 이상의 네트워크를 안전하게 연결하는 데 사용

2. Remote Access VPN: 개별 사용자가 사설 네트워크에 접속하는데 사용


SSL Handshake
  1. 먼저 TCP 3-Way Handshake 과정을 거친다.
  2. Client Hello: 클라이언트는 서버에 SSL/TLS 버전, 지원하는 cipher suites "ClientHello.random"이라고 부르는 랜덤값을 전송한다.
  3. Server Hello: 서버는 SSL/TLS 버전, 선택한 sipher suite, "ServerHello.random"이라고 부르는 랜덤 값, 암호화에 사용할 퍼블릭 키(public key), 디지털 서명 정보를 응답한다.
  4. Server Key Exchange: 경우에 따라 서버는 암호화 키를 설정하는데 사용할 Diffie-Hellman 공개키와 같은 추가 정보를 클라이언트에 전송한다.
  5. Certificate Request(인증서 요청): 서버가 클라이언트 인증을 요청하는 경우 클라이언트의 디지털 인증서를 요청한다.
  6. Server Hello Done: 서버가 Server Hello 프로세스가 완료되었음을 알리는 메시지를 전송한다.
  7. Client Key Exchange: 클라이언트는 shared secret key를 생성하는데 사용할 임의의 값을 생서앟고 서버의 공개키로 암호화 한다.
  8. Certificate Verification: 서버가 클라이언트의 인증서를 요청했다면 이를 서버로 전송한다. 인증서를 받은 서버는 인증서의 디지털 서명을 확인하고 신뢰할 수 있는 인증기관이 발급했는지를 확인한다.
  9. Change Cipher Spec: 클라이언트와 서버가 합으된 암호를 사용하여 암호화된 통신으로 전환할 것임을 나타내는 메시지를 보낸다.
  10. Finished : 클라이언트와 서버의 handshake 프로세스가 완료되고 암호화된 데이터를 교환할 준비가 되었음을 확인하는 메시지를 전송한다.

 

양쪽은 암호화된 통신을 위한 세션 키를 협상하게 됩니다. SSL Handshake의 주요 단계는 다음과 같습니다:

1. ClientHello:
클라이언트는 서버에 "ClientHello" 메시지를 전송합니다. 이 메시지에는 클라이언트가 지원하는 암호화 알고리즘 목록, 랜덤 데이터, 그리고 선택적으로 세션 ID가 포함됩니다.

 

2. ServerHello:
서버는 "ServerHello" 메시지로 응답합니다. 이 메시지에는 서버가 선택한 암호화 알고리즘, 랜덤 데이터, 그리고 인증서가 포함됩니다.

 

3. 인증서 검증:

클라이언트는 서버의 인증서를 검증합니다. 인증서는 신뢰할 수 있는 인증 기관(CA)에 의해 발급되며, 서버의 공개 키와 도메인 이름, 발급 기관 등의 정보를 포함하고 있습니다.

 

4. 키 교환:

클라이언트는 서버의 공개 키(인증서에 포함)를 사용하여 랜덤 데이터를 암호화하고 "ClientKeyExchange" 메시지로 전송합니다. 이 랜덤 데이터는 양쪽 모두에서 세션 키 생성에 사용됩니다.

 

5. 세션 키 생성:
클라이언트와 서버는 앞서 교환된 랜덤 데이터를 기반으로 세션 키를 독립적으로 생성합니다.

 

6. 암호화된 세션 시작:

클라이언트는 "Finished" 메시지를 서버에 전송하여 Handshake 과정이 완료되었음을 알립니다. 이 메시지는 이미 협상된 세션 키를 사용하여 암호화됩니다.


서버도 "Finished" 메시지로 응답하며, 이후의 모든 통신은 협상된 세션 키를 사용하여 암호화됩니다.
결론적으로, SSL Handshake는 클라이언트와 서버 간에 안전한 통신을 위한 암호화된 세션을 초기화하는 과정입니다. 이 과정을 통해 양쪽은 서로의 신원을 검증하고, 암호화된 통신을 위한 세션 키를 협상하게 됩니다.


CDN(Content Delivery Network)

분산된 서버 네트워크를 통해 캐싱, 지리에 따른 분산, 트래픽 부하 분산, 보안을 적용하여

사용자에게 웹 컨텐츠를 더 빠르고 안정적으로 제공합니다.