본문 바로가기

분류 전체보기

(10)
[AEWS] 1주차 정리 - EKS에서 Bottlerocket AMI 사용하기 AWS EKS에서 EC2 인스턴스 노드그룹으로 사용 가능한 AMI는 크게 세 가지 유형이 존재합니다. 이 중에서 Bottlerocket AMI를 사용해 Managed AMI를 사용하는 것과 어떤 차이가 있는지 살펴보려 합니다. Managed AMI : AWS 제공하는 관리형 AMI 입니다.Custom AMI : AWS 제공하는 AMI에 Custom한 프로세스 등을 더해 사용하는 AMI 입니다. (사내 보안팀에서 요구하는 별도 서비스 등을 설치 할때 사용하곤 합니다.)Bottlerocket AMI : AWS에서 후원하고 지원하는 오픈 소스 Linux 배포판이며, Bottlerocket는 컨테이너 워크로드를 호스팅하기 위해 특별히 제작되었습니다. 컨테이너를 실행하기 위한 전용 AMI 입니다.AWS 공식 문서..
KANS(Kubernetes Advanced Networking Study) - 9주차 정리 AWS EKSEKS는 AWS의 관리형 Kubernetes 서비스로 Kubernetes의 Control Plane을 AWS에서 관리해주고, EKS를 사용하는 고객은 Data Plane을 사용하는 형태로 제공됩니다. AWS EKS의 특징으로 비용은 시간당 0.1 달러로 매우 저렴하고, VPC CNI가 Addon으로 제공됩니다. VPC CNI는 Flat 네트워크라고 표현하기도 하는데, Pod 네트워크 대역이 VPC CIDR를 사용하기 때문입니다. 같은 네트워크를 사용하기 때문에 VXLAN과 같은 오버레이(Overlay) 기술을 통해 캡슐화를 할 필요가 없어 속도가 빠르다는 장점도 있습니다. Pod에 IP를 할당하기 위해 Node에서 생성 가능한 최대 Pod 개수(IP)가 존재하는데, ConfigMap의 설정을..
KANS(Kubernetes Advanced Networking Study) - 8주차 정리 Cilium CNICilium은 eBPF(Berkeley Packet Filter)를 기반으로 Pod Network 환경을 제공하는 CNI 플러그인으로 Kubernetes와 같은 리눅스 컨테이너 관리 플랫폼을 사용해 배포된 응용 프로그램 서비스 간의 네트워크 및 API 연결을 제공하는 오픈소스 소프트웨어 입니다. eBPF 기반으로 동작하기 때문에 iptables 기반으로 동작하는 다른 CNI를 사용하는 것보다 네트워크 성능 관점에서 우위를 점합니다. 이전 주차에서도 학습했지만, iptables는 Kubernetes에서 Pod와 Service가 생성될 때 마다 규칙도 추가되는데, 요청을 처리할 때, 모든 iptables 규칙을 평가하기 때문에 Pod와 Service 오브젝트가 많은 경우, 성능 저하가 발생..
KANS(Kubernetes Advanced Networking Study) - 7주차 정리 작년 AWS에서 VPC CNI에서도 별도 설치 없이 NetworkPolicy를 지원한다고 발표했습니다. 발표 시기와 비슷하게 하나의 클러스터에 서로 다른 팀이 접근하는 프로젝트를 진행하면서 NetworkPolicy를 도입하게 됐습니다. 서로 다른 팀을 목적에 따라 Namespace로 구분하고, 각 환경에서 통신이 필요한 구간만 허용하고, 불필요한 통신을 차단하고자 했습니다. 실제 적용하기 전 진행했던 PoC 내용을 공유하여, EKS 환경에 Network Policy 도입 검토에 도움이 됐으면 합니다.  요약NetworkPolicy는 Kubernetes에서 기본적으로 제공하는 오브젝트로써 Pod의 네트워크를 트래픽(InBound, OutBound)을 제어를 통해 애플리케이션을 보호하는데 사용됩니다.그 동안..
KANS(Kubernetes Advanced Networking Study) - 6주차 정리 k3sk3s는 k8s의 경량화된 버전으로 설치가 쉽고, 바이너리 사이즈가 작아 가볍다는 장점 등으로 학습과 테스트에서 사용 가능한 플랫폼입니다. 아래는 k3s의 아키텍처 입니다. k3s를 배포하고 모든 namespace의 Pod를 확인해보면, 아래 이미지와 같이 3개의 Pod만 존재합니다. 우리가 알고 있는 k8s 환경에서의 주요 구성요소들이 대부분 안 보이는데요. 위 이미지에서 하나의 Process 박스 안에 있는 주요 구성요소들이 모두 포함되어 동작하는 형태이기 때문입니다. CNI Pod는 안 보이지만, 노드에서 인터페이스를 확인해보면, Fannel 인터페이스가 확인됩니다. 하나의 프로세스(PID : 2181)로 동작하는 프로세스를 검색한 결과입니다. kube-proxy Pod도 존재하지 않지만, i..
KANS(Kubernetes Advanced Networking Study) - 5주차 정리 실습환경 구성cat kind-svc-2w.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4featureGates: "InPlacePodVerticalScaling": true #실행 중인 파드의 리소스 요청 및 제한을 변경할 수 있게 합니다. "MultiCIDRServiceAllocator": true #서비스에 대해 여러 CIDR 블록을 사용할 수 있게 합니다.nodes:- role: control-plane labels: mynode: control-plane topology.kubernetes.io/zone: ap-northeast-2a extraPortMappings: #컨테이너 포트를 호스트 포트에 매핑하여 클러스터 외부에서 서..
KANS(Kubernetes Advanced Networking Study) - 4주차 정리 이번 주차는 Kuberentes 서비스 오브젝트에서 ClusterIP, NodePort라는 두 가지 유형에 대해 학습했습니다. (이 외에도 다양한 유형이 존재하는데, 해당 유형은 차주에 진행할 예정입니다.)   실습 환경 구축먼저, 실습을 위한 kind 클러스터 설정 파일입니다.실습 환경은 K8S v1.31.0, CNI(Kindnet, Direct Routing mode) ,IPTABLES proxy mode - Node 네트워크 대역 : 172.18.0.0/16- Pod 네트워크 대역 : 10.10.0.0/16 ⇒ 각각 10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/24, 10.10.4.0/24- Service 네트워크 대역 : 10.200.1.0/24cat kind-svc-1w..
KANS(Kubernetes Advanced Networking Study) - 3주차 정리 이번 주차에는 지난 2주차에서 짧게 언급됐던 Flannel CNI와 마찬가지로 Kubernetes CNI 중 하나인 Calico에 대해 학습했습니다. Calico에 대해 학습하기 전에 Kubernets CNI의 네 가지 요구사항에 대한 리마인드 입니다. 인터페이스라는 말 자체가 일종의 규격을 의미하는데, EKS VPC CNI, Calico, Flannel 등과 같이 다양한 CNI 종류가 있고, 각 CNI 마다 특징과 동작방식이 있지만, 아래 네 가지 요구사항은 Interface로써 모두 지켜야 합니다.- Pod 간 통신 시 NAT 없이 통신 가능해야 합니다.- 노드와 Pod 간 통신 가능해야 합니다.- Host mode를 사용하는 Pod는 NAT 없이 Pod와 통신 가능해야 합니다.- 서비스 IP 대역과..
KANS(Kubernetes Advanced Networking Study) - 2주차 정리 kind(kubernetes in docker)를 활용한 실습 환경 구성Mac OS로 kind와 Kubernetes 관련 툴 설치 명령어 입니다. # Install Kindbrew install kindkind --version# Install kubectlbrew install kubernetes-clikubectl version --client=true# Install Helmbrew install helmhelm version# Useful toolbrew install krewbrew install kube-ps1brew install kubecolorbrew install kubectx kind는 Kubernetes in docker의 약자로 앞 주차에서 언급됐던 dind(docker in do..
KANS(Kubernetes Advanced Networking Study) - 1주차 정리 요즘 컨테이너를 사용하면 일반적으로 Docker를 많이 얘기하는데, 사실 Docker는 2013년도에 나온 기술이고, 컨테이너(프로세스)의 자원 할당과 격리를 구현하는 리눅스 커널의 기술들은 훨씬 이전부터 존재하던 기술들입니다. 해당 주차에서는 Docker를 사용하지 않고, 컨테이너(프로세스)를 구현하는 방법과 네트워크 및 보안에 대해 다뤘습니다.  위에서 "컨테이너(프로세스)" 라고 표기 했는데, 컨테이너는 프로세스이며, 프로세스란 컴퓨터에서 실행 중인 프로그램을 의미하는데, 이 프로세스는 유한한 컴퓨터의 컴퓨팅 자원(CPU, Memory)을 OS 커널로부터 할당 받아 실행되는 구조입니다. 클라우드라는 기술이 나오기 전에 인프라를 경험해본 사람이라면, 컴퓨터에 VMWare, VirtualBox와 같은 ..