본문 바로가기
반응형

DevOps45

OpenVPN Split Tunnel 환경에서 특정 서브넷 라우팅 누락 문제와 EKS 환경 라우팅 고려사항 1. 환경 구성AWS VPC 서브넷 구조:Public A (10.0.1.0/24) : OpenVPN 서버Private B (10.0.11.0/24) : EKS 클러스터Private C (10.0.21.0/24) : MariaDB 서버OpenVPN 클라이언트 대역: 10.8.0.0/24기본 설정:모든 서브넷의 라우트 테이블에 10.8.0.0/24 → OpenVPN EC2 ENI 등록SG에서 10.8.0.0/24 → 3306(TCP) 허용NACL은 In/Out Any/AnyOpenVPN EC2: Source/Dest Check 비활성화, ip_forward=12. 증상VPN 클라이언트 → EKS 파드(Ping) : 정상VPN 클라이언트 → MariaDB(3306/TCP) : 타임아웃EKS 파드 → Maria.. 2025. 8. 15.
EKS에서 Amazon DocumentDB 연결 테스트: 왜 telnet은 안되고 mongo는 될까? AWS EKS에 documentDB를 연결하기 위해 일반적인 보안설정(SG,routing,NACL..) 을 마치고 telnet으로 해당 포트를 테스트 해보았는데 time out이 걸려서 뭐 잘못했는지 엄청 헤매는 경험이 있었습니다. 그러다가 해당 앱의 client 연결 하는것을 받아 해보았는데 접속이 되었습니다.나의 무적의 telnet 테스트가 안되다니... 시간 오래 걸린것보다 충격이어서 정리 들어갑니다. 목차 telnet/nc는 L4(포트) 열림만 확인합니다. TLS/인증은 모릅니다.DocumentDB는 TLS 필수 + Mongo 프로토콜을 요구하므로, telnet만으론 “무응답/타임아웃처럼” 보일 수 있어요.정확한 순서는 nc(L4) → openssl s_client(TLS) → mongo/mon.. 2025. 8. 12.
AWS ALB + Grafana: 헬스체크는 unhealty지만 접속은 되는 이유와 해결법 쿠버네티스에서 Grafana를 Helm Chart로 배포하고, AWS ALB Ingress Controller로 외부에 노출하는 작업을 하다 보면 이런 상황을 만나곤 합니다.ALB 콘솔 Target Group 상태: Unhealthy그런데 웹 브라우저에서 접속하면 Grafana 정상 동작"아니… 헬스체크가 깨졌는데 어떻게 접속이 되지?"저도 처음엔 이 상황이 꽤 혼란스러웠습니다.1. 문제 상황Terraform으로 kube-prometheus-stack의 Grafana를 설치하고, ALB Ingress를 통해 / 경로로 연결했을 때의 상태입니다.ALB Target Group 상태IP: 10.0.x.x:3000Status: UnhealthyHealth checks failed with ...그런데 브라우저로.. 2025. 8. 8.
Terraform으로 ArgoCD + GitHub Deploy Key 구성 시 SSH 인증 오류 해결기 목차 1. 환경 구성 개요Terraform으로 다음 리소스를 구성했습니다.ArgoCD (Helm Chart)GitHub Deploy Key 생성 (TLS provider)ArgoCD Repository Secret 생성 (SSH Private Key 저장)Application 리소스 생성 (kubernetes_manifest)변수 예시:git_repo_url = "git@github.com:smith/smith-test.git" git_repo_path = "argocd" git_target_revision = "main" argocd_app_namespace = "default"2. 발생한 오류2.1 ArgoCD Repository Secret 생성 시 SSH Agent 에러Error: POST htt.. 2025. 8. 8.
Terraform으로 AWS ALB Ingress 삭제 시 finalizer에 걸려 무한 대기하는 문제 해결기 목차 1. 문제 상황Terraform으로 AWS ALB Ingress를 생성하고, terraform destroy를 실행했는데 Ingress 리소스에서 삭제가 진행되지 않고 계속 대기하는 상황이 발생했습니다.# destroy 시 무한 대기...module.alb_ingress.kubernetes_ingress_v1.alb_ingress: Still destroying... [id=app/alb-ingress, 10m elapsed]강제 종료 후 수동으로 다음 명령어를 실행하면 삭제가 됩니다.kubectl patch ingress alb-ingress -n app -p '{"metadata":{"finalizers":[]}}' --type=merge즉, metadata.finalizers가 삭제를 막고 있.. 2025. 8. 8.
AWS ALB Ingress Controller – 포트 & Path 기반 라우팅 완전 정리 목차 쿠버네티스 환경에서 AWS ALB Ingress Controller를 사용하면, 하나의 ALB로 여러 서비스에 트래픽을 라우팅할 수 있습니다.이 글에서는 포트와 Path를 활용한 라우팅 개념부터 Terraform 예제, 그리고 포트 매핑 케이스별 매트릭스와 패킷 흐름까지 전부 정리합니다.1. ALB + Kubernetes에서 포트 흐름 이해하기ALB → Kubernetes Service → Pod 컨테이너 포트는 아래 4단계로 연결됩니다.[Client] ↓ Listener Port[ALB Listener] ↓ Target Group Port (Service Port)[Kubernetes Service] ↓ targetPort[Pod Container Port] 구분 설명예시ALB Li.. 2025. 8. 8.
AWS 콘솔에서 만든 CloudFront 배포를 Terraform으로 가져와 관리하는 방법 (terraform import) 목차 AWS에서 CloudFront 배포(Distribution)를 콘솔로 만들었지만, 나중에 코드 기반 관리(IaC)를 위해 Terraform으로 전환하고 싶을 때 어떻게 해야 할까요?이번 글에서는 Terraform의 import 기능을 통해 콘솔로 만든 CloudFront 리소스를 Terraform으로 상태 일치시켜 관리하는 전체 과정을 실습 기반으로 정리합니다.🎯 목표콘솔에서 만든 CloudFront 배포를 삭제하지 않고 Terraform으로 가져옴Terraform 상태(state)와 코드(.tf)를 일치시켜 안전하게 관리Terraformer 사용 시 주의점까지 포함✅ 전체 작업 흐름 요약 단계설명1최소한의 .tf 리소스 블록 작성2terraform import로 상태(state) 연결3terra.. 2025. 8. 7.
GitHub Actions로 FastAPI Docker 이미지 AWS ECR에 자동 배포하기 개요이번 글에서는 GitHub Actions를 활용해 FastAPI 프로젝트를 AWS ECR에 자동으로 Docker 이미지로 빌드 & 푸시하는 전체 과정을 소개합니다.CI/CD 파이프라인을 처음 구성하는 분들이라면, 이 글을 따라 하면서 다음을 배울 수 있습니다:FastAPI 프로젝트에 Docker 적용하기AWS ECR에 리포지터리 만들기GitHub Secrets 설정GitHub Actions Workflow 구성하기 1. FastAPI 프로젝트 생성mkdir fastapi-app && cd fastapi-apppython -m venv venvsource venv/bin/activatepip install fastapi uvicorn📄 app/main.pyfrom fastapi import FastA.. 2025. 8. 7.
Terraform에서 Kubernetes Provider 사용법 완벽 정리 – EKS 클러스터 내부 리소스까지 코드로 관리하는 법Terraform으로 AWS 인프라를 구축할 때, EKS 클러스터는 aws provider를 통해 생성할 수 있습니다. 하지만 EKS 내부의 Kubernetes 리소스들(Namespace, ConfigMap, DaemonSet 등)은 kubernetes provider를 통해 따로 관리해야 합니다.이번 포스팅에서는 Terraform의 kubernetes provider가 무엇인지, 왜 필요한지, 그리고 실무에서 어떻게 사용하는지를 정리합니다. Kubernetes Provider란?kubernetes provider는 Terraform이 기존 Kubernetes 클러스터 내부의 리소스를 코드로 선언하고 관리할 수 있게 해주는 플러그인입니다.예를 들어aw.. 2025. 7. 30.
AWS EKS에서 NLB + ingress-nginx 구성 시 가장 많이 쓰는 방식은? AWS EKS에서 ingress-nginx를 사용할 때 Network Load Balancer(NLB)를 함께 구성하는 경우가 많습니다. 이때 흔히 발생하는 문제가 하나 있습니다.바로 노드가 오토스케일링 되면서 NLB Target Group에 Unhealthy 노드가 생기는 현상입니다. 이 글에서는 그 이유를 분석하고, 실무에서 가장 많이 사용되는 조합이 무엇인지 정리해보겠습니다.💥 문제 상황 요약ingress-nginx는 기본적으로 Deployment 형태로 배포됩니다.NLB는 Kubernetes Service의 type: LoadBalancer를 통해 생성되며, 모든 노드의 NodePort를 대상으로 상태검사(Health Check) 를 수행합니다.그런데 Ingress Controller Pod가 .. 2025. 7. 29.
Helm의 기본 개념과 커스터마이징의 한계 그리고 확장 전략 Kubernetes 환경에서 Helm은 사실상 표준 패키지 매니저로 자리잡았습니다. 간단한 명령어 하나로 수백 줄의 YAML을 배포하고, 롤백과 업그레이드까지 처리할 수 있기 때문이죠. 하지만 Helm의 작동 방식은 매우 엄격하게 선언적이기 때문에, 때로는 커스터마이징의 유연성이 떨어진다는 피드백도 많습니다.이 글에서는 Helm의 일반적인 특성과 한계, 그리고 이를 확장하는 방법까지 설명합니다. Helm이란?Helm은 Kubernetes 애플리케이션을 정의하고 설치하며 관리하는 패키지 매니저입니다. Linux의 apt, macOS의 brew에 대응된다고 볼 수 있습니다.Helm의 핵심 요소는 다음과 같습니다: 구성요소설명ChartKubernetes 리소스 템플릿 집합Values사용자 입력 값 (chart.. 2025. 7. 29.
Helm으로 Fluent Bit 배포 시 커스텀 ConfigMap 설정이 적용되지 않는 이유와 해결 방법 문제 상황AWS EKS 환경에서 Fluent Bit을 Helm과 Terraform으로 배포를 helm을 통해서 fluentbit 을 설치했는데 파드의 로그가 모두 쌓였다. 특정 로그 (예: kube-proxy, aws-for-fluent-bit, prometheus) 를 제외하고자 아래와 같은 custom ConfigMap을 구성했다: resource "kubernetes_config_map" "fluentbit_config" { metadata { name = "fluentbit-custom-config" namespace = "logging" } data = { "fluent-bit.conf" = 그리고 Helm으로 다음과 같이 적용resource "helm_releas.. 2025. 7. 29.
반응형