마구잡

Kubernetes Cilium Cluster Mesh + Hubble UI 실습 본문

Kubernetes

Kubernetes Cilium Cluster Mesh + Hubble UI 실습

MAGUJOB 2024. 10. 8. 16:53
반응형

Cilium은 무엇인가?

Kubernetes 클러스터에서 사용할 수 있는 Container Network Interface 중 하나이며

EBF을 기반으로한 다양한 기능 (Networking, Security, Observability, Tracing)가진 CNCF 프로젝트.

공식 사이트

 

Cilium - Cloud Native, eBPF-based Networking, Observability, and Security

Cloud Native, eBPF-based Networking, Observability, and Security

cilium.io


 

Cilium 특징은?

기본적으로 다른 CNI의 비해 내포된 확장기능이 다수 존재한다 Hubble, ClusterMesh, BGP 등이 존재하고 cilium 패키지를 이용하여 비교적 손쉽게 상태확인 및 핸들링을 가능하게 해준다.

 

또 EBF가 아주 중요한 요소일텐데 사실 설치와 운영자 입장에선 현재까진 가시적으로 와닫는 무언가는 없다.

Calico 또한 최신 버전에선 EBF를 사용할 수 있게 되었다.
개인적인 경험은 calicoctl 보다 편안한 커맨드 경험을 제공해줬다.

 

 


 

 

Cilium 가지고 놀기

cilium 설치는 기본적으로 공식 사이트에 친절하게 Quick Start가 잘 나와있으며 또한 기존 Calico 사용자들을 위한 마이그레이션 절차까지 잘 제공되어있다. ( 광고는 클릭은 큰 힘이 됩니다! )

반응형
Cilium 설치 자체는 마이그레이션이 아닌 이상 워낙 간단해서 쉽게 따라 할 수 있다.
마이그레이션 절차는 다음 글에서 작성하도록 하겠다.

 

  • Cilium은 다양한 방식으로 설치가 가능하며 이 글에서는 cilium 커맨드를 사용하여 진행한다.
    Cilium CLI install
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
  • Cilium Version Check
$ cilium version --client

 

  • Cilium Install
기본적으로 Cilium은 Helm을 통해 설치된다. 폐쇠망 환경시 이미지 및 차트까지 모두 폐쇠망 내부에 레포를 구성해야 설치가 가능하다.
현 글에서는 기본적 Quick Start와는 다르게 Cluster Mesh를 사용할 걸 염두하여 진행한다.
Cluster Mesh를 사용하기 위해선 다른 클러스터의 kubeconfig를 미리 추가하여 멀티  클러스터 구성이 되어 있어야 한다.

 

  • 클러스터 context 확인
$ kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO             NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin     kube-system
          kubernetes-admin@minimal-c    minimal-c    kubernetes-admin-c
Cluster Mesh를 사용하지 않을 유저들은 cilium install 단일 명령어만 사용하면 설치가 가능하다.
  • Cilium Install
$ cilium install --set cluster.id=1 --context kubernetes-admin@kubernetes
$ cilium install --set cluster.id=2 --context kubernetes-admin@minimal-c
  • Cilium status
$ cilium status --context kubernetes-admin@kubernetes

    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    OK
 \__/¯¯\__/    Hubble Relay:       disabled
    \__/       ClusterMesh:        OK

Deployment             hubble-ui                Desired: 1, Ready: 1/1, Available: 1/1
Deployment             hubble-relay             Desired: 1, Ready: 1/1, Available: 1/1
... 기타등등

$ cilium status --context kubernetes-admin@minimal-c
    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    OK
 \__/¯¯\__/    Hubble Relay:       disabled
    \__/       ClusterMesh:        OK

DaemonSet              cilium                   Desired: 2, Ready: 2/2, Available: 2/2
Deployment             cilium-operator          Desired: 1, Ready: 1/1, Available: 1/1
... 기타등등
위 과정에서 모두 OK가 나왔다면 정상적으로 설치 완료
여러번의 설치 과정에서 문제가 되는 경우는 없었다.

 

  • Cilium Hubble enable
Hubble Relay 및 대시보드 enable
$ cilium hubble enable --ui  --context kubernetes-admin@kubernetes
$ cilium hubble enable --ui  --context kubernetes-admin@minimal-c

 

  • Cilium Hubble UI 접속
대시보드는 기본 Service Type이 Cluster-IP이다. 
사용하기 편하게 NodePort or LoadBalancer로 변경한다.
위 두 옵션을 상요하지 않을시 $ cilium hubble port-forward 커맨드를 통해 임시적으로 사용 가능하다
$ kubectl edit svc -n kube-system hubble-ui

apiVersion: v1
kind: Service
metadata:
... 생략
  type: LoadBalancer <- NodePort, LoadBalancer로 변경

 

대시보드

아무 서비스가 존재하지 않으면 Not Found 화면이 송출 될 수 있다.
  • Cilium Cluster Mesh enable
$ cilium clustermesh enable --context kubernetes-admin@kubernetes --service-type=NodePort
$ cilium clustermesh enable --context kubernetes-admin@minimal-c --service-type=NodePort

 

중요 

현재 국내 블로그들 중 Cilium Cluster Mesh 예제를 기재한 블로그들은 대부분 ca에 대한 부분이 없다. ... 대체 어떻게 한거지? 

필자도 초반엔 국내 블로그를 참조하였는데 1번 클러스터에서 지속적으로 cilium-api POD에서 CrashLoopBackOf 상태가 발생하였다.

 

혹여 진행하다 필자와 같은 Bad TLS 에러가 나오게 되면 아래 공식 문서에서 발췌한 부분을 따라 해보자.

  • Copy cilium-ca
$ kubectl --context=kubernetes-admin@kubernetes get secret -n kube-system cilium-ca -o yaml | \
kubectl --context=kubernetes-admin@minimal-c  create -f -

 

이때 아마 대부분은 인증서가 이미 있다는 에러를 뱉을 것이다.

그럼 그냥 2번 클러스터에서 cilium-ca secret을 지우면 된다. ^^

  • Cilium Cluster Mesh Connect
Cluster Connect 시작
$ cilium clustermesh connect --context kubernetes-admin@kubernetes  --destination--context kubernetes-admin@minimal-c

 

위 과정까지 끝나게 되면 1-클러스터 to 2-클러스터 통신 및 curl 절차를 통해 확인이 가능하다.

 

2번 클러스터의 POD IP 확인

$ kubectl  get po -A -owide

NAMESPACE       NAME                                    READY   STATUS    RESTARTS        AGE     IP               NODE        NOMINATED NODE   READINESS GATES
cilium-test-1   echo-other-node-8484fd78f8-djj8p        2/2     Running   0               3h6m    10.0.0.204       minimal-w   <none>           <none>


1번 클러스터에서 ping

$ ping 10.0.0.204

PING 10.0.0.204 (10.0.0.204) 56(84) bytes of data.
64 bytes from 10.0.0.204: icmp_seq=1 ttl=63 time=0.493 ms
64 bytes from 10.0.0.204: icmp_seq=2 ttl=63 time=0.259 ms
64 bytes from 10.0.0.204: icmp_seq=3 ttl=63 time=0.346 ms
64 bytes from 10.0.0.204: icmp_seq=4 ttl=63 time=0.353 ms

 

반응형