쿠버네티스 고급 네트워킹 설정
- CNI 플러그인과 네트워크 정책 설정
- 키워드: 쿠버네티스 네트워킹, Kubernetes CNI 플러그인
서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 플랫폼으로, 네트워킹은 그 중심에 있습니다. 쿠버네티스 네트워킹은 다양한 네트워크 플러그인과 정책을 통해 복잡한 네트워크 환경을 효율적으로 관리할 수 있도록 지원합니다. 이번 포스팅에서는 쿠버네티스의 고급 네트워킹 설정 방법, 특히 CNI(Container Network Interface) 플러그인과 네트워크 정책(Network Policy)에 대해 초보자도 이해할 수 있도록 자세히 설명합니다.
본론
CNI 플러그인이란?
CNI 개념
CNI(Container Network Interface)는 컨테이너 네트워킹을 표준화하기 위한 프로젝트입니다. CNI는 쿠버네티스 클러스터에서 네트워크 플러그인을 쉽게 설치하고 구성할 수 있도록 도와줍니다. CNI 플러그인은 컨테이너 네트워크를 설정하고 관리하는 데 필요한 기능을 제공하며, 다양한 네트워크 요구사항에 맞게 선택할 수 있습니다.
주요 CNI 플러그인
- Calico
Calico는 네트워크 정책과 네트워크 보안을 제공하는 고성능 네트워크 플러그인입니다. BGP(Border Gateway Protocol)를 사용하여 네트워크 트래픽을 라우팅하며, 네트워크 정책을 통해 세밀한 트래픽 제어가 가능합니다.
- Flannel
Flannel은 간단하고 사용하기 쉬운 네트워크 플러그인으로, VXLAN(Virtual Extensible LAN)을 사용하여 네트워크 오버레이를 구성합니다. 주로 간단한 네트워크 요구사항을 충족하는 데 사용됩니다.
- Weave
Weave는 네트워크 오버레이와 네트워크 정책을 제공하는 플러그인입니다. 네트워크 트래픽을 암호화할 수 있으며, 사용하기 쉬운 네트워크 정책 언어를 제공합니다.
- Cilium
Cilium은 BPF/eBPF(Extended Berkeley Packet Filter)를 사용하여 네트워크 정책을 구현하는 고성능 네트워크 플러그인입니다. 네트워크 보안과 가시성을 제공하며, 복잡한 네트워크 요구사항을 충족합니다.
CNI 플러그인 설치 및 구성
Calico 설치
Calico를 설치하려면 다음 명령어를 사용합니다.
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
이 명령어는 Calico를 쿠버네티스 클러스터에 설치하고 구성합니다.
Flannel 설치
Flannel을 설치하려면 다음 명령어를 사용합니다.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
이 명령어는 Flannel을 쿠버네티스 클러스터에 설치하고 구성합니다.
Weave 설치
Weave를 설치하려면 다음 명령어를 사용합니다.
kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')
이 명령어는 Weave를 쿠버네티스 클러스터에 설치하고 구성합니다.
Cilium 설치
Cilium을 설치하려면 다음 명령어를 사용합니다.
kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/v1.10/install/kubernetes/quick-install.yaml
이 명령어는 Cilium을 쿠버네티스 클러스터에 설치하고 구성합니다.
네트워크 정책 설정
네트워크 정책(Network Policy)은 쿠버네티스 클러스터에서 네트워크 트래픽을 제어하는 방법을 정의합니다. 이를 통해 특정 파드나 네임스페이스 간의 네트워크 트래픽을 허용하거나 차단할 수 있습니다.
네트워크 정책 개념
네트워크 정책은 네임스페이스 내의 파드 선택자(Pod Selector)와 일치하는 파드에 대한 인그레스(Ingress) 및 이그레스(Egress) 규칙을 정의합니다. 이를 통해 파드 간의 네트워크 트래픽을 세밀하게 제어할 수 있습니다.
네트워크 정책 예제
다음은 네트워크 정책을 정의하는 예제입니다.
- 기본 정책
다음 정책은 my-namespace
네임스페이스의 모든 인그레스 트래픽을 차단합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: my-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
ingress: []
- 허용 정책
다음 정책은 app: frontend
레이블이 있는 파드가 app: backend
레이블이 있는 파드에 인그레스 트래픽을 허용합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
namespace: my-namespace
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
- 네임스페이스 간 트래픽 제어
다음 정책은 my-namespace
네임스페이스의 모든 파드가 kube-system
네임스페이스의 DNS 서비스를 인그레스 트래픽으로 허용합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: my-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: kube-system
ports:
- protocol: UDP
port: 53
네트워크 정책 검증 및 모니터링
네트워크 정책을 설정한 후에는 이를 검증하고 모니터링하는 것이 중요합니다.
정책 검증
- 테스트 파드 배포
테스트 파드를 배포하여 네트워크 정책이 올바르게 적용되었는지 확인합니다.
kubectl run test-pod --image=busybox --restart=Never -- sleep 3600
- 네트워크 트래픽 테스트
테스트 파드에서 다른 파드로의 네트워크 트래픽을 테스트합니다.
kubectl exec test-pod -- wget --spider http://<target-pod-ip>
정책 모니터링
- 로그 확인
네트워크 정책 위반 로그를 확인하여 정책이 올바르게 적용되고 있는지 모니터링합니다.
kubectl logs <network-policy-enforcement-pod>
- 모니터링 도구 사용
Prometheus, Grafana 등의 모니터링 도구를 사용하여 네트워크 트래픽과 정책 위반을 모니터링합니다.
고급 네트워킹 설정 사례
멀티테넌트 환경 설정
멀티테넌트 환경에서는 네트워크 정책을 사용하여 각 테넌트 간의 트래픽을 격리하고 보호합니다. 이를 통해 보안을 강화하고 자원을 효율적으로 관리할 수 있습니다.
- 네임스페이스 간 격리
각 네임스페이스 간의 트래픽을 차단하여 테넌트 간의 트래픽이 격리되도록 설정합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-namespace-traffic
namespace: tenant1
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress: []
egress: []
- 내부 서비스 보호
내부 서비스는 특정 파드나 네임스페이스에서만 접근할 수 있도록 네트워크 정책을 설정합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-internal-service
namespace: tenant1
spec:
podSelector:
matchLabels:
app: internal-service
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: tenant1
- podSelector:
matchLabels:
app: frontend
네트워크 정책 베스트 프랙티스
- 기본 차단 정책 설정: 기본적으로 모든 트래픽을 차단하고 필요한 트래픽만 허용하는 정책을 설정합니다.
- 정기적인 검토와 업데이트: 네트워크 정책을 정기적으로 검토하고 업데이트하여 보안을 유지합니다.
- 모니터링과 로깅: 네트워크 트래픽을 모니터링하고 로그를 분석하여 정책 위반을 감지합니다.
- 테스트 환경에서 검증: 프로덕션에 배포하기 전에 테스트 환경에서 네트워크 정책을 충분히 검증합니다.
- 정책 문서화: 네트워크 정책을 문서화하여 팀 내에서 공유하고 이해를 돕습니다.
결론
쿠버네티스의 고급 네트워킹 설정은 클러스터의 보안과 효율성을 크게 향상시킬 수 있습니다. 이번 포스팅에서는 CNI 플러그인의 개념과 설치 방법, 그리고 네트워크 정책 설정과 모니터링 방법을 자세히 설명했습니다. 이를 통해 쿠버네티스 클러스터에서 네트워크를 효율적으로 관리하고 보호할 수 있기를 바랍니다.