쿠버네티스에서 멀티 클러스터 환경을 운영할 때, 클러스터 간 트래픽을 안전하게 관리하고 보안성을 유지하는 것이 중요합니다.
이 글에서는 멀티 클러스터 환경에서 서비스 간 트래픽을 효과적으로 관리하고, 보안 정책을 적용하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. 멀티 클러스터 간 서비스 통신을 위한 Istio Multi-Cluster 설정
2. 네트워크 정책(NetworkPolicy)을 활용한 클러스터 간 보안 강화
3. kubectl 및 네트워크 모니터링 도구를 활용한 트러블슈팅 및 성능 최적화
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ 멀티 클러스터 간 서비스 통신을 위한 Istio Multi-Cluster 설정
❓ 문제 상황
운영팀에서 두 개의 쿠버네티스 클러스터(A, B)를 운영하고 있으며, A 클러스터에서 실행 중인 프론트엔드 애플리케이션이 B 클러스터에서 실행되는 백엔드 서비스에 접근해야 합니다.
이를 위해 Istio Multi-Cluster 환경을 구성하여 서비스 간 통신을 가능하게 해야 합니다.
• 클러스터 A: aks-cluster-a (프론트엔드)
• 클러스터 B: aks-cluster-b (백엔드)
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Istio를 두 개의 클러스터에 설치하고, 클러스터 간 메쉬 네트워크를 설정합니다.
2. Istio Gateway 및 VirtualService를 설정하여 프론트엔드에서 백엔드로의 통신을 허용합니다.
✅ 정답 Manifest (Istio Multi-Cluster 설정)
🔹 클러스터 A (aks-cluster-a) Istio Gateway 설정
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: backend-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: backend-tls
hosts:
- backend.example.com
🔹 클러스터 B (aks-cluster-b) VirtualService 설정
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
hosts:
- backend.example.com
gateways:
- backend-gateway
http:
- route:
- destination:
host: backend-service.default.svc.cluster.local
port:
number: 80
✅ 이제 backend.example.com을 통해 클러스터 A에서 클러스터 B로의 트래픽이 라우팅됨
📌 적용 후 예상 결과 값
1. 클러스터 A에서 backend.example.com에 요청 전송
curl -k https://backend.example.com
💡 예상 출력 값
{"message": "Welcome to Backend Service"}
✅ 멀티 클러스터 간 트래픽이 정상적으로 라우팅됨
2️⃣ 네트워크 정책(NetworkPolicy)을 활용한 클러스터 간 보안 강화
❓ 문제 상황
운영팀에서 클러스터 A의 특정 네임스페이스에서 실행되는 애플리케이션만 클러스터 B의 백엔드 서비스에 접근할 수 있도록 제한해야 합니다.
이를 위해 네트워크 정책(NetworkPolicy)을 활용하여 특정 네임스페이스의 트래픽만 허용해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. NetworkPolicy를 설정하여 특정 네임스페이스에서만 외부 요청을 허용합니다.
2. kubectl 명령어를 사용하여 정책이 정상적으로 적용되었는지 확인합니다.
✅ 정답 Manifest (NetworkPolicy 설정)
🔹 클러스터 B (aks-cluster-b) 네트워크 정책 설정
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-access
namespace: default
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend
ports:
- protocol: TCP
port: 80
✅ 이제 frontend 네임스페이스에서만 backend 서비스에 접근 가능
📌 적용 후 예상 결과 값
1. 네임스페이스별 네트워크 정책 확인
kubectl get networkpolicy -n default
💡 예상 출력 값
NAME POD-SELECTOR AGE
allow-frontend-access app=backend 5m
✅ 특정 네임스페이스에서만 접근이 허용되었는지 확인 가능
3️⃣ kubectl 및 네트워크 모니터링 도구를 활용한 트러블슈팅 및 성능 최적화
❓ 문제 상황
운영팀에서 멀티 클러스터 환경에서 트래픽이 예상대로 흐르고 있는지 확인하고, 네트워크 성능을 모니터링해야 합니다.
kubectl 및 Prometheus/Grafana를 활용하여 네트워크 상태를 분석하고 최적화해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl logs 및 istioctl 명령어를 사용하여 네트워크 트래픽 상태를 확인합니다.
2. Prometheus 및 Grafana를 활용하여 네트워크 트래픽 및 성능을 모니터링합니다.
✅ 네트워크 트러블슈팅 및 모니터링 명령어
🔹 Istio 트래픽 로그 확인
kubectl logs -l istio=ingressgateway -n istio-system
💡 예상 출력 값
[2024-03-01T10:15:12.345Z] "GET /api" 200 - "-" "-" "-" "-" 0 123 456 "-"
🔹 특정 서비스의 네트워크 상태 확인
istioctl proxy-status
💡 예상 출력 값
NAME CDS LDS EDS RDS PILOT
backend-service.default SYNC SYNC SYNC SYNC SYNC
🔹 Prometheus에서 특정 서비스의 트래픽 모니터링
sum(rate(istio_requests_total{destination_service="backend-service.default.svc.cluster.local"}[5m]))
💡 예상 출력 값
450 requests per second
✅ 멀티 클러스터 환경에서 네트워크 트래픽을 분석하고 성능을 최적화 가능