2025. 1. 15. 01:03ㆍ쿠버네티스/쿠버네티스
Weave CNI 플러그인의 작동 방식
Weave CNI는 Kubernetes 클러스터 내에서 메시 오버레이 네트워크를 생성하여 모든 노드와 파드를 연결합니다. 각 노드에는 Weave 에이전트가 배포되며, 이 에이전트들은 서로 통신하여 클러스터의 네트워크 토폴로지를 유지하고 업데이트합니다. 이를 통해 다음과 같은 과정을 수행합니다:
- 패킷 캡슐화 및 전송:
- 한 파드에서 다른 노드의 파드로 패킷이 전송될 때, Weave 에이전트는 해당 패킷을 가로채고 캡슐화(encapsulation)합니다.
- 캡슐화된 패킷은 네트워크를 통해 대상 노드로 전송됩니다.
- 대상 노드의 Weave 에이전트는 패킷을 디캡슐화(decapsulation)하여 올바른 파드로 전달합니다
- IP 주소 관리:
- Weave는 10.32.0.0/12 범위의 IP 주소를 사용하여 각 노드와 파드에 고유한 IP를 할당합니다.
- 중복 IP 할당을 방지하기 위해 각 노드가 IP 범위를 동적으로 나누어 관리합니다
- 라우팅 최적화:
- 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://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy/
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값 설정
'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
Networking - IP Address Management (0) | 2025.01.15 |
---|---|
Networking - Pod Networking (0) | 2025.01.15 |
Networking - Docker Networking - CNI - CLuster Networking (0) | 2025.01.15 |
Storage - Container Storage Interface (CSI) (0) | 2025.01.13 |
Storage - Introduction to Docker Storage (0) | 2025.01.13 |