Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Serviceをたずねて3000行 - Kubernetesコードリーディングの旅 -
Search
RyuSA
February 09, 2021
Technology
960
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Serviceをたずねて3000行 - Kubernetesコードリーディングの旅 -
kubernetes/kubernetesのリポジトリを元に、Serviceリソースがどのようにネットワークへ反映されるのかを追ってみました
RyuSA
February 09, 2021
More Decks by RyuSA
See All by RyuSA
Java屋だってOperatorが作りたい!
ryusa
1
620
Visual Studio Codeとコンテナでいい感じのRe:View執筆環境
ryusa
1
1.6k
JavaScriptと歩くポリシーエンジン jsPolicy
ryusa
1
610
TextAlive App APIと夢見る新しいUX
ryusa
1
470
Gitlab Operatorと夢見るGitlab自動化の旅
ryusa
2
1.1k
AccessPoint Operator on Raspberry Pi
ryusa
1
1.3k
そのAPIはセキュアですか?
ryusa
2
870
「L3以下は魔法で動いている!」と言いながらiptablesとkube-proxyを読んでみた話
ryusa
1
180
「〇〇完全に理解したったww」から始めるエンジニア生活
ryusa
2
4.6k
Other Decks in Technology
See All in Technology
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
360
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.2k
hackers_champloo_2026_tidb
makocchi
0
140
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
700
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
5.8k
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
2
850
継続的なAIコスト最適化
bgpat
1
290
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
700
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
390
【Data Engineering Summit2026_登壇資料】医療ビッグデータ×AIエージェントを支えるデータ基盤とハーネスエンジニアリング
jmdc_presentation
0
130
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
0
280
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
Crafting Experiences
bethany
1
380
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Docker and Python
trallard
47
4.2k
Thoughts on Productivity
jonyablonski
76
5.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Transcript
RyuSA Serviceをたずねて3000⾏ - Kubernetesコードリーディングの旅 -
Who Am I
AGENDA • Serviceリソースがネットワークに反映されるまで • EndpointSlice Controller / kube-proxy • (下記⾚枠部分)
出典 : https://kubernetes.io/ja/docs/concepts/overview/components/
なぜService︖😕
なぜServiceを読もうとしたのか
Curl to Service curl 10.100.233.191 (=svc) Reply from 10.1.0.100 (=pod)
Abracadabra……
Curl to Service curl 10.100.233.191 (=svc) Reply from 10.1.0.100 (=pod)
Abracadabra……
NOTATION • 環境 • Kubernetes v1.20をベースに動作確認、コードリーディングをしています • IPv6を利⽤したデュアルスタック環境については触れません • つまりデフォルト
• kube-proxyのproxy-modeはiptablesです • つまりデフォ(ry • featureGateのEndpointSliceとEndpointSliceProxyingは有効です • つまりデ(ry • 話さない内容 • LoadBalancer TypeのServiceについて • Golangガチ初⼼者が読んでます • 読み間違い、勘違い等あるかもしれません……
Serviceの反映にはControllerが関わってます • KubernetesにおけるControllerとは • Controllerは1種類以上のKubernetesリソースを監視し、特定のミッションを達成するためのコンポーネント • 監視しているリソースのspecに合わせて「現在の状態」を「⽬的の状態」に変更・制御していくことが⼀般的なコント ローラのミッションです • その多くはapiserverへフィードバック/副作⽤を送ります
• Serviceリソースのルーティングに関連するController • EndpointSlice Controller • EndpointSliceリソースを監視しているControllerです • kube-proxyが監視しているEndpointSliceリソースに対し副作⽤を及ぼします • kube-proxy • Serviceリソースを監視しているコンポーネント(兼Controller)です
EndpointSlice Controller の話
PodとServiceを紐つけておく • EndpointSlice とは • ServiceリソースのセレクタとPodへの紐付けを管理するリソースです • ⼀緒にPodのTopology(=“kubernetes.io/hostname” など)も保存されてます •
kube-proxyに監視されてます • EndpointSlice Controllerの役割 • 主にPodをServiceを監視し、EndpointSliceを常に最新の状態に変更します • EndpointSlice⾃体も監視しています
EndpointSlice Controller 全体像 EPSlice informer Main loop Queue Cache; selector
and Service Sync Service with svc name And update the cache Svc Pod API Resources
EndpointSlice Controller メインループ Heap Queue Selector Cache Wait 1 sec…
pop the data Nothing… Creating EndpointSlice… Find pods by selector Svc informer Find svc by svc name EP Slice API Resources Update EndpointSlice Loop
Kube-proxyの話(ほんぺ)
kube-proxyは利⽤者の夢を叶えてくれます • kube-proxy とは • Kubernetesの基本コンポーネントの1つです • EKSではDaemonSetでデプロイされたりしています • ノードのネットワークプロキシに対して変更を加えることでServiceリソースの実現を⾏なっています
• kube-proxyの役割 • ServiceとEndpointSliceを監視し、ノードのネットワーク設定を最新にします • kube-proxyの管理するネットワークはkube-proxyを起動する時にproxy-modeで設定できます • Kubernetes v1.20現在では iptables / ipvs / userspace のいずれか
Kube-proxyの登場⼈物紹介 • ProxyServer • kube-proxyの本体で、このインスタンスのRun関数が叩かれることでkube-proxyが起動します • 起動時に設定に則って⽣成されたproxy.Providorのインタフェースを叩く • メインループ(or goroutine)としてSyncLoop関数を起動して定期的に同期処理をする
• proxy.Providor • ネットワーク設定の変更処理をコールするためのインタフェース • Sync関数とSyncLoop関数を提供している • Sync関数は同期的にネットワーク設定を最新に変更します • SyncLoop関数はgoroutineを起動し定期的にネットワーク設定を最新にします • xxx.Proxier • proxy.Providorを実装したオブジェクト • iptables / ipvs / userspace のそれぞれの実装が存在している • つまりこれを独⾃実装してビルドすれば、あなただけのkube-proxyを実装できます
kube-proxy初期化 ProxyServer proxy.Provider SyncLoop iptables.Proxier Injected on boot Sync ipvs.Proxier
userspace.Proxier
Service/EndpointSlice 追加時の挙動 EPSlice Svc informer ProxyServer iptables.Proxier onXXXAdded SyncLoop syncProxyRules
Sync up iptables at least once in 1h serviceMap endpointsMap Sync iptables on the node API Resources
iptablesに反映されるルール例
kube-proxyはどうやら3つのルールを作成するらしい • KUBE-SERVICES • Serviceすべてのレコードがルールとして記載されています • パケットの送信先IPアドレスがあるServiceと⼀致している場合、そのServiceのルール(後述)へジャンプします • KUBE-SVC-XXX •
ある特定のService専⽤のルールです、このルールにはServiceがどこへルーティングされるかの情報が記載されていま す • iptablesのstatisticモジュールのrandomモードで同確率でServiceに紐つくEndpointSliceのルール(後述)宛にジャンプ するようになっています • KUBE-SEP-XXX • パケットをあるEndpointSliceのIPアドレスへDNATするルールです
kube-proxyはどうやら3つのルールを作成するらしい Packet to Service KUBE-SERVICES KUBE-SVC-XXX KUBE-SEP-XXX KUBE-SEP-XXX KUBE-SEP-XXX Packet
to Pod DNAT DNAT DNAT iptables