전체 글 694

[Azure] Application Gateway 환경에서 Graceful Pod Termination 구현하기

Graceful하게 Pod 종료하기graceful하게 pod를 종료하려면 큰 틀에서 두 가지 조건을 만족해야 한다. 1) 신규 트래픽이 종료 중인 파드로 전달되면 안된다. 2) 이미 들어온 트래픽이 처리가 될 때까지 파드는 종료되면 안된다.lordofkangs.tistory.com 이전 포스팅에서 K8s 환경에서 Graceful하게 pod 종료하는 방법을 다루어 보았다. 요약하면graceful하게 pod를 종료하려면 큰 틀에서 두 가지 조건을 만족해야 하는데, 1) 신규 트래픽이 종료 중인 파드로 전달되면 안된다. 2) 이미 들어온 트래픽이 처리가 될 때까지 파드는 종료되면 안된다. 신규 트래픽은 endpoint로 막히게 되고 기존 트래픽은 Linux의 conntrack 모듈로 인해 [ Client..

Ops/PublicCloud 2026.06.06

Graceful하게 Pod 종료하기

graceful하게 pod를 종료하려면 큰 틀에서 두 가지 조건을 만족해야 한다. 1) 신규 트래픽이 종료 중인 파드로 전달되면 안된다. 2) 이미 들어온 트래픽이 처리가 될 때까지 파드는 종료되면 안된다. 신규 트래픽이 종료 중인 파드로 전달되면 안된다. 신규 트래픽이 노드로 들어오면 kube-proxy가 iptables로 기록해둔 경로를 따라 service에서 endpoint 중 하나로 로드밸런싱한다. ( 원리 : https://lordofkangs.tistory.com/709 ) 이때 endpoint는 service에게 3가지 상태를 공유한다. - ready : 트래픽을 받을 준비가 되었는가?- serving : 요청 처리가 가능한가?- terminating : 파드가 삭제중인가?#..

Ops/Kubernetes 2026.06.05

PostgreSQL DB와 PGBouncer ( + Prepared Statements )

Client가 PostgreSQL DB에서 Query를 실행한다는 것은 다음과 같다. 1) ClientA가 PostgreSQL DB auth에 성공한다. ( 세션 생성 )2) PostgreSQL DB 내부에 ClientA 전용 process가 생성된다. ( backend process ) ( idle )3) ClientA가 ClientA 전용 process 공간에서 BEGIN 으로 트랜잭션을 시작한다. ( idle in transaction ) 4) ClientA가 쿼리를 실행한다. ( active ) 5) ClientA가 COMMIT/ROLLBACK 으로 트랜잭션을 종료한다. 6) ClientA의 backend process/session은 유지되며 다음 요청을 기다린다. ( idle )7) Clie..

CS/DB 2026.05.14

K8s readonly kubeconfig 파일 생성하기

default 네임스페이스에 K8s Cluster 전역 조회 권한이 있는 ServiceAccount 생성 ( Secret 리소스 읽기 제외 )apiVersion: v1kind: ServiceAccountmetadata: name: read-only-no-secrets namespace: default---# Kubernetes RBAC는 명시적 허용만 가능(제외 불가)하므로# core API group에서 secrets를 의도적으로 제외하고 나머지 리소스만 나열한다.apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: read-only-no-secretsrules: - apiGroups: [""] resources:..

Ops/Kubernetes 2026.05.14

Claude와 함께하는 개발환경 구축하기

CICD 구축 Claude Agent들은 feauture 단위로 컨텍스트를 소비할거라, feature 개발이 끝나면 MR을 생성해 기능테스트를 하기로 계획했다. DevMR이 생성되면 ArgoEvents로 구성된 CICD 파이프라인이 동작하면서 이미지를 빌드 및 푸시하고 HelmRepo의 dev-values.yaml의 이미지 태그를 변경한다. Dev K8s는 변경사항을 감지하고 Sync를 맞추어 배포를 진행하고 테스트를 진행한다. Prod테스트가 완료되면 Merge 이벤트를 발생시켜 CICD 파이프라인을 동작시키고 HelmRepo의 prod-values.yaml의 이미지 태그를 변경한다. Prod K8s는 변경사항을 감지하고 Sync를 맞추어 배포를 진행하고 테스트를 진행한다. App of Apps..

프로젝트 2026.05.01

k8s Secret을 Git으로 관리하는 방법

k8s Secret 은 Base64형식으로 민감한 정보가 그대로 노출되어 있어 git에 올려 관리할 수 없지만 한 가지 방법이 있다. Secret을 SealedSecret이라는 CRD로 암호화하여 Git에 올리고 SealedSecret가 배포되면 sealed-secrets 서비스가 SealedSecret 생성을 감지하고 복호화하여 Secret을 생성하여, Secret을 Git으로 관리할 수 있다. sealed-secrets 서비스 K8S 환경에 배포하기 helm repo add bitnami https://charts.bitnami.com/bitnami helm upgrade --install sealed-secrets bitnami/sealed-secrets --namespace sealed-s..

Ops/Kubernetes 2026.04.30

GRE 터널링 + NAT 환경으로 외부통신 구현

이슈 K8S 를 특정 클라우드 환경에 구현하다가 NAT 기능이 없는 것을 보고 NAT 기능을 해줄 VM이 필요하여 생성하였는데 이슈가 있었다. Client 서버(K8S Node)에서 NAT 서버로 정적 라우팅으로 트래픽을 foward하면 클라우드 환경 내부에서 비정상 패킷으로 감지하고 DROP 시키는 이슈가 있었다. 조치 NAT서버와 Client 서버 사이에 GRE 터널링을 적용하여 패킷을 캡슐화하고, 목적지 IP와 NIC의 MAC 주소 일관성을 유지함으로써 비정상 패킷으로 인한 DROP을 방지하고 NAT 기능을 구현하였다. NAT 서버 설정 # IP 포워딩 영구 활성화 +. 리눅스가 “패킷 경로 이상하다”면서 버리는 걸 막는 설정(rp_filter)echo "net.ipv4.ip_forward=..

Ops/Linux 2026.04.21

영구적인 Service Account Token 만들기

아래처럼 ServiceAccount에서 토큰을 추출하면 토큰만료기간이 정해져있어 보안에는 좋지만 관리가 쉽지 않다. # 한시적인 Token 생성 kubectl create token -n --duration=24h 토큰을 영구적으로 사용하려면 kubernetes.io/service-account-token 타입의 Secret을 생성하여 ControlPlane이 etcd에 저장된 Token을 만료시간을 reconciliation 하도록 해야한다. To create a non-expiring, persisted API token for a ServiceAccount, create a Secret of type kubernetes.io/service-account-token with an annotat..

Ops/Kubernetes 2026.02.04

node-core-dns 란?

K8s에 떠있는 파드 하나에 내부로 접속해서 resolv.conf 파일을 열어보면 다음과 같다. bash-4.4$ cat /etc/resolv.confsearch mongodb.svc.cluster.local svc.cluster.local cluster.local default.svc.cluster.localnameserver 192.254.25.10options ndots:5 kube-proxy는 svc -> pod 트래픽을 이동시킨다. 그러므로 만약 다른 파드로 트래픽을 보내고 싶다면 svc로 트래픽을 보내면 된다. svc의 도메인과 ip 매핑 정보는 CoreDNS에 저장되어 있는데, DNS 쿼리 성능을 높히기 위해, CoreDNS의 캐시를 가지고 있는 파드를 daemonset으로 배포하는데, ..

Ops/Kubernetes 2025.12.31

[Terraform] 테라폼 동작원리 ( + Ansible )

Terraform이 강력한 이유는 tfstate 파일로 인프라를 리소스 단위로 상태 관리를 하기 때문이다. AWS, AZURE 같은 Public Cloud 환경은 여러 리소스 ( VPC, EC2 등 )이 서로 유기적으로 연동되어 있는데, 이를 '코드'로 구현하고 구현된 '상태'를 비교하여 어떤 인프라 요소가 생성, 변경, 삭제 되는지를 예측할 수 있다. 반면 대표적인 또 다른 배포도구인 Ansible은 상태를 관리하지 않는다. 상태를 관리하는 Terraform, 상태를 관리하지 않는 Ansible. 두 도구의 철학은 다르다. Terraform은 비교로 인프라를 관리하고Ansible은 명령으로 인프라를 관리한다. Terraform은내가 원하는 상태는 'EC2가 t3.small이야' 라고 말하면 테라폼..

Ops/CICD 2025.12.26