Proxy Protocol이란?Proxy Protocol은 로드 밸런서나 프록시 서버를 거쳐 백엔드 서버로 트래픽이 전달될 때, 클라이언트의 원래 IP 주소와 포트 정보를 보존하기 위해 사용되는 프로토콜이다. 일반적으로 로드 밸런서나 프록시 서버는 클라이언트의 원래 IP를 숨기고 자체 IP로 요청을 전달하기 때문에, 백엔드 서버는 클라이언트의 실제 IP 정보를 알 수 없게 된다. Proxy Protocol은 이러한 문제를 해결하기 위해 요청의 첫 부분에 클라이언트 IP 주소와 포트 정보를 포함시켜 전달한다. Proxy Protocol의 동작 방식Proxy Protocol은 v1과 v2 두 가지 버전이 있으며, 현재 두 버전 모두 사용되고 있다.v1: 텍스트 기반의 프로토콜로, 헤더 정보가 사람이 읽기 쉬..
irqbalance와 CPU Pinning의 원리시스템에서 발생하는 하드웨어 인터럽트(IRQ)는 프로세서가 작업을 수행하는 동안 네트워크 패킷 처리, 디스크 I/O 등 다양한 작업을 중단시키는 역할을 한다. irqbalance는 이러한 인터럽트를 여러 CPU 코어에 분산시켜 특정 코어에 과부하가 걸리지 않도록 도와준다. 하지만 모든 환경에서 항상 효과적이지는 않다. 특히 Cilium과 같이 높은 네트워크 성능이 필요한 경우, 인터럽트가 무작위로 여러 코어에 분산되면 캐시 미스가 발생하고 인터럽트 처리 지연이 늘어나면서 성능이 저하될 수 있다. 이러한 문제를 해결하기 위해 CPU Pinning을 적용하면 특정 NIC 인터럽트를 특정 CPU 코어에 고정할 수 있다. 이를 통해 CPU 코어와 메모리 간의 캐시..
Calico를 사용하는 환경에서 BIRD 프로세스에 문제가 발생하면 라우팅 정보가 제대로 전달되지 않아 네트워크 성능 저하나 장애가 발생할 수 있다. 이러한 상황을 진단하기 위해 BIRD 프로세스의 상태를 분석하는 것이 중요한데, 이를 위해 SIGUSR1 신호를 보내면 BIRD의 상세 상태와 라우팅 테이블 정보를 덤프할 수 있다. 이 글에서는 호스트에서 컨테이너 내부의 BIRD 프로세스에 SIGUSR1 신호를 보내는 방법을 단계별로 설명한다. 호스트에서 BIRD 프로세스 찾기우선 호스트에서 pidof 명령어를 사용해 BIRD 프로세스의 PID를 찾는다.pidof bird 이렇게 하면 호스트에서 BIRD 프로세스의 PID를 얻을 수 있다. 컨테이너 내부의 PID 찾기다음으로, 해당 PID를 사용하여 /pr..
Metric Server는 쿠버네티스 클러스터의 자원 사용량(CPU, 메모리 등)을 수집해주는 필수적인 구성 요소 중 하나입니다. HPA(Horizontal Pod Autoscaler)나 kubectl top 명령어를 사용하려면 Metric Server가 설치되어 있어야 합니다. 하지만 기본적으로 쿠버네티스 클러스터에는 Metric Server가 포함되어 있지 않습니다. 이 문서에서는 Metric Server 설치 여부를 확인하는 방법과 설치하는 방법에 대해 설명합니다. 설치 여부 확인Metric Server가 클러스터에 설치되어 있는지 확인하려면 다음 명령어를 실행합니다쿠버네티스 클러스터의 각 노드에 대한 실시간 자원을 보여주는 명령어입니다.kubectl top nodes 결과 - Metric Ser..
지난 AWSKRUG 플랫폼엔지니어링 밋업에서 소개받은 KEDA에 대해 설명해볼까 합니다. 쿠버네티스에는 Auto Scaling을 위한 Horizontal Pod Autoscaling이 있습니다. 하지만 이 기본적인 HPA(Horizontal Pod Autoscaler)는 CPU나 메모리 사용량만을 기준으로 확장 정책을 설정할 수 있습니다. 이러한 한계를 극복하기 위해 등장한 것이 바로 KEDA(Kubernetes Event-driven Autoscaling)입니다. KEDA란?KEDA는 Kubernetes에 이벤트 기반 확장 기능을 추가하는 오픈소스 프로젝트입니다. KEDA는 애플리케이션 워크로드를 이벤트 매개 변수에 따라 동적으로 확장하거나 축소할 수 있도록 지원하며, 클라우드 네이티브 애플리케이션을..
istio를 멀티 클러스터 환경으로 구성하기 위해서는 두 클러스터가 동일한 ca를 사용해야한다.이번 글에서는 istio 멀티 클러스터 구성을 위한 인증서 구성 방법에 대해 작성해보려고 한다.root-ca 생성하기istioctl 설치 파일을 다운받으면 해당 파일 내에 tools라는 폴더가 존재한다. 만약 내 환경에 어디있는지 모르겠다면 istio github의 최상위에 tools라는 폴더가 존재한다. 해당 폴더 아래에 certs라는 폴더가 있다. 🗂️ 여기를 다운받자.https://github.com/istio/istio/tree/master/tools/certs istio/tools/certs at master · istio/istioConnect, secure, control, and observe ..
istio를 빌드하기 위한 환경 구성으로 필요한건 다음과 같습니다.1. git2. docker3. make 3개는 맥에서 모두 설치하는건 간단하니 넘어가도록 하겠습니다.저는 orbstack을 사용하고 있습니다. 이미지 전체 다 빌드하기make docker 이렇게 하면 에러가 발생한다. .. 하하 아직 확인방법을 못찾았다..docker를 무조건 써야하는것 같은데 확인해볼 예정입니다. 추가) 원인..이유를 알아냈는데 orbstack을 쓰면서 docker buildx ls를 하면 에러가 난다.NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMSbrave_hopper* docker-container \_ brave_hopp..
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기 내용을 정리한 글입니다. LoadBalancer 란NodePort는 각 노드의 특정 포트를 통해 외부 트래픽을 전달합니다. 이 방식의 장점은 클러스터 외부에서 접근이 가능하다는 점이지만, 고정된 IP가 없고 포트 범위에 제약이 있어 대규모 서비스나 고가용성이 필요한 경우 한계가 있습니다. 반면, LoadBalancer는 클라우드 환경에서 자동으로 로드밸런서를 생성해 고정된 외부 IP를 제공합니다. 이를 통해 여러 파드에 트래픽을 효율적으로 분산할 수 있습니다. 그러나 이 방식을 사용하려면 클라우드 프로바이더와의 연동이 필요합니다. 클라우드 환경에서는 이 연동이 자동화되어 매우 편리하지만, 온프레미스 환경이나 특정 네트워크 구성..
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에는 아무런 데..
이전에 말한 IINA 플레이어를 기본 플레이어로 변경하려고 한다.2024.09.08 - [기타] - mac에서 영상 재생 어플 추천 mac에서 영상 재생 어플 추천스터디 하고 녹화본을 공유해주시는데맥으로 영상 볼일이 별로 없어서 맥의 기본 플레이어로 보다가 뒤로가기 앞으로가기도 화살표버튼으로 안되고너무 불편한점이 많아서 이번에 하나 gpt에nuguni.tistory.com 동영상 파일에 대고 오른쪽 버튼을 클릭하면 다음과 같은 화면이 나온다.여기서 정보 가져오기를 누른다. 그런다음 다음으로 열기에서 변경하고자 하는 플레이어 애플리케이션으로 바꾸고 모두 변경을 누르면 완료
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을 통해..
어느 날부턴가 calico-node가 간헐적으로 NotReady 상태로 전환되는 이상한 현상이 발생했다. 처음에는 단순히 한 노드에서만 나타났고, 서비스에 큰 문제가 없어 "뭐지?" 하고 넘겼다. 그런데 시간이 지나니 다른 노드들까지 하나둘씩 NotReady 상태로 변해버렸다. 마치 퍼지는 전염병처럼 말이다! 🚨 이슈알고 보니 calico-node에서 동작하는 BIRD 프로세스의 CPU 사용률이 점점 높아지면서, readinessProbe에 설정된 calico-node -bird-ready 명령어의 응답이 느려지고 있었다. 그 결과로 노드의 상태는 하나둘씩 NotReady로 전환되는 일이 벌어진 것이다. 🔍 원인https://github.com/projectcalico/bird/pull/104 ne..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 마지막으로 오버레이 네트워크를 사용하지 않는 Direct 모드에 대해서 알아보고자 합니다. Direct 모드란calico에서는 파드에서 만들어진 패킷을 별도의 캡슐화 없이 목적지 노드로 전달하는 모드입니다. Direct모드 설치하기Instance의 출발지 목적지 확인하는 기능 비활성화# AWS CLI 로 특정 인스턴스의 Source/Destination Check 기능을 Disable 하기aws ec2 modify-instance-attribute --instance-id --source-dest-check "{\"Value\": false}" 인스턴스가 테스트에 사용할 kubernetes 인스턴..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 이제는 Calico에서 지원하는 다른 네트워크 오버레이 모드인 VxLAN에 대해서 알아보고자 합니다. VxLAN 이란IPIP(IP-in-IP)는 IP 패킷을 또 다른 IP 패킷 안에 캡슐화하여 전달하는 오버레이 네트워크 프로토콜 중 하나입니다. 기존 IP 패킷에 새로운 IP 헤더를 추가하여 캡슐화하는 방식으로, 단순한 구조 덕분에 오버헤드가 적습니다. 다만, 노드 수가 많아질 경우 네트워크 경로 관리가 복잡해질 수 있습니다. 또한, Layer 2 브로드캐스트 트래픽을 지원하지 않지만, 쿠버네티스에서는 파드들이 IP 기반으로 통신하므로 이는 크게 문제되지 않습니다. VxLAN모드 설치하기calico ..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 이번에는 Calico에서 지원하는 다양한 네트워크 모드를 살펴보고, 이를 실제로 설치 및 테스트해보려고 합니다. 첫 번째로 오버레이 네트워크 중 하나인 IPIP 모드를 다뤄보겠습니다. IPIP 란IPIP(IP-in-IP)는 IP 패킷을 또 다른 IP 패킷 안에 캡슐화하여 전달하는 오버레이 네트워크 프로토콜 중 하나입니다. 기존 IP 패킷에 새로운 IP 헤더를 추가하여 캡슐화하는 방식으로, 단순한 구조 덕분에 오버헤드가 적습니다. 그러나 노드 수가 많아질 경우 네트워크 경로 관리가 복잡해질 수 있습니다. 또한, IPIP모드는 Layer 2 브로드캐스트 트래픽을 지원하지 않지만, 쿠버네티스에서는 파드 간..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. 이번 포스트에서는 CNI 중에서 네트워크 정책 기능을 제공하는 Calico에 대해 알아보겠습니다. Calico 컴포넌트 데이터 저장소Kubernetes API Datastore는 Calico에서 네트워크 설정 정보를 Kubernetes API와 통합해 저장하는 방식입니다. 이 방식에서는 설정 정보를 Kubernetes API를 통해 관리하며, 설정 데이터는 ConfigMap이나 Custom Resource Definition(CRD) 형태로 저장됩니다. 직접적으로 Kubernetes API의 데이터베이스에 접근하지 않고, Kubernetes의 표준 API를 통해 네트워크 설정을 관리합니다. 별도의 추..