Networking - weave cni

2025. 1. 15. 01:03쿠버네티스/쿠버네티스

728x90
반응형

Weave CNI 플러그인의 작동 방식

Weave CNI는 Kubernetes 클러스터 내에서 메시 오버레이 네트워크를 생성하여 모든 노드와 파드를 연결합니다. 각 노드에는 Weave 에이전트가 배포되며, 이 에이전트들은 서로 통신하여 클러스터의 네트워크 토폴로지를 유지하고 업데이트합니다. 이를 통해 다음과 같은 과정을 수행합니다:

  1. 패킷 캡슐화 및 전송:
    • 한 파드에서 다른 노드의 파드로 패킷이 전송될 때, Weave 에이전트는 해당 패킷을 가로채고 캡슐화(encapsulation)합니다.
    • 캡슐화된 패킷은 네트워크를 통해 대상 노드로 전송됩니다.
    • 대상 노드의 Weave 에이전트는 패킷을 디캡슐화(decapsulation)하여 올바른 파드로 전달합니다
  2. IP 주소 관리:
    • Weave는 10.32.0.0/12 범위의 IP 주소를 사용하여 각 노드와 파드에 고유한 IP를 할당합니다.
    • 중복 IP 할당을 방지하기 위해 각 노드가 IP 범위를 동적으로 나누어 관리합니다
  3. 라우팅 최적화:
    • Weave는 자동으로 네트워크 경로를 설정하여 효율적인 데이터 전송을 보장하며, 패킷 손실을 최소화합니다.
    • VXLAN 프로토콜을 사용하여 네트워크 트래픽을 캡슐화하고 라우팅합니다

Weave CNI의 주요 특징

  • 확장성 및 안정성:
    • 대규모 클러스터에서도 안정적으로 작동하며, 자동 복구(self-healing) 기능을 제공합니다
  • 네트워크 정책 지원:
    • Weave는 Kubernetes의 네트워크 정책(NetworkPolicy)을 지원하며, 이를 통해 특정 파드 간 통신을 허용하거나 차단할 수 있습니다
  • 암호화 지원:
    • 네트워크 트래픽 암호화를 제공하여 보안을 강화할 수 있습니다(옵션 설정 필요)
  • 다중 브리지 연결:
    • 하나의 파드는 Weave 브리지와 Docker 브리지 등 여러 네트워크에 동시에 연결될 수 있습니다

Weave CNI 설치 방법

Weave CNI 플러그인을 설치하려면 Kubernetes 클러스터가 사전에 준비되어 있어야 합니다. 설치 과정은 다음과 같습니다:

# 설치 명령 실행
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

# 설치 확인
kubectl get pods -n kube-system -l name=weave-net -o wide

# 네트워크 상태 점검
kubectl exec -n kube-system weave-net-<pod-name> -- /home/weave/weave status

Weave CNI는 Kubernetes 클러스터에서 안정적이고 확장 가능한 네트워킹 솔루션을 제공하며, 특히 대규모 환경에서 효과적으로 작동합니다. 이를 통해 복잡한 라우팅 테이블 설정 없이도 효율적인 컨테이너 간 통신을 구현할 수 있습니다.

장점 한계
간단한 설치 및 구성 높은 메모리 사용량 가능성
자동 IP 할당 및 경로 최적화 암호화 활성화 시 성능 저하
대규모 클러스터에서 확장성 우수 일부 고급 기능 설정 필요

https://haejun-kim.tistory.com/27

 

[CKA] Network

Linux Network Basics 쿠버네티스의 Network를 살펴보기 전에 이해하는데 도움이 되는 전제 조건들을 미리 학습한 후, 쿠버네티스의 network를 살펴보도록 한다. 구체적으로는 Switching and Routing, DNS, Netwrok N

haejun-kim.tistory.com

https://muni-dev.tistory.com/entry/Udemy-CKA-%EA%B0%95%EC%9D%98-%EC%A0%95%EB%A6%AC-211-CNI-weave

 

Udemy CKA 강의 정리 211: CNI weave

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다. ⚠️ 영어 독

muni-dev.tistory.com

https://seungjuitmemo.tistory.com/232#google_vignette

https://cwal.tistory.com/9

https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy/

https://overcast.blog/choosing-the-right-container-network-interface-plugin-in-kubernetes-45391c7d4cc8

https://ranchermanager.docs.rancher.com/faq/container-network-interface-providers

https://www.kloia.com/blog/why-do-we-use-cni-plugins-on-kubernetes

https://blog.pscr.me/102?category=1169431


Inspect the kubelet service and identify the container runtime endpoint value is set for Kubernetes.

ps -aux | grep -i kubelet | grep container-runtime
root        4191  0.0  0.1 2931492 88284 ?       Ssl  15:40   0:05 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --pod-infra-container-image=registry.k8s.io/pause:3.10

 

What is the path configured with all binaries of CNI supported plugins?

  • /opt/cni/bin

What is the CNI plugin configured to be used on this kubernetes cluster?

  • ls /etc/cni/net.d/
    • 10-flannel.conflist

What binary executable file will be run by kubelet after a container and its associated namespace are created?

  • cat 10-flannel.conflist
controlplane ~ ➜  cat /etc/cni/net.d/10-flannel.conflist 
{
  "name": "cbr0",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

 

Deploy weave-net networking solution to the cluster.
NOTE: - We already have provided a weave manifest file under the /root/weave directory.

    • configmap의 kube-proxy에서 cidr확인
k describe cm kube-proxy -n kube-system
Name:         kube-proxy
Namespace:    kube-system
Labels:       app=kube-proxy
Annotations:  kubeadm.kubernetes.io/component-config.hash: sha256:906b8697200819e8263843f43965bb3614545800b82206dcee8ef93a08bc4f4b

Data
====
config.conf:
----
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
bindAddressHardFail: false
clientConnection:
  acceptContentTypes: ""
  burst: 0
  contentType: ""
  kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
  qps: 0
clusterCIDR: 10.244.0.0/16
configSyncPeriod: 0s
conntrack:
  maxPerCore: null
  • containers.env에서 name, value값 설정

 

반응형