일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kubernetes-ai
- k8sgpt
- 글램핑
- 도봉산글램핑
- k8s
- 입문나이프
- 쿠버네티스기초
- AI
- virt-manager
- macos 터널링
- 피카푸캠핑도봉산
- api-key
- 피카푸클램핑도봉산
- GPU
- kub-ai
- 입문용칼
- 캠핑
- 쿠버네티스
- 오블완
- 티스토리챌린지
- 파드
- 쿠버네티스보안
- 피카푸글램핑
- karpor
- kube-ai
- POD
- IT
- KVM
- mac터널링
- kubernetes
- Today
- Total
마구잡
Kubernetes Cilium Cluster Mesh + Hubble UI 실습 본문
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
- install 명령어를 제외한 set 명령어
cilium config set cluster-name kubernetes --context kubernetes-admin@kubernetes
cilium config set cluster-id 1 --context kubernetes-ubuntu@kubernetes
cilium config set cluster-name minimal --context kubernetes-admin@kubernetes
cilium config 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' 카테고리의 다른 글
Kubernetes Nvidia Gpu Component의 상관관계 (1) | 2024.10.24 |
---|---|
하버 프라이빗 레포 이미지 가져오기 - Harbor Private Repository Image Pull (0) | 2024.10.22 |
Nvidia gpu-operator를 통한 다중 GPU MIG 설정 (2) | 2024.06.03 |
Kubernetes + gitlab + gitlab-ci + harbor + argocd 총 집합 ( 3 ) (2) | 2024.05.21 |
Kubernetes + gitlab + gitlab-ci + harbor + argocd 총 집합 ( 2 ) (1) | 2024.05.15 |