cilium에서도 istio처럼 Mutual Authentication이 가능한지 테스트해보려고 합니다. 환경 구성하기cilium 설치하기먼저 mutual spire를 활성화 합니다. 이렇게 설치하면 자동으로 cilium-spire에 spire도 설치되게 됩니다. helm install cilium cilium/cilium --namespace kube-system \ --set k8sServiceHost=auto --set ipam.mode="cluster-pool" \ --set k8s.requireIPv4PodCIDR=true --set ipv4NativeRoutingCIDR=10.244.0.0/16 \ --set routingMode=native --set autoDirectNodeRoute..
cilium에서는 gateway API를 지원하고 있기 때문에 트래픽 분할을 할 수 있습니다. 이번에는 Gateway API를 구성하고 가중치에 따라 트래픽을 분할해보겠습니다. cilium 설치하기cilium을 설치하기 전 먼저 gateway api의 crd들을 설치해줍니다. kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.0/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.0/config..
Cilium 문서에서도 나오듯 TPROXY는 클라이언트 트래픽의 목적지 주소를 바꾸지 않고 프록시로 “투명하게” 가로채는 방식입니다.NAT 없이 원래 목적지(IP/포트)를 보존하므로, 앱에서 정책/로깅을 정확하게 할 수 있습니다. Non-local Socket BindingTPROXY를 쓰려면 먼저 로컬에 없는 IP로도 리슨할 수 있어야 합니다.클라이언트가 특정 서버로 요청을 보냈을 때, 중간 프록시가 그 주소 그대로 받아야 하기 때문입니다. 이걸 비로컬 소켓 바인딩(Non-local Socket Binding) 이라 부릅니다. 예시사용자가 100.0.0.1:80 으로 접속중간 프록시는 그 주소 그대로 받고 싶음문제: 프록시 호스트엔 보통 100.0.0.1 이 없어서 기본 규칙에선 해당 주소로 bind(..
cilium의 service mesh에서는 traffic shifting 설정을 CiliumEnvoyConfig로 할 수 있다. 샘플 애플리케이션 배포하기# traffic-shifting 이라는 넴스페이스를 생성해서 여기서 진행하겠습니다.kubectl create ns traffic-shiftingkubectl config set-context --current --namespace traffic-shifting먼저 helloworld의 백엔드로 2개의 deployment를 준비합니다. 이 deployment의 라벨은 version: v1과 v2가 서로 다르게 붙어있습니다. cat 그리고 클라이언트 역할을 할 client-pod를 하나 구성합니다. cat 기본 설정의 경우 아무런 설정이 안되어있는..
cilium에서는 ingress/gateway api 등으로 service mesh 구성을 지원합니다. 다양한 모드가 존재하는데 shared는 1개의 ingress를 구성한뒤 클러스터에서 다 공통으로 사용하는 모드입니다. 이외에는 dedicated 모드는 Ingress 컨트롤러가 해당 Ingress 전용 로드밸런서를 생성하게 됩니다. shared 모드 service mesh 구성하기 cilium 서비스메쉬를 구성하는걸 진행해보겠습니다. helm install cilium cilium/cilium --namespace kube-system \ --set k8sServiceHost=auto --set ipam.mode="cluster-pool" \ --set k8s.requireIPv4PodCIDR=t..
cilium에서 제공하는 bgp 테스트 환경 구성이 있는데 이게 잘 동작을 안해서 엄청 고생을 하다. 도전과제겸 정리해봅니다.공식 문서에서는 아래와 같이 간단하게 구성하고있는데 mac이라 그런지 바로 동작을 잘 안하네요.2025.08.15 - [K8S/cilium] - containerlab을 사용하여 cilium + BGP 테스트 환경 만들기 사전 준비테스트 환경은 mac arm64 이며 orbstack을 사용할 예정입니다. vm 생성하기mac에서는 바로 containerlab을 사용할 수 없어 orbstack으로 vm을 생성해줍니다. orbstack을 실행 후 명령어를 입력하세요orb create ubuntu linux 이렇게 vm을 생성하면 쉽게 서버에 접근이 가능합니다.ssh orb kind로 클..
이전에 cluster mesh 구성을 해본 경험이 있긴 한데 연결 후 어떤 설정이 있는지 어떻게 동작하는지까지 확인을 해보려 합니다.2024.10.13 - [K8S/cilium] - Cilium ClusterMesh 구성해보기테스트 환경 만들기kind k8s 클러스터 west, east 배포해봅니다.kind create cluster --name west --image kindest/node:v1.33.2 --config - 여기에 테스트에 필요한 도구들도 설치해봅니다.docker exec -it west-control-plane sh -c 'apt update && apt install tree psmisc lsof wget net-tools dnsutils tcpdump ngrep iputils-p..
containerlab이 이제 network 환경 구성을 도와주는 도구인것 같다. BGP 통신을 테스트 할 수 있는 환경을 구성해서 테스트 해보려고 하는데 mac 사용자들에게는 강추하는 orbstack을 사용하려고 한다.virtual box를 사용해서 더 쉽게 테스트 환경을 만들 수도 있지만.. 노트북의 성능 문제로 virtualbox를 2개 이상 실행하면 컴퓨터가 너무 느려지는 저같은 분들은 이렇게 테스트를 진행해보는걸 추천합니다. linux VM 생성하기orbstack을 사용하면 컨테이너 생성 뿐만 아니라 빠르게 vm 생성도 가능하다.ubuntu vm을 생성한다.orb create ubuntu linux 생성이 완료되었는지 확인해보겠다.orb list orbstack을 사용하는 리눅스 커널에선 TC..
cilium에서는 LB-IPAM 기능을 제공하고 있기 때문에 BGP와 연동하면 외부에서도 쉽게 접근 가능한 LB를 구성할 수 있습니다.따라하며 테스트해보고 싶은 분은 여길 참고하시면 좋을 것 같습니다. 2025.08.15 - [K8S/cilium] - containerlab을 사용하여 cilium + BGP 테스트 환경 만들기 아래와 같이 적용시 bgpControlplan이 활성화 됩니다. statusReport는 운영환경에서 api서버의 부하를 유발할 수 있기 때문에 끄는 것을 권장한다고 합니다. helm upgrade cilium cilium/cilium --version 1.18.0 \ --namespace kube-system \ --reuse-values \ --set bgpControlP..
2025.07.31 - [K8S/🔥 network study🔥] - [cilium] native routing 통신 흐름 확인해보기지난번에 natvie모드를 살펴보긴 했는데 이번에는 오버레이 모드를 살펴볼까 합니다. 기본적으로 overlay 모드를 사용하면 VxLAN이 활성화되고 그 이외에는 Geneve가 옵션으로 있습니다. VXLAN(Virtual Extensible LAN)VXLAN은 이더넷 프레임을 UDP 패킷 안에 캡슐화해 전송합니다.외부 IP/UDP 헤더 위에 VXLAN 헤더가 붙고, 그 안에 원래의 L2 프레임이 들어갑니다.이 방식으로 서로 다른 네트워크 구간에서도 마치 같은 L2처럼 통신할 수 있습니다.구조가 단순하고 호환성이 좋지만, 헤더 구조가 고정이라 새로운 기능을 추가하기는 어렵습..
L2 Announcements는 로컬 영역 네트워크에서 서비스가 접근 가능하도록 만드는 기능입니다. 주로 BGP 기반 라우팅이 없는 사내/캠퍼스 네트워크 같은 온프레미스 배포를 위해 설계되었습니다. 이 기능을 사용하면 ExternalIP 및/또는 LoadBalancer IP에 대한 ARP 쿼리에 응답합니다. 이 ARP 응답을 주는건 클러스터 중 리더로 선택 된 노드가 자신의 MAC 주소로 응답을 줍니다. 그 노드는 서비스 로드밸런싱 기능으로 트래픽을 분산 처리하며, 클러스터의 north/south 로드밸런서 역할을 합니다. 테스트 환경에서 NodePort를 쓰는것과 L2 Announcement를 쓰는걸 비교해보면 NodePort는 클라이언트가 어떤 호스트로 보낼지 결정해야하고 노드가 다운되면 해당 IP+..
LB IPAM은 Cilium이 LoadBalancer 타입의 Service에 IP 주소를 할당할 수 있게 해주는 기능입니다. 내가 쓰는 노트북이 사양이 별로 안좋아서 virtualbox로 테스트 환경 구성하기가 어려워서 kind를 주로 쓰는데 이때 한번 써본 기능이긴하다.2024.10.13 - [K8S/cilium] - Kind에서 Cilium으로 외부 접근 LoadBalancer 설정하기 이번에는 LB-IPAM의 동작 방식에 대해 한번 알아볼까합니다. 먼저 LB IPAM은 Cilium BGP Control Plane 및 L2 Announcements / L2 Aware LB 같은 기능과 함께 동작합니다. LB IPAM이 Service 오브젝트에 IP를 할당/부여하는 역할을 맡고, 다른 기능들이 해당 I..
cilium에는 다양한 ipam 모드들이 있습니다. 디폴트로는 Cluster Scope가 설정되는데 어떻게 설정하는지 다른 ipam 모드와 비교해보려고 합니다. Cluster Scope 모드 Kubernetes Host Scope 모드 Kubernetes Host Scope 모드는 쿠버네티스 노드에 설정된 파드 대역을 보고 agent가 파드 대역을 설정하는 모드입니다. 쿠버네티스 클러스터를 설정할때 파드 대역을 설정하거나 기본 설정을 사용하게 됩니다. 그리고 노드가 추가될때 마다 node-cidr-mask-size 값으로 파드 대역을 나눠 노드 마다 붙여줍니다. apiVersion: kubeadm.k8s.io/v1beta3kind: ClusterConfigurationnetworking: servi..
https://youtu.be/QTSS6ktK8hY?feature=shared 기존 쿠버네티스 대역폭 제한의 문제점쿠버네티스에는 파드 네트워크 대역폭 제한을 위한 기능이 있습니다.ingress / egress 어노테이션에 50Mbit/sec 같은 값을 넣으면 제한이 걸립니다.하지만 이 기능은 bandwidth meta plugin에서만 지원하며, 내부적으로 토큰 버킷 필터(Token Bucket Filter, TBF) 를 사용합니다.문제는 이 방식이 프로덕션 환경에서 확장성이 떨어진다는 점입니다. Pod 유입 속도를 제한하려면 호스트 veth의 유출 경로에 규칙을 설정해야 합니다.예를 들어, ingress 트래픽 제어 설정인 kubernetes.io/ingress-bandwidth="50M"의 경우 v..
https://youtu.be/AVEBcZc0YsQ?feature=shared 이 발표에서는 쿠버네티스 환경에서 성능 병목을 제거하고, 최신 커널 기능과 Cilium의 혁신들을 통해 네트워킹 성능을 극한까지 끌어올린 과정을 소개했습니다.아래는 발표 내용을 토대로 정리한 주요 내용입니다.https://isovalent.com/blog/post/cilium-netkit-a-new-container-networking-paradigm-for-the-ai-era/ Cilium netkit: The Final Frontier in Container Networking PerformanceIn this blog post, we're looking at Cilium's support for netkit - a rev..
cilium에서는 마스커레이드를 BPF를 사용하거나 iptables를 사용할 수 있습니다. 마스커레이드는 클러스터 내부 파드(Pod)에서 외부 서비스(인터넷 등)로 나갈 때, 출발지 IP를 노드(Node)의 IP로 변경하여 응답 패킷이 돌아올 수 있도록 해 주는 기능입니다. bpf 마스커레이드를 설정하면 host routing도 bpf로 설정해야합니다. 마스커레이드 설정 확인하기kubectl exec -it -n kube-system ds/cilium -c cilium-agent -- cilium status | grep Masquerading 기본적으로, 파드에서 보내는 모든 패킷 중 목적지가 ipv4-native-routing-cidr 범위 밖에 있는 IP 주소인 경우 마스커레이딩됩니다. 단, ..
1.18.0이 릴리즈 되었는데 좀 관심가는 변경점이 생겨서 정리해보려고 한다. iptablesRandomFully서로 다른 파드(네트워크 네임스페이스)에서 쿠버네티스 밖에 있는 동일한 목적지로 연결을 하면 내부적으로 연결에 필요한 튜플이 겹쳐서 충돌할 수 있습니다. 아무래도 외부로 나가는 과정에서 nat가 되는데 같은 포트를 사용하게 되면 충돌이 나게 되기 때문입니다. 커널이 출발지 포트를 자동으로 할당할 때, 커넥션을 만들기 전에는 어떤 포트가 사용중인지 알 수 없어서 비슷한 시기에 커넥션을 생성하면 동일한 포트를 사용하게 될 가능성이 있습니다. 특히 UDP나 short-lived TCP 요청에서 더 자주 발생한다고 합니다. 이번에 변경된건 --random-fully을 사용하게 되는건데 추가를 ..
이번엔 native routing (오버레이 네트워크 없는 구조)에서 통신이 어떻게 이뤄지는지 확인해보겠습니다. cilium과 샘플 애플리케이션 구성하기 버전은 1.17.6이고 ipam은 kubernetes 모드를 사용했습니다. datapath는 netkit이 아닌 veth 모드입니다. helm install cilium cilium/cilium --version 1.17.6 --namespace kube-system \ --set k8sServiceHost=auto --set ipam.mode="kubernetes" \ --set k8s.requireIPv4PodCIDR=true --set ipv4NativeRoutingCIDR=10.244.0.0/16 \ --set routingMode=nat..
hubble이 cilium이 설치된 쿠버네티스 클러스터의 트래픽 흐름을 확인시켜주지만 이 데이터를 장기적으로 저장하지는 않습니다. hubble은 기본적으로 cilium 에이전트에서 발생하는 이벤트를 메모리에 저장합니다.버퍼 사이즈를 기준으로 이벤트를 저장하고 기본적으로는 4095개의 이벤트만을 저장하고 있습니다. 링버퍼 구조상 1칸을 비워둡니다. helm 차트 여기서 설정 변경 가능합니다. hubble: # -- Enable Hubble (true by default). enabled: true # -- Annotations to be added to all top-level hubble objects (resources under templates/hubble) annotations: {} #..
스타워즈 데모로 테스트 해보기cilium에서는 샘플 애플리케이션으로 스타워즈 데모를 제공합니다.https://docs.cilium.io/en/stable/gettingstarted/demo/ 데모 환경 소개아래의 파일을 배포하면 데모환경은 구성 완료됩니다.kubectl create -f https://raw.githubusercontent.com/cilium/cilium/1.17.6/examples/minikube/http-sw-app.yaml 데모를 설치하면 3개의 애플리케이션이 설치되는데 제국 우주선들의 착륙서비스를 제공하는 deathstar, 제국 측 클라이언트와 tiefighter, 연합군 측 클라이언트 xwing 3개의 파드로 구성되어있습니다. 직접 파드를 확인해보면 이렇습니다. ciliu..