Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | High Level #1] 멀티 클러스터 간 네트워크 트래픽 관리 및 보안 설정

ygtoken 2025. 3. 17. 12:03
728x90

 

쿠버네티스에서 멀티 클러스터 환경을 운영할 때, 클러스터 간 트래픽을 안전하게 관리하고 보안성을 유지하는 것이 중요합니다.

이 글에서는 멀티 클러스터 환경에서 서비스 간 트래픽을 효과적으로 관리하고, 보안 정책을 적용하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

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

멀티 클러스터 환경에서 네트워크 트래픽을 분석하고 성능을 최적화 가능

728x90