[k8s] Cloudflare Mesh로 클러스터 구성하기 (with k3s)
https://blog.naver.com/sssang97/224405358848
Mesh를 사용해서 가상 사설망으로 쿠버 클러스터를 구성하는 방법을 간단히 정리한다.
그림으로 그리면 이런 방식이 된다.
쿠버네티스는 노드간 통신을 통해서 이런저런 자잘한 제어나 모니터링, 분산 처리들을 가능케 하는데, Mesh를 사용하면 항상 Cloudflare 네트워크를 타는 구조가 된다.
적당한 규모에 적당한 사용사례로는 쓸만한데, 결국 레이턴시가 증가하는 것이므로 노드간 통신 지연이 중요한 경우라면 좋은 선택이 아닐 수 있다.
그냥 서버나 Job 몇개 stateless하게 띄우는 간단한 경우면 괜찮은데, 분산 스토리지를 직접 운영한다거나 하는 빡센 사용사례에는 썩 좋지 않다. 그럴때는 그냥 순순히 내부망 구성해서 다는게 좋다.
구성법
노드(피어)를 적당히 만들고

마스터노드의 경우에는 이렇게 초기화해주면 된다.
CloudflareWARP 인터페이스를 명시적으로 지정해줘야 하고, Mesh IP를 명시적으로 넣어줘야 한다.
curl -sfL https://get.k3s.io | \
K3S_NODE_NAME=master-1 \
K3S_TOKEN=mynodetoken \
sh -s - server \
--node-ip 마스터IP \
--flannel-iface CloudflareWARP
안그러면 기본 네트워크 인터페이스를 물어서 Mesh를 못쓴다.
워커 노드를 추가할 때도 비슷하게 하면 된다.
sudo cat /var/lib/rancher/k3s/server/node-tokencurl -sfL https://get.k3s.io | K3S_NODE_NAME=노드명 K3S_URL=https://마스터피어IP:6443 K3S_TOKEN=mynodetoken sh -s - agent --node-ip 새_노드_피어_IP
IP를 지정하고 추가해주면 된다.
그래서 잘 연동이 된다면
kubectl get nodes -o custom-columns='NAME:.metadata.name,PODCIDR:.spec.podCIDR,FLANNEL_IP:.metadata.annotations.flannel.alpha\.coreos\.com/public-ip,ARGS:.metadata.annotations.k3s\.io/node-args'
각 node IP가 Mesh 피어 IP로 박히고, 인터페이스도 CloudflareWARP로 박혀야 한다.
이렇게 뜨면 잘 구성된 것이다.