Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
998ad8e
브랜치 변경으로 인한 Ci/CD 및 ArgoCD 타겟 브랜치 목록 최신화
joung-pjh Jun 11, 2026
e8e978b
Merge branch 'develop' into cvt/traefik
joung-pjh Jun 20, 2026
c5d638b
[ArgoCD]traefik 설치를 위한 chart 작성
joung-pjh Jul 15, 2026
3eb4c92
Traefik용 ClusterIssuer 생성
joung-pjh Jul 15, 2026
906a716
Traefik 검증용 Certificate 생성
joung-pjh Jul 15, 2026
2948ec4
Traefik canary 검증용 application 생성
joung-pjh Jul 15, 2026
623a215
Traefik canary 미들웨어 추가
joung-pjh Jul 15, 2026
965baf2
Traefik과 Nginx 병행 운영 시 기타 ingress 처리를 Traefik이 처리하지 못하게 수정
joung-pjh Jul 15, 2026
1e88c22
오타 수정
joung-pjh Jul 15, 2026
b04c597
Update Traefik configuration and certificate domains to use bidservic…
joung-pjh Aug 12, 2026
980de0e
fix: update GitHub OIDC repository subjects
joung-pjh Aug 12, 2026
2ff08de
fix: resolve application lint errors
joung-pjh Aug 12, 2026
7b0714d
chore: update image tag to sha-2ff08de [skip ci]
github-actions[bot] Aug 12, 2026
339016c
fix: update ArgoCD application repository
joung-pjh Aug 12, 2026
1fc2db5
fix: provision EC2 Spot service role
joung-pjh Aug 12, 2026
8dd7041
changer version
joung-pjh Aug 14, 2026
a0eef11
chore: update image tag to sha-8dd7041 [skip ci]
github-actions[bot] Aug 14, 2026
b15b693
잘못된 traefik 문법 수정 및 version 수정
joung-pjh Aug 14, 2026
b3e198c
chore: update image tag to sha-b15b693 [skip ci]
github-actions[bot] Aug 14, 2026
a1e46db
change version
joung-pjh Aug 17, 2026
fdc6f2e
chore: update image tag to sha-a1e46db [skip ci]
github-actions[bot] Aug 17, 2026
f73ed16
change version
joung-pjh Aug 20, 2026
aa47f97
chore: update image tag to sha-f73ed16 [skip ci]
github-actions[bot] Aug 20, 2026
2d2d7f0
[RDS] primary/replica log 추가 (in. Loki)
joung-pjh Aug 20, 2026
33f21b5
chore: update image tag to sha-2d2d7f0 [skip ci]
github-actions[bot] Aug 20, 2026
c4005a8
change version
joung-pjh Aug 20, 2026
6f749a6
chore: update image tag to sha-c4005a8 [skip ci]
github-actions[bot] Aug 20, 2026
da42fe7
feat: enhance metrics and resource management in ingress-nginx and tr…
joung-pjh Sep 1, 2026
b2f1f53
feat: refactor health check endpoint to use Annotated for dependency …
joung-pjh Sep 1, 2026
1923ab7
chore: update image tag to sha-b2f1f53 [skip ci]
github-actions[bot] Sep 1, 2026
454ea15
Enhance README with architecture diagrams
joungGo Sep 1, 2026
6a2e656
chore: add TODO for ownerReference in certificate-traefik.yaml
joung-pjh Sep 1, 2026
1a23d68
change version
joung-pjh Sep 3, 2026
1c0aa2e
chore: update image tag to sha-1a23d68 [skip ci]
github-actions[bot] Sep 3, 2026
2d3f8d3
feat: add topology spread constraints for Traefik replicas and commen…
joung-pjh Sep 4, 2026
572b134
change version
joung-pjh Sep 4, 2026
45695e8
chore: update image tag to sha-572b134 [skip ci]
github-actions[bot] Sep 4, 2026
bb5ba41
chore: update image tag to sha-abc123 [skip ci]
joung-pjh Sep 4, 2026
ea699c7
ipallowlist ip 목록 수정
joung-pjh Sep 4, 2026
b20a2e6
feat: Traefik 라우팅 리소스를 운영 환경으로 승격
joung-pjh Sep 4, 2026
649ee5c
fix: redirect-308 포트를 8080으로 변경하여 노드 간 통신 보안그룹 허용
joung-pjh Sep 4, 2026
f09bd64
feat: 운영 인증서 관리를 Traefik ingress-shim으로 이전
joung-pjh Sep 4, 2026
e9cafea
chore: ingress-nginx 애플리케이션 Ingress 비활성화
joung-pjh Sep 4, 2026
2aa38a5
chore: ingress-nginx 및 카나리 잔여 파일 정리
joung-pjh Sep 4, 2026
c3071c9
changer version
joung-pjh Sep 7, 2026
f511ac8
chore: update image tag to sha-c3071c9 [skip ci]
github-actions[bot] Sep 7, 2026
2c165aa
feat: add operator public IP to allowlist
joung-pjh Sep 7, 2026
426bdba
delete docs
joung-pjh Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
push:
branches:
- main
- feat/week11
- cvt/traefik
paths:
- 'url-shortener/app/**'
- 'url-shortener/Dockerfile'
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ FastAPI 애플리케이션을 AWS EKS에 배포하기 위한 인프라, CI/CD, G

## 아키텍처

### 멀티 AZ 인프라 아키텍처
<img width="2752" height="1536" alt="AIDrawing_260901_9c28db43-9288-4fec-9dae-449eb76fbda3_0_MiriCanvas" src="https://github.com/user-attachments/assets/ce64e73e-4368-409a-ab73-780ced0ea609" />

### nginx Ingress 기반 트래픽 흐름 구조

<img width="1500" height="1200" alt="image" src="https://github.com/user-attachments/assets/75e00e20-4614-432d-851a-9dd72df3e539" />


Expand Down
56 changes: 0 additions & 56 deletions cluster-addons/ingress-nginx/application.yaml

This file was deleted.

4 changes: 4 additions & 0 deletions cluster-addons/prometheus/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ alertmanager:
group_wait: 0s # 알림을 묶어서 보낼 대기 시간
repeat_interval: 1h # 해결 안 된 알림 재발송 간격
receiver: slack-notifications # 알림 수신자
routes:
- matchers:
- alertname="Watchdog"
receiver: "null"

receivers:
- name: "null" # Watchdog 등 무시할 알림용 no-op receiver
Expand Down
110 changes: 110 additions & 0 deletions cluster-addons/traefik/application.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: traefik
namespace: argocd
spec:
project: default
source:
repoURL: https://traefik.github.io/charts
chart: traefik
targetRevision: 41.0.2
helm:
values: |
deployment:
replicas: 2

resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 512Mi

podDisruptionBudget:
enabled: true
minAvailable: 1

# DoNotSchedule: 두 번째 replica를 다른 AZ/노드에 둘 수 없으면 Pending으로 두어
# 단일 AZ 장애를 Ready replica로 숨기지 않는다.
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/name: traefik
app.kubernetes.io/instance: traefik-traefik
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/name: traefik
app.kubernetes.io/instance: traefik-traefik

ingressClass:
enabled: true
isDefaultClass: false # true 로 설정하면 traefik-ingress-controller 가 ingressClassName 을 쓰지 않은 Ingress 도 처리할 수 있음
name: traefik

# 라우팅 설정을 어디서 읽어 올지 결정하는 설정
providers:
kubernetesCRD:
enabled: true
ingressClass: traefik
kubernetesIngress:
enabled: true
ingressClass: traefik
publishedService:
enabled: true

service:
enabled: true
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: "preserve_client_ip.enabled=true"
spec:
type: LoadBalancer

ports:
web:
exposedPort: 80
# http:
# redirections:
# entryPoint:
# to: websecure
# scheme: https
# permanent: true
websecure:
exposedPort: 443

log:
level: INFO
accessLog:
enabled: true

metrics:
prometheus:
addEntryPointsLabels: true
addRoutersLabels: true
addServicesLabels: true
buckets: "0.01,0.025,0.05,0.1,0.25,0.5,1.0,2.0,5.0"
service:
enabled: true
serviceMonitor:
enabled: true
additionalLabels:
release: kube-prometheus-stack
destination:
server: https://kubernetes.default.svc
namespace: traefik
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
102 changes: 0 additions & 102 deletions resume_url_shortener_project_draft.md

This file was deleted.

7 changes: 4 additions & 3 deletions terraform/github_actions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,17 @@ module "github_actions_role" {
version = "~> 6.0"

name = "${var.project_name}-github-actions-role"
use_name_prefix = false # 타임스탬프 suffix 방지
use_name_prefix = false # 타임스탬프 suffix 방지

enable_github_oidc = true # ← 추가 (GitHub OIDC 신뢰 관계 자동 구성)

# 보안: 특정 레포지토리의 main 브랜치만 허용
# pull_request 이벤트까지 허용하려면 "repo:org/repo:*"으로 변경
# TODO: dev, prod 환경 구분하기
# 현재 저장소의 모든 브랜치와 pull_request 이벤트 허용
oidc_wildcard_subjects = [
"repo:f-lab-edu/Url-Shortener-EKS-Platform:ref:refs/heads/*", # 모든 브랜치 허용
"repo:f-lab-edu/Url-Shortener-EKS-Platform:pull_request"
"repo:f-lab-edu/F-Lab-DevOps:ref:refs/heads/*",
"repo:f-lab-edu/F-Lab-DevOps:pull_request"
]

policies = {
Expand Down
7 changes: 6 additions & 1 deletion terraform/karpenter.tf
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Karpenter가 Spot 인스턴스를 생성할 때 사용하는 AWS 관리형 서비스 연결 역할
resource "aws_iam_service_linked_role" "ec2_spot" {
aws_service_name = "spot.amazonaws.com"
}

# Karpenter 인프라 — terraform-aws-modules/eks karpenter 서브모듈 사용
# Controller IRSA + Node Role + Instance Profile + SQS + EventBridge를 한 번에 생성
# Controller Pod Identity + Node Role + Instance Profile + SQS + EventBridge를 한 번에 생성

module "karpenter" {
source = "terraform-aws-modules/eks/aws//modules/karpenter"
Expand Down
2 changes: 1 addition & 1 deletion terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ module "eks" {
eks_managed_node_groups = {
main = {
name = "${var.project_name}-nodegroup"
use_name_prefix = false # 타임스탬프 suffix 방지 - 항상 동일한 이름 유지
use_name_prefix = true # 교체 시 새 노드 그룹을 먼저 생성할 수 있도록 이름 충돌 방지

iam_role_name = "${var.project_name}-nodegroup-role"
iam_role_use_name_prefix = false
Expand Down
6 changes: 3 additions & 3 deletions terraform/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ variable "availability_zones" {
variable "eks_cluster_version" {
description = "EKS Kubernetes 버전"
type = string
default = "1.34"
default = "1.35"
}

variable "node_instance_type" {
description = "EKS Worker Node EC2 인스턴스 타입"
type = string
default = "t3.medium"
default = "t3.large"
}

# terraform apply 시 생성되는 노드 수
Expand Down Expand Up @@ -61,4 +61,4 @@ variable "db_password" {
description = "RDS master(user=postgres) password (manage_master_user_password=false 사용 시 필수)"
type = string
sensitive = true
}
}
Loading
Loading