커스텀 컨트롤러를 개발할일이 가끔가다 생기는데 이번에 새로 커스텀 컨트롤러로 개발해보고싶은게 생겼습니다. 만들어보기 전에 컨트롤러 동작방식 대해 살펴보고 개발을 해볼까 합니다. 오늘은 컨트롤러의 동작방식을 이해하기 위한 글 입니다. 오퍼레이터 패턴이란오퍼레이터 패턴, 혹은 오퍼레이터는 시스템의 현재 상태를 원하는 상태로 유지하기 위한 자동화된 로직을 의미합니다. 즉, 현재 상태와 목표 상태가 있을 때, 이 둘을 자동으로 조정하여 일치시키는 것이 오퍼레이터의 역할입니다. 운영자가 수동으로 하던 작업을 코드로 자동화한 것이라고 생각하면 이해하기 쉽습니다.예를 들어, 데이터베이스의 백업과 복구 작업을 오퍼레이터를 통해 자동으로 처리할 수 있습니다. CNCF 프로젝트에서는 오퍼레이터 패턴에 대한 백서를 제공하며..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 마이크로서비스 아키텍처가 널리 도입되면서 서비스 간 통신이 복잡해졌고, 이를 해결하기 위한 기술 중 하나가 바로 서비스 메쉬(Service Mesh)입니다. Istio는 대표적인 서비스 메쉬로, 서비스 간의 네트워크 트래픽을 관리하고 제어하는 역할을 합니다. 이번 글에서는 Istio의 다양한 역할에 대해 알아보겠습니다. Service Mesh란?Service Mesh는 마이크로서비스 간 통신을 제어하고 관리하는 레이어입니다. 마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 배포되고 실행되기 때문에 서비스 간 통신이 매우 중요합니다. Service Mesh는 이런 통신을 제어하면서 보안, 로깅, 모..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 이전 글에서 Istio의 Gateway API를 다뤘다면, 이번에는 Cilium의 Gateway API에 대해 살펴보려 합니다. Gateway API에 대해 더 알고 싶으신 분들은 이전 글을 참고해 주세요. Cilium의 Gateway APICilium의 Gateway API는 다른 Ingress 컨트롤러들과는 크게 다른 부분이 Cilium에서는 네트워크 스택과 깊이 통합된다는 것입니다. 무슨말이냐면 보통의 Gateway API는 gateway 생성시 Deployment 형태로 설치되고 LoadBalancer를 통해 트래픽을 처리하지만, Cilium가 네트워크 관리 도구(CNI)이기 때문에 Gatewa..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. Gateway APIIngress를 많이 사용하지 않았지만, 현재 회사에서 운영 중인 서비스 메시 정책들을 모두 Ingress로 변환하라는 요청이 들어온다면 매우 길고 복잡한 Ingress들이 다수 발생할 것 같습니다. 심지어 TCP/UDP 프로토콜로 개발된 서비스들도 일부 존재하기 때문에, Ingress만으로는 이 모든 서비스들을 처리하는 것이 불가능합니다. 운영하고 있는 쿠버네티스 클러스터는 큰 규모는 아니지만, 그럼에도 불구하고 이러한 다양한 요구 사항들이 발생하고 있습니다. 더 큰 규모의 클러스터를 운영하는 조직에서는 이러한 문제들이 더욱 빈번하게 나타날 것이며, 당연히 Ingress에 대한 개..
쿠버네티스 클러스터 관련하여 다양한 테스트를 하다 보면 네트워크 대역이 다른 두 개의 클러스터가 필요할 때가 있다.단순히 파드나 서비스 대역이 다른 것이 아닌, 노드 대역을 다르게 설정하려면 Docker 컨테이너의 네트워크 대역이 달라야 한다.Docker 컨테이너 네트워크 생성green 클러스터를 위한 네트워크 브리지를 하나 생성한다.docker network create --subnet=172.18.0.0/16 green-net 이번에는 다른 클러스터를 위한 blue 네트워크 브리지를 생성한다.docker network create --subnet=172.19.0.0/16 blue-net 생성 후 확인하면 브리지 네트워크가 생성된 것을 볼 수 있다. green 클러스터 생성하기 환경변수를 이용하여 실..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. IPVS 모드IPVS 는 리눅스 커널에서 동작하는 소프트웨어 로드밸런서이다. 백엔드(플랫폼)으로 Netfilter 를 사용하며, TCP/UDP 요청을 처리 할 수 있다. PVS는 L4 계층에서 동작하며, 다양한 로드 밸런싱 알고리즘을 통해 서비스 요청을 여러 백엔드 서버로 분산시켜 트래픽을 효율적으로 관리합니다. 이를 통해 대규모 트래픽 환경에서도 안정적인 서비스를 제공하며, 고성능 로드 밸런싱을 필요로 하는 Kubernetes 클러스터에서 주로 사용됩니다. IPVS 모드는 커널 레벨에서 직접 작동하기 때문에 빠르고 확장성 있는 네트워크 트래픽 처리가 가능합니다. iptables 의 rule 기반 처리..
클러스터 만들기우선 멀티클러스터 구성을 위한 클러스터 2개를 생성해야합니다. 아래의 그림과 같은 구성으로 클러스터를 만들 예정입니다. Blue 클러스터 생성하기파일을 구분짓기 쉽기 위해 blue 폴더 내에 만들었습니다.# blud/config.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes: - role: control-plane - role: worker - role: worker - role: workernetworking: disableDefaultCNI: true kubeProxyMode: "none" podSubnet: "10.1.0.0/16" serviceSubnet: "10.2.0.0/16" 아래의 명령어로 blue 클러스터..
Proxy Protocol이란?Proxy Protocol은 로드 밸런서나 프록시 서버를 거쳐 백엔드 서버로 트래픽이 전달될 때, 클라이언트의 원래 IP 주소와 포트 정보를 보존하기 위해 사용되는 프로토콜이다. 일반적으로 로드 밸런서나 프록시 서버는 클라이언트의 원래 IP를 숨기고 자체 IP로 요청을 전달하기 때문에, 백엔드 서버는 클라이언트의 실제 IP 정보를 알 수 없게 된다. Proxy Protocol은 이러한 문제를 해결하기 위해 요청의 첫 부분에 클라이언트 IP 주소와 포트 정보를 포함시켜 전달한다. Proxy Protocol의 동작 방식Proxy Protocol은 v1과 v2 두 가지 버전이 있으며, 현재 두 버전 모두 사용되고 있다.v1: 텍스트 기반의 프로토콜로, 헤더 정보가 사람이 읽기 쉬..
Calico를 사용하는 환경에서 BIRD 프로세스에 문제가 발생하면 라우팅 정보가 제대로 전달되지 않아 네트워크 성능 저하나 장애가 발생할 수 있다. 이러한 상황을 진단하기 위해 BIRD 프로세스의 상태를 분석하는 것이 중요한데, 이를 위해 SIGUSR1 신호를 보내면 BIRD의 상세 상태와 라우팅 테이블 정보를 덤프할 수 있다. 이 글에서는 호스트에서 컨테이너 내부의 BIRD 프로세스에 SIGUSR1 신호를 보내는 방법을 단계별로 설명한다. 호스트에서 BIRD 프로세스 찾기우선 호스트에서 pidof 명령어를 사용해 BIRD 프로세스의 PID를 찾는다.pidof bird 이렇게 하면 호스트에서 BIRD 프로세스의 PID를 얻을 수 있다. 컨테이너 내부의 PID 찾기다음으로, 해당 PID를 사용하여 /pr..
지난 AWSKRUG 플랫폼엔지니어링 밋업에서 소개받은 KEDA에 대해 설명해볼까 합니다. 쿠버네티스에는 Auto Scaling을 위한 Horizontal Pod Autoscaling이 있습니다. 하지만 이 기본적인 HPA(Horizontal Pod Autoscaler)는 CPU나 메모리 사용량만을 기준으로 확장 정책을 설정할 수 있습니다. 이러한 한계를 극복하기 위해 등장한 것이 바로 KEDA(Kubernetes Event-driven Autoscaling)입니다. KEDA란?KEDA는 Kubernetes에 이벤트 기반 확장 기능을 추가하는 오픈소스 프로젝트입니다. KEDA는 애플리케이션 워크로드를 이벤트 매개 변수에 따라 동적으로 확장하거나 축소할 수 있도록 지원하며, 클라우드 네이티브 애플리케이션을..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 서비스에는 로드밸런스 타입과 다르게 수동으로 외부 IP를 할당하여 노출시킬 수 있는 방법이 있습니다. 외부 IP는 쿠버네티스 클러스터에서 IP 할당을 관리하지 않습니다. 직접 테스트해보기kind를 통해 여러 개의 노드로 구성된 클러스터를 생성하고, 가상의 IP를 하나 생성하여 연결해보겠습니다. 이제 pod와 서비스를 각각 생성하겠습니다.# 파드 생성하기 kubectl run nginx --image=nginx:latest# 서비스 생성하기kubectl expose pod nginx --port 80 이렇게 생성하면 ClusterIP로 설정되기 때문에 여기에 external IP를 추가해보겠습니다.ex..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. NodePort는 Kubernetes에서 외부 트래픽을 클러스터 내부의 특정 서비스로 전달할 수 있게 해주는 가장 간단한 방법 중 하나입니다. 클러스터의 각 노드에 특정 포트(기본 30000-32767)를 열어 외부 네트워크에서 노드의 IP와 포트를 통해 서비스에 접근할 수 있도록 해주며, 이를 통해 클러스터 외부에서도 서비스를 사용할 수 있습니다. 이번 글에서는 NodePort를 생성하는 방법과 함께 NodePort가 내부적으로 어떻게 동작하는지 자세히 살펴보겠습니다. 클러스터 정보 쿠버네티스 버전: 1.31pod cidr: 10.10.0.0/16service. cidr: 10.200.1.0/24ku..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 파드는 고유한 IP를 가지지만 재시작할 때마다 IP가 변경되기 때문에 파드에 안정적으로 접근하는 것이 쉽지 않습니다. 이를 해결하기 위해 쿠버네티스는 여러 파드를 하나의 로드밸런서로 묶어주는 "서비스"라는 객체를 제공합니다. 서비스는 세 가지 타입이 있으며, 클러스터 내부에서만 접근 가능한 Cluster IP, 노드의 IP와 포트를 통해 외부에서 접근할 수 있는 NodePort, 그리고 외부 로드밸런서와 함께 사용되는 LoadBalancer가 있습니다. 이 중에서 Cluster IP는 클러스터 내부에서 파드 간의 통신을 원활하게 하기 위한 가장 기본적인 형태의 서비스 타입입니다. 파드가 가상 인터페..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. Calico는 BGP를 활용해 네트워크 토폴로지를 관리하고, 각 노드 간 경로 정보를 효율적으로 교환합니다. 이를 통해 클러스터 내 노드가 자동으로 라우팅 정보를 갱신하고, 네트워크 확장 시 복잡한 설정 없이도 트래픽 흐름을 최적화할 수 있습니다. 특히 라우트 리플렉터 기능을 사용하면, 전체 네트워크의 피어링 수를 줄여 트래픽 부하를 줄이고 성능을 향상시킬 수 있습니다. Full Mesh (✰ Node-to-Node 기본 설정)Node-to-Node 메시 설정은 Calico에서 기본적으로 모든 노드가 서로 직접 BGP 피어링을 맺어 경로 정보를 교환하는 방식입니다. 이 설정은 클러스터 내의 모든 노드들..
argocd를 설치하면 원래 admin 계정은 argocd-initial-admin-secret 이라는 secret에 담겨져있다. 그래서 처음에 설치해서 이 데이터를 읽고 admin 계정의 비밀번호를 바꾸면 되는데테스트를 하다보면 argocd를 새롭게 재설치할일이 있고 그때마다 이 데이터를 읽기가 귀찮아서 고정해서 사용하는 방법을 가이드해보려고 한다. 로컬 계정 정보 확인argocd는 ldap이나 oidc를 이용해서 사용자를 관리할 수도 있지만 argocd자체에서 계정을 생성해서 관리할 수도 있다. 이 사용자 관리 정보는 argocd-cm configmap에 저장되어있다. 사용자 생성하기직접 한번 새로운 사용자를 만들어보고자 한다. 처음에 argocd를 설치하고 나면 argocd-cm에는 아무런 데..
ArgoCD에서 EKS 클러스터를 등록하는 방법은 크게 3가지가 있습니다: IRSA를 사용하는 방법과 그렇지 않은 방법으로 나뉩니다.1. 같은 계정의 EKS 클러스터 등록하기먼저, ArgoCD가 설치된 EKS와 동일한 계정 내에 있는 EKS 클러스터를 등록하는 방법을 살펴보겠습니다.IRSA(IAM Roles for Service Accounts)을 사용해 등록하기같은 계정의 EKS에 ArgoCD를 설치할 때 가장 쉬운 방법은 IRSA를 활용하는 것입니다. IRSA는 Kubernetes 서비스 어카운트에 IAM 역할을 할당하는 기능입니다. 방법은 간단합니다. 서비스 어카운트에 IAM 역할 ARN을 주석(annotation)으로 추가하면 됩니다. 이렇게 설정하면 파드가 서비스 어카운트에 적용된 ARN을 통해..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 이제는 Calico에서 지원하는 다른 네트워크 오버레이 모드인 VxLAN에 대해서 알아보고자 합니다. VxLAN 이란IPIP(IP-in-IP)는 IP 패킷을 또 다른 IP 패킷 안에 캡슐화하여 전달하는 오버레이 네트워크 프로토콜 중 하나입니다. 기존 IP 패킷에 새로운 IP 헤더를 추가하여 캡슐화하는 방식으로, 단순한 구조 덕분에 오버헤드가 적습니다. 다만, 노드 수가 많아질 경우 네트워크 경로 관리가 복잡해질 수 있습니다. 또한, Layer 2 브로드캐스트 트래픽을 지원하지 않지만, 쿠버네티스에서는 파드들이 IP 기반으로 통신하므로 이는 크게 문제되지 않습니다. VxLAN모드 설치하기calico ..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 이번 포스트에서는 CNI 중에서 네트워크 정책 기능을 제공하는 Calico에 대해 알아보겠습니다. Calico 컴포넌트 데이터 저장소Kubernetes API Datastore는 Calico에서 네트워크 설정 정보를 Kubernetes API와 통합해 저장하는 방식입니다. 이 방식에서는 설정 정보를 Kubernetes API를 통해 관리하며, 설정 데이터는 ConfigMap이나 Custom Resource Definition(CRD) 형태로 저장됩니다. 직접적으로 Kubernetes API의 데이터베이스에 접근하지 않고, Kubernetes의 표준 API를 통해 네트워크 설정을 관리합니다. 별도의 추..