MSA 25

AWS Domain과 EKS Service DNS 간의 요청 응답 속도 비교

EKS 내부 서비스 간 통신 방식을 비교하기 위해 AWS Domain(ALB 경유) 방식과 EKS Service DNS(ClusterIP) 방식을 대상으로 성능 테스트를 진행했다. 일반적으로 클러스터 외부(ALB)로 나가는 것보다 내부 DNS(Service) 경로가 더 빠를 것이라고 예상할 수 있지만, 실제 결과는 반대였다. 구분테스트 유저 수테스트 시간총 요청 수요청률 (req/s) ALB20120초2281.90ALB20120초2291.92DNS20120초2181.84DNS20120초2191.83 1) 평균 응답 시간EKS Service DNS는 ALB 대비 약 380~500ms 느림 2) 최대 응답 시간(Max)EKS DNS 경로는 ALB 대비 최대 3,000ms 이상 지연 발생 3) 요청 처..

MSA/쿠버네티스 2025.12.11

[Kubernetes] RBAC 설정

개념K8s(Kubernetes)는 RBAC(Role-Based Access Control)을 통해 사용자(User) 또는 서비스 계정(ServiceAccount)에 리소스 접근 권한을 부여한다. 권한 구성K8s 권한은 아래 3가지 원칙으로 구성한다.최소 권한 원칙(Principle of Least Privilege) 적용필요 최소한의 권한만 부여모든 권한을 admin으로 주지 않도록 주의네임스페이스별 격리프로젝트나 서비스별로 네임스페이스를 분리하고 Role/RoleBinding으로 관리서비스 계정 사용 권장사람 계정(User) 보다는 서비스 계정(ServiceAccount)으로 권한 부여Pod가 권한을 사용해야 하는 경우 서비스 계정 연동 구성 원칙에 따라 네임스페이스 또는 클러스터 단위로 설정이 가능하..

MSA/쿠버네티스 2025.12.05

[Signoz] Signoz 란?

개요Signoz는 하나의 플랫폼에서 애플리케이션의 성능 모니터링(APM)과 로그, 트레이스를 통합하여 관찰 가능성을 제공하는 도구다. 복잡한 MSA(MicroService Architecture) 환경에서1. 분리된 모니터링 툴로 인해 근본 원인 분석 지연.2. 높은 상용 SaaS 비용과 벤더 종속성 문제 발생.에 대한 해결책으로, 이러한 파편화된 관측 환경을 통합하고 성능 및 비용 효율성을 높이기 위해 만들어졌다. SigNoz는 OpenTelemetry 네이티브 설계, ClickHouse 기반 단일 저장소를 기존 도구들의 차별점으로 삼는다.특징SigNoz기존 도구 (Prometheus/Jaeger/Loki 조합)OTel 네이티브처음부터 내장 (벤더 종속성 제로)OTel 통합 모델을 중심으로 구축되지..

MSA/APM 2025.11.17

[Docker] Java 프로젝트를 Docker 이미지로 빌드하기

AWS EC2로 운영중이던 java 서비스를 EKS 로 전환해야하는 일이 있었다. Maven 등의 빌드 도구가 필요한 java 서비스는 도커 이미지로 빌드하고 실행 환경을 만들면 빌드 환경과 서비스 실행 환경을 분리할 수가 있어서, Maven, JDK, 빌드 캐시 등의 불필요한 산출물들이 남지 않는다. # 1단계: 빌드 환경 (Maven)FROM maven:3.8.6-amazoncorretto-8 AS builderWORKDIR /buildCOPY service /buildRUN mvn clean package# 2단계: 실행 환경 (Amazon Linux)FROM amazonlinux:2 AS baseRUN yum update -y && \ yum install -y java-1.8.0-op..

MSA/도커 2025.10.13

[Kubernetes] Fluentbit 로그 수집 방법(Sidecar vs DaemonSet)

EKS에서 fluentbit를 sidecar로 띄울때와 daemonset으로 띄울때의 설정을 다르게 줘야한다. sidecar는 pod name을 바로 가져올 수 있지만, daemonset 은 기본적으로 노드 이름을 가져와서 설정을 따로 더 해줘야한다. [sidecar] fluentbit-configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: fluentbit-config namespace: ns-appdata: fluent-bit.conf: | [SERVICE] Flush 1 Grace 30 Log_Level ..

MSA/쿠버네티스 2025.09.16

[Kubernetes] HPA 설정 커스터마이징(hpa behavior)

HPA(Horizontal Pod Autoscale)CPU나 메모리 사용률을 기준으로 자동으로 파드 수를 조절할 수 있게 해주는 기능. autoscaling/v1 과 autoscaling/v2 가 있는데, autoscaling/v1 는 기본적인 CPU와 메모리 사용률 기준으로만 세팅이 가능하고 별다른 커스텀이 불가능하다. 다양한 메트릭 종류 및 스케일 인/아웃의 속도, 빈도, 조건에 대한 세밀한 조정이 필요하다면 v2를 사용해야한다. 항목 autoscaling/v1 autoscaling/v2지원 메트릭 종류리소스 (CPU, 메모리)리소스 (CPU, 메모리) external 메트릭 (ALB 요청 수 등 클러스터 외부 메트릭)object 메트릭 (클러스터 내부 메트릭)여러 메트릭 동시 지원XO v..

MSA/쿠버네티스 2025.08.07

[Kubernetes] zookeeper 역할 확인

Zookeeper 클러스터 멤버 간의 리더 선출과 데이터 동기화를 위해 zoo.cfg 파일에 해당 정보를 명시해준 후 pod를 올렸다면 정상적으로 리더 선출이 됐는지 확인이 필요하다.(리더선출이 안된 상태에서 사용하면 zookeeper 로그에 에러 메세지가 엄청 뜨게된다) zookeeper 파드 3대에 대한 역할을 확인하는 명령어:for pod in ; do echo "=== $pod mode ===" kubectl exec -n $pod -- zkServer.sh status 2>/dev/null | grep Modedone pod 이름은 zookeeper-0 zookeeper-1 zookeeper-2 이고 namespace는 ns-zookeeper로 해둔 경우 아래 명령어로 ..

MSA/쿠버네티스 2025.07.21

도커 권한 문제로 명령어 사용 불가 해결 방법(permission denied)

도커 설치 후 docker images 같은 docker 관련 명령어를 사용하기만하면 아래와 같은 에러가 떴다. permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock 계속 sudo 붙이면서 쓰기도 그래서, 도커 소켓에 접근 가능하도록 현재 사용자에 docker 그룹 권한을 추가했다. 1. 현재 사용자 확인whoami 2. docker 그룹에 사용자 추가sudo usermod -aG docker 3.적용newgrp docker

MSA/도커 2025.05.15

[Kubernetes] docker hub에 이미지 안올리고 로컬 이미지 사용하는 방법

로컬에서 my-image 라는 도커 이미지를 빌드하고 kubernetes의 deployment 로 파드를 배포하려고 하니 발생한 에러. Failed to pull image "my-image:latest": Error response from daemon: pull access denied for my-image, repository does not exist or may require 'docker login': denied: requested access to the resource is denied imagePullPolicy 를 수정해도 계속 로컬에 있는 이미지를 찾아오지를 못했는데, 알고보니 컨테이너가 올라가는 노드에 이미지를 올려줘야했다. 아래 명령어로 워커노드에 이미지 파일을 옮기고 ..

MSA/쿠버네티스 2025.04.25

[Kubernetes] 네임스페이스가 다른 서비스끼리 통신하는 방법(DNS)

kubernetes에는 같은 네임스페이스 내의 서비스는 서비스 이름만으로 접근이 가능하지만 네임스페이스가 서로 다를 경우에는 FQDN(Fully Qualified Domain Name)을 사용해서 접근해야한다.  kubernetes service를 생성하면 자동으로 DNS 레코드가 등록되고 서비스명.네임스페이스.svc.cluster.local 형태로 사용할 수 있다.    예를 들어, redis 서비스를 다음과 같이 만들었다면apiVersion: v1kind: Servicemetadata: name: redis namespace: redis-servicespec: type: ClusterIP selector: app: redis ports: - port: 6379 target..

MSA/쿠버네티스 2025.03.27