Cloud/k8s-CKA

[CKA] 28. Pod의 Networking 과 Weave CNI

jinkwon.kim 2023. 7. 20. 05:41
728x90
반응형

개요

k8s에서 Pod 간에 networking이 어떻게 구성이 되는지 알아보겠습니다. 

Pod의 Networking 구성의 핵심

Pod 간의 Networking의 구성은 [CKA] 24. k8s network를 위한 기초에서 배웠던 기술에  Overlay Network 기술을 합치면 완성이 됩니다. 

 

[CKA] 24. k8s network를 위한 기초에서는 단일 node안에서 container가 아래의 3개의 기술을 사용하여 통신 가능하다는 것을 배웠습니다. 

 

ip link

container를 bride에 연결하기 위해서 사용

bridge

container을 연결하는 용도

ip route

내부 container 간의 통신 의해서 사용 

iptables의 masquerade

외부 통신을 위햇 사용

 

 Overlay Network 기술은 는 개별 node에 구성된 network를 하나로 합치는 것입니다. overlay network가 어떻게 동작하는지 차후에 좀 더 상세히 알아보겠습니다.

 

결론 적은 두 개의 개술이 합쳐져서 아래와 같은 그림을 완성하게 됩니다.

Pod의 Networking 구성은  누가 해주는가?

Pod의 Networking 구성은 CNI Plugin이 담당을 합니다.

CNI Plugin은   [CKA] 24. k8s network를 위한 기초에서 배웠던 것을 기반으로 container가 생성되면 ADD 명령에 해당하는 script를 실행하고 container가 삭제되면 DEL 명령에 해당하는 script를 내부 적으로 실행합니다.

 

그럼 지금부터 CNI 중 하나인 Weave CNI의 구성 원리와 설치를 알아보겠습니다.

Weave CNI 구성도

참조 : https://www.weave.works/docs/net/latest/concepts/fastdp-how-it-works/

 

Weave Net은 host 간에 overlay network를 구현합니다. fast datapath가 활성화되지 않은 경우 각 packet은 tunnel protocol header에 encapsulated 되어 host까지 전달되고 host에서 tunnel protocol header를 제거 후 대상 container로 전송됩니다. Weave 라우터는 사용자 공간 프로세스입니다. 즉, 패킷이 Linux 커널 안팎으로 이동하면서 통신을 합니다. 

 

CNI를 개발할 것이 아니라면 간단하게 "container가 도시"이고 "host가 나라"인데 중간에 "weave라는 국제 택배회사"가 container가 보내는 packet이라는 물건을 다른 container에데 전달해 주는구나 하고 이해하시면 됩니다.

Weave의 핵심

container의 packet을 Tunneling기술을 이용하여 다른 host의 container와 통신하게 해주는 것입니다.

 

그럼 이제 CNI를 설치하기 전 이미 설치되어 있는 CNI가 있으면 제거 후에 설치를 진행해 보도록 하겠습니다.

설치된 CNI 확인

이미 설치된 CNI가 존재하는지 확인해 보겠습니다. 

/etc/cni/net.d/ 에서 파일이 존재하면 cni가 이미 설치되어 있는 것입니다. 

설치된 CNI 삭제

만약 여러분이 weave를 설치하고 싶은데 calico가 이미 설치되어 있다면 weave를 설치하기 위해서 calico를 지워야 할 상황이 발생합니다.  이때는 다음 절차에 따라 삭제하시면 됩니다. 

 

1. calico 설치 yaml로 calico 삭제 

2. /etc/cni/net.d/ 하위 파일 삭제

  - workernode에도 동일하게 진행 

3. /opt/cni/bin/ 에서 calico와 연관된 binary 삭제 

  - workernode에도 동일하게 진행 

  - 만약 실수로 /opt/cni/bin 하위의 파일을 모두 지웠다면 cni 기본 plugin 을 아래 주소에서 받아서 압축만 풀으시면 됩니다. 

 https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-amd64-v0.9.1.tgz

 

base url : https://github.com/containernetworking/plugins/releases

 

Releases · containernetworking/plugins

Some reference and example networking plugins, maintained by the CNI team. - containernetworking/plugins

github.com

4. weave 설치

Weave CNI 설치

https://www.weave.works/docs/net/latest/kubernetes/kube-addon/#-installation

 

Integrating Kubernetes via the Addon

The following topics are discussed: Installation Before installing Weave Net, you should make sure the following ports are not blocked by your firewall: TCP 6783 and UDP 6783/6784. For more details, see the FAQ. Weave Net can be installed onto your CNI-ena

www.weave.works

여기에 가시면 최신 Weave를 daemon-set으로 deploy 할 수 있게 해주는 yaml의 url을 알려줍니다. 

$ kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

해당 명령을 controleplane에서 실행하시게 되면 Weave CNI가 자동으로 설치가 됩니다. 

맨 아래에 weave-net이라고 생성된 것을 보실 수 있으실 겁니다.

Weave CNI 설정 확인

아래 파일을 통해서 CNI 설정 확인 가능 합니다. 

/etc/cni/net.d/10-weave.conflist

{
    "cniVersion": "0.3.0",
    "name": "weave",
    "plugins": [
        {
            "name": "weave",
            "type": "weave-net",
            "hairpinMode": true
        },
        {
            "type": "portmap",
            "capabilities": {"portMappings": true},
            "snat": true
        }
    ]
}

그리고 위에 보시면 plugins [0]. name 이 표시된 weave는 kubelet이 container를 생성 후 실행하는 binary 파일 명입니다.

정리 

k8s에서 pod 간 networking을 하려면 CNI가 필요합니다. 

CNI는 overlay network 기술은 근간으로 통신을 합니다. overlay network는 간단하게 container packet을 Tunneling 기술을 이용하여 다른 host의 container와 통신하게 해주는 기술입니다.

Next Post

[CKA] 29. service - default

728x90
반응형

'Cloud > k8s-CKA' 카테고리의 다른 글

[CKA] - network 문제 해결 tip  (0) 2023.07.25
[CKA] 29. service - default  (0) 2023.07.23
[CKA] - 시험 틀린 문제  (0) 2023.07.19
[CKA] 27. CNI란?  (0) 2023.07.16
[CKA] 26. Domain과 DNS Sever기초  (0) 2023.07.15