쿠버네티스 고급 네트워킹 설정

쿠버네티스 고급 네트워킹 설정

- CNI 플러그인과 네트워크 정책 설정
- 키워드: 쿠버네티스 네트워킹, Kubernetes CNI 플러그인


서론


쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 플랫폼으로, 네트워킹은 그 중심에 있습니다. 쿠버네티스 네트워킹은 다양한 네트워크 플러그인과 정책을 통해 복잡한 네트워크 환경을 효율적으로 관리할 수 있도록 지원합니다. 이번 포스팅에서는 쿠버네티스의 고급 네트워킹 설정 방법, 특히 CNI(Container Network Interface) 플러그인과 네트워크 정책(Network Policy)에 대해 초보자도 이해할 수 있도록 자세히 설명합니다.


본론


CNI 플러그인이란?


CNI 개념


CNI(Container Network Interface)는 컨테이너 네트워킹을 표준화하기 위한 프로젝트입니다. CNI는 쿠버네티스 클러스터에서 네트워크 플러그인을 쉽게 설치하고 구성할 수 있도록 도와줍니다. CNI 플러그인은 컨테이너 네트워크를 설정하고 관리하는 데 필요한 기능을 제공하며, 다양한 네트워크 요구사항에 맞게 선택할 수 있습니다.


주요 CNI 플러그인


  1. Calico

Calico는 네트워크 정책과 네트워크 보안을 제공하는 고성능 네트워크 플러그인입니다. BGP(Border Gateway Protocol)를 사용하여 네트워크 트래픽을 라우팅하며, 네트워크 정책을 통해 세밀한 트래픽 제어가 가능합니다.


  1. Flannel

Flannel은 간단하고 사용하기 쉬운 네트워크 플러그인으로, VXLAN(Virtual Extensible LAN)을 사용하여 네트워크 오버레이를 구성합니다. 주로 간단한 네트워크 요구사항을 충족하는 데 사용됩니다.


  1. Weave

Weave는 네트워크 오버레이와 네트워크 정책을 제공하는 플러그인입니다. 네트워크 트래픽을 암호화할 수 있으며, 사용하기 쉬운 네트워크 정책 언어를 제공합니다.


  1. 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) 규칙을 정의합니다. 이를 통해 파드 간의 네트워크 트래픽을 세밀하게 제어할 수 있습니다.


네트워크 정책 예제


다음은 네트워크 정책을 정의하는 예제입니다.


  1. 기본 정책

다음 정책은 my-namespace 네임스페이스의 모든 인그레스 트래픽을 차단합니다.


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: my-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress: []

  1. 허용 정책

다음 정책은 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

  1. 네임스페이스 간 트래픽 제어

다음 정책은 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

네트워크 정책 검증 및 모니터링


네트워크 정책을 설정한 후에는 이를 검증하고 모니터링하는 것이 중요합니다.


정책 검증


  1. 테스트 파드 배포

테스트 파드를 배포하여 네트워크 정책이 올바르게 적용되었는지 확인합니다.


kubectl run test-pod --image=busybox --restart=Never -- sleep 3600

  1. 네트워크 트래픽 테스트

테스트 파드에서 다른 파드로의 네트워크 트래픽을 테스트합니다.


kubectl exec test-pod -- wget --spider http://<target-pod-ip>

정책 모니터링


  1. 로그 확인

네트워크 정책 위반 로그를 확인하여 정책이 올바르게 적용되고 있는지 모니터링합니다.


kubectl logs <network-policy-enforcement-pod>

  1. 모니터링 도구 사용

Prometheus, Grafana 등의 모니터링 도구를 사용하여 네트워크 트래픽과 정책 위반을 모니터링합니다.


고급 네트워킹 설정 사례


멀티테넌트 환경 설정


멀티테넌트 환경에서는 네트워크 정책을 사용하여 각 테넌트 간의 트래픽을 격리하고 보호합니다. 이를 통해 보안을 강화하고 자원을 효율적으로 관리할 수 있습니다.


  1. 네임스페이스 간 격리

각 네임스페이스 간의 트래픽을 차단하여 테넌트 간의 트래픽이 격리되도록 설정합니다.


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-namespace-traffic
  namespace: tenant1
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  ingress: []
  egress: []

  1. 내부 서비스 보호

내부 서비스는 특정 파드나 네임스페이스에서만 접근할 수 있도록 네트워크 정책을 설정합니다.


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

네트워크 정책 베스트 프랙티스


  1. 기본 차단 정책 설정: 기본적으로 모든 트래픽을 차단하고 필요한 트래픽만 허용하는 정책을 설정합니다.
  2. 정기적인 검토와 업데이트: 네트워크 정책을 정기적으로 검토하고 업데이트하여 보안을 유지합니다.
  3. 모니터링과 로깅: 네트워크 트래픽을 모니터링하고 로그를 분석하여 정책 위반을 감지합니다.
  4. 테스트 환경에서 검증: 프로덕션에 배포하기 전에 테스트 환경에서 네트워크 정책을 충분히 검증합니다.
  5. 정책 문서화: 네트워크 정책을 문서화하여 팀 내에서 공유하고 이해를 돕습니다.

결론


쿠버네티스의 고급 네트워킹 설정은 클러스터의 보안과 효율성을 크게 향상시킬 수 있습니다. 이번 포스팅에서는 CNI 플러그인의 개념과 설치 방법, 그리고 네트워크 정책 설정과 모니터링 방법을 자세히 설명했습니다. 이를 통해 쿠버네티스 클러스터에서 네트워크를 효율적으로 관리하고 보호할 수 있기를 바랍니다.

다음 이전