목록전체 글 (198)
카이도스(Kaidos)의 Tech Blog
1. 구조(root)+- src # Groovy 소스 파일+- vars| +- buildByGradle.groovy # java gradle 빌드| +- buildByGradleShellScript.groovy # 특정쉘을 이용한 gradle 빌드| +- buildByGradleTest.groovy # Gradle 빌드 테스트| +- buildByMaven.groovy # java maven 빌드| +- buildByMavenShellScript.groovy # 특정쉘을 이용한 Maven빌드| +- buildHelm.groovy # helm chart 빌드| +- buildIm..
Kubernetes etcd vs Sidecar etcd, KVStoreMesh, Global Service까지 한 번에 이해하기작성 기준이 글은 Cilium 1.16 ~ 1.19 계열 기준으로 정리했다.ClusterMesh는 버전에 따라 기본값, 인증서 처리 방식, 일부 내부 구현이 달라질 수 있으므로 실제 운영 환경에서는 사용 중인 버전 문서를 함께 확인하는 것을 권장한다.ClusterMesh를 처음 보면 보통 여기서 헷갈린다.Kubernetes도 etcd를 쓰는데 왜 ClusterMesh에도 etcd가 있는가KVStoreMesh를 켜면 정확히 뭐가 달라지는가Global Service는 실제로 어떤 식으로 동작하는가결론부터 말하면 아래처럼 이해하면 된다.Kubernetes etcdKubernetes ..
폐쇄망 베어메탈 IDC 환경에서 수백 대 규모의 멀티클러스터·멀티테넌트 Kubernetes를 설계·구축·운영하면서 경험한 네트워크 아키텍처를 정리했습니다.이 환경에서는 퍼블릭 클라우드의 관리형 네트워크 기능을 사용할 수 없기 때문에, Kubernetes 네트워크 스택을 직접 설계해야 했습니다. kube-proxy를 완전히 제거하고 Cilium eBPF 기반 데이터패스를 사용했으며, Cisco EVPN/VXLAN 기반 데이터센터 패브릭 위에 BGP ECMP와 Cilium Cluster Mesh를 결합해 멀티클러스터 환경에서도 페타바이트 단위 데이터 처리와 수십~수백 Gbps 트래픽을 안정적으로 처리할 수 있는 구조를 구성했습니다.퍼블릭 클라우드 환경에서는 상대적으로 보기 어려운 베어메탈 네트워크 아키텍처인..
들어가며..HTTP 상태 코드는 서버가 요청을 어떻게 처리했는지를 세 자리 숫자로 알려주는 약속이다.크게 1xx(정보) / 2xx(성공) / 3xx(리다이렉션) / 4xx(클라이언트 오류) / 5xx(서버 오류)로 나뉘며, 이 글에서는 실무에서 자주 마주치는 코드만 골라 정리한다.2xx — 성공요청이 정상적으로 처리됐을 때 반환된다.200 OK 가장 기본적인 성공 응답이다. GET 요청으로 데이터를 잘 받아왔거나, POST 요청이 성공적으로 처리됐을 때 사용한다. 특별한 사정이 없다면 성공 응답은 대부분 200이다.201 Created 새로운 리소스가 생성됐을 때 반환한다. 회원가입, 게시글 작성처럼 POST 요청으로 무언가를 만들어낸 직후에 적합하다. 응답 헤더의 Location 필드에 새로 생성된 리..
Blackbox Exporter란?Blackbox Exporter는 Prometheus 생태계에서 엔드포인트(Endpoint) 를 “블랙박스(blackbox)” 방식으로 점검하기 위한 Exporter입니다. 다른 exporter들이 서버/애플리케이션 내부 메트릭을 수집하는 것과 달리, Blackbox Exporter는 대상의 내부 구조를 몰라도 실제 요청(Probe) 을 보내 가용성과 응답 시간을 측정합니다.HTTP 요청, ICMP(ping), DNS 쿼리 등을 통해 “사용자 입장에서 접속이 되는지”를 확인하며, 어디에 배치하느냐에 따라 클러스터 내부 관점(내부 DNS/Service/Ingress) 또는 외부 사용자 관점(인터넷/외부망)으로도 모니터링할 수 있습니다.핵심 개념Blackbox Exporte..
들어가며Artifact Repository로 Nexus를 운영하다 보면 단순히 설치하고 끝이 아닙니다. 실제 운영 환경에서는 어떤 요청이 많은지, 어디서 병목이 발생하는지 모니터링하고 최적화해야 합니다. 이 글에서는 Prometheus와 Grafana를 활용한 Nexus 모니터링 구성과 실질적인 성능 최적화 전략을 공유합니다.1. 모니터링 구성: Prometheus + Grafana모니터링 메트릭 수집Prometheus로 Nexus 메트릭 수집Grafana로 시각화 대시보드 구성로그 분석을 통한 요청 패턴 파악주요 모니터링 항목- HTTP 메소드별 집계 (GET, PUT, DELETE, HEAD)- 요청 타입별 집계 (다운로드, 조회, 업로드, 삭제)- 사용자/빌드서버 IP별 요청 빈도- 응답 시간 및 ..
안녕하세요. 오늘은 Cilium L2 Announcement(L2announce) 동작 원리를 정리하고, 소스 IP 보존이 필요한 서비스(특히 Ingress-NGINX) 를 배포할 때 어떤 방식으로 구성해야 장애를 예방할 수 있는지 실제 사례 기반으로 공유드립니다.참고로 트래픽 분산(ECMP) 이 목적이라면 L2 Announcement보다는 BGP 구성이 더 적합한 경우가 많습니다.본 글은 분산보다는 Failover(리더 전환) 와 소스 IP 보존 관점에서 L2 Announcement를 다룹니다.사전정보: 제가 현재 근무하는곳의 인프라 환경은 아래와 같습니다.모든 서버는 베어메탈(물리 서버)멀티 클러스터 / 멀티 테넌트 환경으로 클러스터당 수십~수백 대 규모워커 노드 소유권이 팀별로 달라(각 개발팀이 구..
안녕하세요. 항상 그렇듯이 바쁘다는 핑계로 포스팅이 늦어졌네요. 😅오늘은 Cilium을 사용하는 Kubernetes 환경에서 리부팅 수준의 복구를 커널 단에서 수행하는 방법을 정리해봤습니다.배경Kubernetes 클러스터를 운영하다 보면, Cilium이 네트워크 레벨에서 꼬이거나 비정상적인 상태에 빠져 Pod 간 통신 불가, 네임스페이스 단절, BPF 맵 손상 등의 문제가 발생할 수 있습니다.이 경우 단순히 Cilium Pod를 재시작하는 것만으로는 복구되지 않아, 결국 노드 리부팅이 필요한 상황까지 이어지기도 합니다.하지만 대규모 조직(예: 인프라팀, 네트워크팀, DevOps팀이 분리된 대기업 환경)에서는물리 서버 접근이나 재부팅 권한이 DevOps팀에 없는 경우가 많습니다.이럴 때는 리부팅과 동일한..
RKE2 기반 Kubernetes 클러스터를 구축한 지도 어느덧 1년이 넘었네요. 😊그동안 버전 업데이트, CNI 교체, Ingress 변경, 네트워크 구성(BGP 도입 등)까지 다양한 테스트를 진행해왔습니다.처음에는 소규모~중규모 환경에 맞춘 구성이었지만,이제는 중대규모 환경까지도 충분히 대응 가능한 구조로 확장 테스트를 마친 상태입니다.이번 구성의 주요 변화는 아래와 같습니다.Ingress: NGINX → Cilium IngressCNI: 기본 CNI → Cilium (kube-proxy 제거, eBPF 기반)IP 광고 방식: ARP 기반 → BGP Control Plane 기반 (FRR+ECMP 연동)Ingress부터 LoadBalancer 트래픽까지 Cilium 네트워크로 통일했고,기존 L2 A..
안녕하세요.이직 후 정신없이 지내느라 블로깅이 뜸했네요 😅최근 Kubernetes 클러스터 네트워크 구성 중, BGP를 활용한 라우터 서버 구축이 필요해져서 관련 내용을 블로그에 정리해봤습니다.소규모 환경에서는 ARP로도 충분할 수 있지만, 중~대규모 환경에서는 FRR + ECMP + BGP 조합이 효과적이라 필요성을 느끼게 되었고, 마땅한 레퍼런스가 부족해 직접 구성해보았습니다.회사 내에서 BGP 도입을 고려 중이라면 참고하시면 도움이 될 것 같아요.물론 가능하면 L4 장비 쓰시는 걸 추천드립니다 😉-> 참고로 모든 IP 대역은 이해하시기 편하게 모두 공개해두었습니다.(개인 테스트 대역이기 때문에.. ㅎㅎ)사전 정보구성 요소정보FRR-1172.16.60.11FRR-2172.16.60.12FRR AS..