PitterPetter 인프라에서 사용하는 Nginx Ingress Controller에 대한 상세 가이드입니다.
현재 인프라는 Nginx Ingress Controller를 사용하여 외부에서 Kubernetes 서비스에 접근할 수 있도록 합니다.
외부 사용자 → LoadBalancer (34.64.212.163) → Nginx Ingress Controller → 도메인별 라우팅
├── argocd.pitterpetter.com → ArgoCD
├── workflows.pitterpetter.com → Argo Workflows
├── rollouts.pitterpetter.com → Argo Rollouts
└── api.loventure.us → Microservices
├── /api/auth/* → Auth Service
├── /api/course/* → Course Service
└── /api/diaries/* → Content Service
- 외부 IP:
34.64.212.163 - 포트: 80 (HTTP), 443 (HTTPS)
- 타입: External LoadBalancer
| 서비스 | 도메인 | 네임스페이스 | 포트 | 엔드포인트 |
|---|---|---|---|---|
| ArgoCD | argocd.pitterpetter.com |
argocd |
80, 443 | GitOps 관리 |
| Argo Workflows | workflows.pitterpetter.com |
argo |
80, 443 | 워크플로우 오케스트레이션 |
| Argo Rollouts | rollouts.pitterpetter.com |
argo-rollouts |
80, 443 | 고급 배포 전략 |
| Auth Service | api.loventure.us |
loventure-app |
8081 | /api/auth/* |
| Course Service | api.loventure.us |
loventure-app |
8083 | /api/course/* |
| Content Service | api.loventure.us |
loventure-app |
8082 | /api/diaries/* |
# ArgoCD
https://argocd.pitterpetter.com
# Argo Workflows
https://workflows.pitterpetter.com
# Argo Rollouts
https://rollouts.pitterpetter.com
# API 서비스들
https://api.loventure.us/api/auth/health
https://api.loventure.us/api/course/health
https://api.loventure.us/api/diaries/health주의사항: SSL 인증서가 자체 서명되어 있어 브라우저에서 보안 경고가 나타납니다. "고급" → "안전하지 않은 사이트로 이동"을 클릭하여 진행하세요.
# ArgoCD
kubectl port-forward svc/argocd-server -n argocd 8080:443
# 접속: https://localhost:8080
# Argo Workflows
kubectl port-forward svc/argo-workflows-server -n argo 2746:2746
# 접속: http://localhost:2746
# Argo Rollouts
kubectl port-forward svc/argo-rollouts-dashboard -n argo-rollouts 3100:3100
# 접속: http://localhost:3100# ArgoCD 테스트
curl -H "Host: argo.loventure.us" -k https://34.64.212.163
# Argo Workflows 테스트
curl -H "Host: workflows.loventure.us" -k https://34.64.212.163
# Argo Rollouts 테스트
curl -H "Host: rollouts.loventure.us" -k https://34.64.212.163
# API 서비스 테스트
curl -k https://api.loventure.us/api/auth/health
curl -k https://api.loventure.us/api/course/health
curl -k https://api.loventure.us/api/diaries/health# Pod 상태 확인
kubectl get pods -n ingress-nginx
# 서비스 상태 확인
kubectl get svc -n ingress-nginx
# 로그 확인
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx# 모든 Ingress 확인
kubectl get ingress -A
# 특정 Ingress 상세 정보
kubectl describe ingress argocd-server -n argocd# ArgoCD 상태
kubectl get pods -n argocd
kubectl get svc -n argocd
# Argo Workflows 상태
kubectl get pods -n argo
kubectl get svc -n argo
# Argo Rollouts 상태
kubectl get pods -n argo-rollouts
kubectl get svc -n argo-rollouts
# API 서비스 상태
kubectl get pods -n loventure-app
kubectl get svc -n loventure-app
kubectl get ingress -n loventure-appkubectl rollout restart deployment/ingress-nginx-controller -n ingress-nginx# Ingress 리소스 수정 후 적용
kubectl apply -f your-ingress.yaml
# 또는 Helm으로 업데이트
helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx# 실시간 로그 확인
kubectl logs -f -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
# 특정 시간대 로그
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --since=1h# Ingress Controller가 실행 중인지 확인
kubectl get pods -n ingress-nginx
# Ingress 리소스가 올바르게 설정되었는지 확인
kubectl get ingress -A
kubectl describe ingress <ingress-name> -n <namespace># TLS 시크릿 확인
kubectl get secrets -n argocd | grep tls
# 인증서 상세 정보 확인
kubectl describe secret argocd-server-tls -n argocd# 백엔드 서비스가 실행 중인지 확인
kubectl get pods -n <namespace>
kubectl get svc -n <namespace>
# 서비스 엔드포인트 확인
kubectl get endpoints -n <namespace># 현재 IP 확인
kubectl get svc -n ingress-nginx ingress-nginx-controller
# IP가 변경된 경우 DNS 업데이트 필요
# 또는 새로운 IP로 접속apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: your-service-ingress
namespace: your-namespace
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
rules:
- host: your-service.loventure.us
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80
tls:
- hosts:
- your-service.loventure.us
secretName: your-service-tlskubectl apply -f your-ingress.yamlkubectl get ingress -A
curl -H "Host: your-service.loventure.us" -k https://34.64.212.163- 마스터 접근: 모든 IP 허용 (
0.0.0.0/0) - SSL 인증서: 자체 서명된 인증서 사용
- 방화벽: HTTP(80), HTTPS(443) 포트만 개방
- 마스터 접근 제한: 특정 IP만 허용
- SSL 인증서: Let's Encrypt 또는 상용 인증서 사용
- 도메인 설정: 실제 도메인과 DNS 레코드 설정
- 모니터링: 접근 로그 및 보안 이벤트 모니터링