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..
Cilium을 설치하면 기본적으로 cilium-operator와 cilium-agent가 함께 설치됩니다.또한, Cilium은 트래픽 모니터링을 위한 도구인 Hubble을 제공합니다. Hubble을 Helm으로 설치해보면 hubble, hubble-ui 그리고 hubble-relay 에대한 옵션이 있습니다. hubble-ui와 hubble-relay는 별도의 파드로 뜨게 되지만 이번 글에서 다루고자 하는 내용은 이 두 컴포넌트가 아니라 cilium-agent 내부에 내장된 Hubble에 관한 것입니다. 완전 기본 설정으로 cilium을 설치하면 hubble은 활성화 되어있습니다. 만약 비활성화 한 상태로 설치해보면 cilium-agent 내부에서 hubble 명령어 사용시 다음과 같은 에러가 발생합니다..
2025.07.16 - [K8S/🔥 network study🔥] - [cilium] flannel 설치하기 [cilium] flannel 설치하기먼저 flannel 배포를 위한 네임스페이스를 생성합니다. kubectl create ns kube-flannel helm차트로 배포하는 가이드에는 다음과 같은 라벨을 추가하게 되어있습니다.네임스페이스에 라벨을 붙여 파드 시큐nuguni.tistory.com이전 글에서 flannel을 설치했다면 이번엔 cilium으로 마이그레이션을 해보겠습니다. 마이그레이션 공식 가이드를 참고해서 진행했습니다.https://docs.cilium.io/en/stable/installation/k8s-install-migration/ 시작하기 전kubelet은 파드를 생성할때 ..
먼저 flannel 배포를 위한 네임스페이스를 생성합니다. kubectl create ns kube-flannel helm차트로 배포하는 가이드에는 다음과 같은 라벨을 추가하게 되어있습니다.네임스페이스에 라벨을 붙여 파드 시큐리티 스텐다드를 강제할 수 있습니다. 3가지 권한이 있는데 cni이기 때문에 privileged을 부여합니다. kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privileged https://kubernetes.io/ko/docs/concepts/security/pod-security-standards/ 파드 시큐리티 스탠다드파드 시큐리티 스탠다드에 정의된 여러 가지 정책 레벨에 대한 세부사항..
오픈소스 기여하다 보면 PR이 계속 남아있으면 언젠가 자동으로 클로즈 된다. 깃헙 액션으로 stale이라는 액션이 존재해서 이걸로 관리하는 것 같다. 저장소: https://github.com/actions/stale GitHub - actions/stale: Marks issues and pull requests that have not had recent interactionMarks issues and pull requests that have not had recent interaction - actions/stalegithub.com name: Close stale issues and PRson: schedule: - cron: "0 0 * * *" # 매일 자정 실행permission..
gke에 옵션으로 cilium을 설치할 수 있는건 다들 해보셧을 거라 생각합니다. 하지만 gce에는..? native-routing이란 ..!! 간단하게 설명하면 파드의 아이피를 overlay네트워크를 사용하거나 nat해서 노드의 아이피로 변환하지 않고 그대로 라우팅을 하는 라우팅 방법입니다. 공식 문서를 보면 alias ip를 사용해서 GKE 뿐만 아니라 GCE에서도 가능한것 처럼 소개되어있는데 구체적으로 어떻게 하면 되는지 나와있지 않아 삽질을 엄청 하였고.. 결국 방법을 찾아냈는데 그 내용을 공유해볼까 합니다. https://docs.cilium.io/en/stable/network/concepts/routing/#google-cloud 참고로 이 글을 gce의 네트워크에 대해서는 잘 모르는 사람이..
2024.11.28 - [CS/wasm] - 쿠버네티스 런타임 wasm으로 변경해서 실행해보기컨테이너를 wasm으로 실행한거에 이어서 이번에는 wasm런타임으로 쿠버네티스 클러스터를 변경해보려고 합니다. wasm런타임에는 여러가지가 있지만 runwasi를 사용해보겠습니다. 아래의 그림처럼 컨테이너 런타임이 runc에서 wasmedge로 변경되게됩니다. runwasi 설치하기containerd의 런타임에 runwasi를 추가하여 wasm 컨테이너도 실행해보려고 합니다.https://github.com/containerd/runwasi GitHub - containerd/runwasi: Facilitates running Wasm / WASI workloads managed by containerdFaci..
wasm 컨테이너 이미지 생성하기타겟 추가하기rustup target add wasm32-wasip1 프로젝트 생성하기cargo new http-server 설정 변경하기[package]name = "http-server" # 프로젝트 이름version = "0.1.0" # 프로젝트 버전edition = "2021" # Rust 에디션[dependencies]tokio_wasi = { version = "1", features = ["rt", "macros", "net", "time", "io-util"]}warp_wasi = "0.3.3" # warp_wasi 의존성 코드 수정하기// src/main.rsuse warp::Filter;#[to..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. aws에서는 eks의 로드밸런서를 구성하기 위해 aws loadbalancer controller를 제공합니다. 설치를 하지 않은 경우에는 NLB로 구성이 되지만 CLB(Classic Loadbalancer) 혹은 ALB(Application LoadBalancer)를 사용하고 싶은 경우에는 별도의 설치가 필요합니다. 설치하기AWS Loadbalancer Controller는 EKS에만 설치할 수 있는 컨트롤러는 아니지만 EKS에 설치하는 방법에 대해서만 소개하도록 하겠습니다. IAM 정책 다운로드 및 생성# 정책 다운로드curl -o iam-policy.json https://raw.githubu..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. AWS의 EKS에는 AWS에서 제공하는 공식 CNI 플러그인이 있습니다. 바로 Amazon VPC CNI입니다. 이 플러그인은 EKS 클러스터에서 파드 네트워킹을 원활하게 지원하는 핵심 요소로, 이번 글에서는 Amazon VPC CNI의 주요 기능과 이를 EKS 환경에서 효과적으로 활용하는 방법을 살펴보겠습니다. https://github.com/aws/amazon-vpc-cni-k8s GitHub - aws/amazon-vpc-cni-k8s: Networking plugin repository for pod networking in Kubernetes using Elastic Network Inte..
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다. EKS 란Amazon EKS(Amazon Elastic Kubernetes Service)는 AWS에서 제공하는 완전 관리형 Kubernetes 서비스입니다. Control Plane(Kubernetes API 서버, etcd 등)은 AWS에서 관리하므로, 사용자가 직접 설정하거나 유지보수할 필요가 없습니다. 따라서 사용자는 Control Plane을 직접 볼 수 없습니다. EKS는 IAM, VPC 등의 AWS 리소스와 통합하여 사용할 수 있으며, AWS Fargate를 통해 서버리스 방식으로 파드를 실행할 수 있는 기능도 제공합니다. EKS 생성하기다음과 같은 구조로 EKS를 생성해보도록 하겠습니..
현대 시스템에서는 여러 애플리케이션이 동시에 네트워크 자원을 사용하면서 서로 경쟁하게 됩니다. 특히 컨테이너 기반 환경에서는 네트워크 사용량이 증가함에 따라 자원 경쟁으로 인해 성능 저하나 지연(latency)이 발생할 수 있습니다. 이런 문제를 해결하기 위해 Linux 커널은 TC(Traffic Control)라는 네트워크 트래픽 제어 시스템을 제공합니다. TC의 역할TC는 네트워크 트래픽을 효과적으로 관리하고 최적화하여 처리량(Throughput)과 지연(Latency) 같은 네트워크 성능 지표를 개선하는 데 사용됩니다. tc를 사용하여 특정 유형의 트래픽에 우선순위를 부여하거나, 각 애플리케이션 및 컨테이너가 사용 가능한 대역폭을 제한할 수 있습니다. TC의 동작 과정네트워크 패킷이 장치를 통과..
사실 이글을 쓰기 위한 이전의 혼잡제어 정리글이 보고싶다면 아래에서~2024.10.27 - [CS/network] - 혼잡 제어 Congestion Control BBR은 Google이 개발한 혼잡 제어 알고리즘으로, 네트워크에서 병목 대역폭과 왕복 시간(RTT)을 추정하여 최적의 전송 속도를 유지하는 방식이다. 기존 TCP 혼잡 제어 방식과 달리, BBR은 패킷 손실이 아닌 대역폭과 지연 시간이라는 지표를 기반으로 속도를 조정하여 네트워크 자원을 더 효율적으로 활용한다. 기존 혼잡 제어 방식과의 차이기존의 TCP 혼잡 제어 방식(TCP CUBIC, TCP Reno 등)은 패킷 손실을 혼잡 신호로 인식한다. 전송 도중 패킷이 손실되면 네트워크가 혼잡하다고 판단하고 전송 속도를 줄이며, 손실이 없을 때는 ..