일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gitea
- argo rollout
- serving
- opentelemetry
- gitops
- nginx ingress
- Continuous Deployment
- opensearch
- CI/CD
- knative
- Litmus
- 카오스 엔지니어링
- 오퍼레이터
- operator
- Pulumi
- blue/green
- tekton
- Argo
- Kopf
- Kubeflow
- Kubernetes 인증
- Kubernetes
- mlops
- MLflow
- kubernetes operator
- argocd
- keda
- Model Serving
- CANARY
- seldon core
- Today
- Total
Kubernetes 이야기
kind + cilium + hubble 구성하기 ( without kube-proxy ) 본문
cilium
Cilium은 컨테이너 워크로드 간의 네트워크 연결을 제공, 보호 및 관찰하기 위한 오픈 소스 소프트웨어(클라우드 네이티브이며 혁신적인 커널 기술 eBPF로 구동됨)이다.
Cilium에는 강력한 보안, 가시성 및 네트워킹 제어 로직을 Linux 커널에 동적으로 삽입할 수 있는 eBPF라는 새로운 Linux 커널 기술이 있다. eBPF는 고성능 네트워킹, 다중 클러스터 및 다중 클라우드 기능, 고급 로드 밸런싱, 투명한 암호화, 광범위한 네트워크 보안 기능, 투명한 관찰 가능성 등을 제공하는 데 사용된다.
또한, cilium 의 또 다른 기능은 kube-proxy를 완전히 대체 할 수 있다는 것이다. 올바른 구성으로 Kind 클러스터를 설정하여 Cilium CNI를 사용하고 kube-proxy 비활성화된 상태로 실행할 수 있다.
Architecture
Cilium은 사용자 환경의 모든 클러스터 노드와 서버에서 실행되는 에이전트로 구성된다. 해당 노드에서 실행되는 워크로드에 네트워킹, 보안 및 관찰 가능성을 제공한다. 워크로드는 컨테이너화되거나 시스템에서 기본적으로 실행될 수 있다.
특히 cilium에는 Hubble이라는 Kubernetes용 네트워크, 서비스 및 보안 관찰을 하는 프로젝트가 있다. Hubble UI를 통해 이러한 시각화를 도와준다.
설치
이 글에서는 kind와 cilium CNI를 구성하여 Kubernetes Cluster를 만들어보겠다.
기본적인 Kind 소개는 아래의 글을 참고한다.
https://kmaster.tistory.com/26
우선 설치환경은 아래와 같다.
- OS : CentOS 7.9
- Kernel : 5.17.8
Kind 클러스터 생성 구성은 YAML 구성 파일을 사용하여 수행된다. 이 단계는 기본 CNI를 비활성화하고 이를 Cilium으로 교체하는 데 필요하다. 이 글에서는 싱글노드로 구성해 본다.
# cat <<EOF | kind create cluster --name=kind-cilium --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
networking:
disableDefaultCNI: true
kubeProxyMode: none
EOF
Kind를 배포했으면 이제 Cilium을 설치해 보자.
# helm repo add cilium https://helm.cilium.io/
# helm upgrade --install --namespace kube-system --repo https://helm.cilium.io cilium cilium --values - <<EOF
kubeProxyReplacement: strict
k8sServiceHost: kind-cilium-control-plane
k8sServicePort: 6443
hostServices:
enabled: true
protocols: TCP
externalIPs:
enabled: true
nodePort:
enabled: true
hostPort:
enabled: true
image:
pullPolicy: IfNotPresent
ipam:
mode: kubernetes
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true
EOF
cilium pod가 계속 재기동 되면 로그를 확인해 보고, selinux를 off시킨 후 다시 확인해 보자.
그래도, 계속 오류가 발생하면 kubeProxyReplacement=probe로 변경 후 로그을 조회한다.
이제 설치된 내역들을 확인해보자.
# kubectl get svc,po --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
ingress-nginx service/ingress-nginx-controller NodePort 10.96.84.179 <none> 80:32560/TCP,443:30840/TCP 105s
ingress-nginx service/ingress-nginx-controller-admission ClusterIP 10.96.33.6 <none> 443/TCP 105s
kube-system service/hubble-relay ClusterIP 10.96.98.64 <none> 80/TCP 9m9s
kube-system service/hubble-ui ClusterIP 10.96.89.188 <none> 80/TCP 9m9s
kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 10m
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx pod/ingress-nginx-admission-create-82h4x 0/1 Completed 0 105s
ingress-nginx pod/ingress-nginx-admission-patch-j5fkl 0/1 Completed 0 105s
ingress-nginx pod/ingress-nginx-controller-5977cb6769-6jznf 1/1 Running 0 105s
kube-system pod/cilium-ghftx 1/1 Running 0 3m17s
kube-system pod/cilium-operator-596dcd987c-8bj27 1/1 Running 0 3m17s
kube-system pod/coredns-6d4b75cb6d-2j95j 1/1 Running 0 10m
kube-system pod/coredns-6d4b75cb6d-vq9h7 1/1 Running 0 10m
kube-system pod/etcd-kind-cilium-control-plane 1/1 Running 0 10m
kube-system pod/hubble-relay-cdf4c8cdd-69bpx 1/1 Running 0 9m9s
kube-system pod/hubble-ui-86856f9f6c-l9t7n 3/3 Running 0 9m9s
kube-system pod/kube-apiserver-kind-cilium-control-plane 1/1 Running 0 10m
kube-system pod/kube-controller-manager-kind-cilium-control-plane 1/1 Running 0 10m
kube-system pod/kube-scheduler-kind-cilium-control-plane 1/1 Running 0 10m
local-path-storage pod/local-path-provisioner-8687fd6488-p4tqr 1/1 Running 0 10m
이제, 마지막으로 ingress controller를 설치하자.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
cilium CLI 다운로드
# curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz{,.sha256sum}
# sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
# sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
# rm cilium-linux-amd64.tar.gz{,.sha256sum}
다운로드 받은 후 상태를 체크해 보자.
# cilium status --wait
/¯¯\
/¯¯\__/¯¯\ Cilium: OK
\__/¯¯\__/ Operator: OK
/¯¯\__/¯¯\ Hubble: OK
\__/¯¯\__/ ClusterMesh: disabled
\__/
Deployment hubble-ui Desired: 1, Ready: 1/1, Available: 1/1
Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1
Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet cilium Desired: 1, Ready: 1/1, Available: 1/1
Containers: cilium Running: 1
hubble-ui Running: 1
hubble-relay Running: 1
cilium-operator Running: 1
Cluster Pods: 6/8 managed by Cilium
Image versions cilium quay.io/cilium/cilium:v1.11.4@sha256:d9d4c7759175db31aa32eaa68274bb9355d468fbc87e23123c80052e3ed63116: 1
hubble-ui quay.io/cilium/hubble-ui:v0.8.5@sha256:4eaca1ec1741043cfba6066a165b3bf251590cf4ac66371c4f63fbed2224ebb4: 1
hubble-ui quay.io/cilium/hubble-ui-backend:v0.8.5@sha256:2bce50cf6c32719d072706f7ceccad654bfa907b2745a496da99610776fe31ed: 1
hubble-ui docker.io/envoyproxy/envoy:v1.18.4@sha256:e5c2bb2870d0e59ce917a5100311813b4ede96ce4eb0c6bfa879e3fbe3e83935: 1
hubble-relay quay.io/cilium/hubble-relay:v1.11.4@sha256:460d50bd0c6bcdfa3c62b0488541c102a4079f5def07d2649ff67bc24fd0dd3f: 1
cilium-operator quay.io/cilium/operator-generic:v1.11.4@sha256:bf75ad0dc47691a3a519b8ab148ed3a792ffa2f1e309e6efa955f30a40e95adc: 1
Hubble ingress를 생성해보자.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hubble-ingress
namespace: kube-system
spec:
rules:
- host: "hubble.10.10.100.10.nip.io"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hubble-ui
port:
number: 80
호출하면 아래와 같이 화면이 나타난다.
다음 시간에 간단한 msa application을 배포하여 hubble에서 어떻게 조회되는지 알아보자.
참고
https://docs.cilium.io/en/stable/gettingstarted/kind/
'Kubernetes > 모니터링' 카테고리의 다른 글
Prometheus agent mode (0) | 2022.09.03 |
---|---|
Cilium - Hubble UI를 이용한 애플리케이션 시각화 (0) | 2022.05.19 |
Goldilocks로 VPA 모니터링 하기 (0) | 2022.05.15 |
Prometheus-operator를 사용하여 Prometheus 및 Grafana 설치 (0) | 2022.05.09 |
Prometheus에서 주요 alert rule (0) | 2022.05.06 |