일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 소팅
- kubernetes
- Hubble
- 도커
- cilium
- hubble-ui
- 파드
- Harbor
- 오픈스택
- GPU
- k8s
- PV
- ubuntu20.04
- POD
- 쿠버네티스#kubelet
- pvc
- 쿠버네티스
- containerd
- CNI
- 1.30
- 쿠버네티스 #kubernetes #k8s
- 스토리지클래스
- clustermesh
- 쿠버네티수
- 컨테이너
- 네트워크
- Today
- Total
마구잡
Kubernetes Cilium Cluster Mesh + Hubble UI 실습 본문
Cilium은 무엇인가?
Kubernetes 클러스터에서 사용할 수 있는 Container Network Interface 중 하나이며
EBF을 기반으로한 다양한 기능 (Networking, Security, Observability, Tracing)가진 CNCF 프로젝트.
공식 사이트
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
'Kubernetes' 카테고리의 다른 글
Nvidia gpu-operator를 통한 다중 GPU MIG 설정 (1) | 2024.06.03 |
---|---|
Kubernetes + gitlab + gitlab-ci + harbor + argocd 총 집합 ( 3 ) (0) | 2024.05.21 |
Kubernetes + gitlab + gitlab-ci + harbor + argocd 총 집합 ( 2 ) (1) | 2024.05.15 |
Kubernetes NFS-CSI 배포하기 (0) | 2024.05.07 |
Kubernetes + gitlab + gitlab-ci + harbor + argocd 총 집합 ( 1 ) (0) | 2024.05.02 |