Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
metrics-serverをセキュアなTLSでデプロイしてみた
Search
世良泰明
July 30, 2024
Technology
650
0
Share
metrics-serverをセキュアなTLSでデプロイしてみた
2024/7/30 Kubernetes Novice Tokyo #33 発表資料
世良泰明
July 30, 2024
More Decks by 世良泰明
See All by 世良泰明
Serendie Design Systemを使ってWebアプリケーションを開発してみた
y_sera15
0
130
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
59
ラズパイ奮闘記 その1
y_sera15
0
73
EKS勉強会
y_sera15
1
160
自宅k8s構築日記 冬休み編
y_sera15
0
280
自宅k8sクラスター構築日記
y_sera15
0
240
EKSを動かしてみた話
y_sera15
0
120
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
290
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
240
Other Decks in Technology
See All in Technology
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
410
Amazon Bedrock 経由の Claude Cowork を試してみよう・MCP にも繋いでみよう
sugimomoto
0
170
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
47k
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
850
Copilot CLI・IDE・Web・スマホで途切れない開発フローを目指して / One Copilot flow - CLI IDE Web Mobile
aeonpeople
1
1k
AI時代に改めて考える、ドメイン駆動設計 - モデリングが「AIへの共通言語」になる
littlehands
7
2.3k
Geek Woman の育ち方 〜コミュニティとAIと〜
chicaco
0
410
Gradle×GitHub_ActionsでCI時間を約50%短縮 ジョブ分割の設計と落とし穴 / Cutting CI Time by ~50% with Gradle and GitHub Actions: Job-Splitting Design and Pitfalls
takatty
0
110
CloudFront VPCオリジンとVPC Latticeサービスの内部ALBをマルチアカウントで一元利用しよう
duelist2020jp
5
230
RubyでRuby拡張を書いたらRubyより35倍速になったってどういうこと??
kazuho
3
600
GitHub Copilot のこれまでとこれから: From Copilot to Collaborative Agents
yuriemori
1
180
サプライチェーン攻撃への備えについて考えている #湘なんか
stefafafan
3
2.4k
Featured
See All Featured
Test your architecture with Archunit
thirion
1
2.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Building Applications with DynamoDB
mza
96
7k
The Limits of Empathy - UXLibs8
cassininazir
1
340
Joys of Absence: A Defence of Solitary Play
codingconduct
1
370
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Context Engineering - Making Every Token Count
addyosmani
9
900
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
sira's awesome portfolio website redesign presentation
elsirapls
0
250
Automating Front-end Workflow
addyosmani
1370
210k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Transcript
metrics-serverをセキュアなTLSで デプロイしてみた 2024/7/30 Kubernetes Novice Tokyo #33 y_sera15
自己紹介 名前: 世良 泰明 (せら やすあき) twitter(X): @y_sera15 職業: 某製造業
インフラエンジニア 住み: - ~9月 名古屋 - 10月~ 横浜 k8s暦: - 自宅クラスター 2年(現在再構築中) - 業務利用 2ヶ月 other: - 今回は個人として参加 - etcd + CoreDNS + ExternalDNSで2週間悩んでいます... 自宅K8sクラスター: - intel NUC x3 - NAS(Synology) コンセプト: production likeな基盤
今日の話 目次 - metrics-serverとは - インストール時の問題点 - 解決方法 - 仕組み
metrics-serverとは 何をするもの? - Metrics APIを提供するコンポーネント. コンテナ/NodeのCPU, メモリ使用率が分かる. 使いどころ - HPA用コントローラのスケーリング判断
- kubectl topコマンド 導入方法 - manifest - helm https://github.com/kubernetes-sigs/metrics-server kubectl top node実行結果
インストール時の問題点 kubeadmやminikubeなどで普通に構築したクラスターでは, そのまま入れるとクラッシュしてしまう ざっと調べてみると, --kubelet-insecure-tls オプションを追加する というブログがちらほら 公式(README)の記載 kubelet によって提示される証明書の
CA を検証しない。 テスト目的に限る。 このオプションを使用しない場合の具体的なガイドは 公式にはない & (少なくとも日本語の)ブログでもなかなか見当たらない ⇒なんか気持ち悪い. 本番相当で使うにはどうすればいいの...? kubelet 証明書は、クラスターCAよって署名される必要がある (または、metrics-serverに --kubelet-insecure-tls を渡して証明書の検証を無効にする)
解決方法 issueの中にドンピシャな方法を発見. (kubeadmにて構築したクラスターの場合) https://github.com/kubernetes-sigs/metrics-server/issues/576#issuecomment-1820504816 1. kubelet-configのconfigmapにて, serverTLSBootstrap: true を追加. kubectl
edit cm -n kube-system kubelet-config 2. 各ノードにてkubeletの設定を反映 sudo kubeadm upgrade node phase kubelet-config 3. kubeletのデーモンを再起動 sudo systemctl restart kubelet.service 4. 証明書署名要求(csr)の確認 kubectl get csr -n kube-system 5. 証明書署名要求(csr)の承認 kubectl certificate approve <csr名> ⇒ これを行ってからインストールしたら実際に稼働した ただ, 何をやっているのか分からないので深掘ってみる
仕組み アーキテクチャ - kubeletのエンドポイントからメトリクスを取得 - api-server経由でMetrics APIを提供 Kubernetes monitoring architecture
https://github.com/kubernetes/design-proposals- archive/blob/main/instrumentation/monitoring_architecture.md Resource Metrics API https://github.com/kubernetes/design-proposals- archive/blob/main/instrumentation/resource-metrics-api.md kubectl top - node - pod client kubelet api-server metrics-server /metrics/resource /apis/metrics/v1beta1/ - /nodes - /nodes/{node} - /namespaces/{namespace}/pods - /namespaces/{namespace}/pods/{pods} --kubelet-insecure-tls で 設定する通信はここ TLS通信を有効化するためには, ①metrics-serveが所有しているCA証明書で ②kubeletのサーバ証明書が署名されている必要がある. https https or http
仕組み ①. metrics-serverが所有しているCA証明書 - クラスターのCA証明書が, configmapを通じて自動的にmountされる. (クラスターのCA証明書は, 各ノードの/etc/kubernetes/pki に格納されている.) ②.
kubeletのサーバ証明書 - apiserverとの通信用に自己署名の証明書を使用する(kubeadmのデフォルト設定). - kubeletの設定(serverTLSBootStrap)により, クラスターCAの署名を付与することができる. 自己署名 kubelet metrics-server https CA.crt kubelet.crt mount CA.crt CA.key つまり, こうなればよい before 署名 kubelet metrics-server https kubelet.crt mount CA.crt after CA.crt CA.key k8sクラスター k8sクラスター
仕組み serverTLSBootStrap - kubeletのconfigパラメータ - クラスターのCAに対して, kubeletのサーバ証明書のcsrを作成.(kubenetesのapiを使用) - セキュリティ上の理由により, csrは手動承認が必要.
自動承認するために、kubelet-csr-approverというコントローラーが存在している。 https://github.com/postfinance/kubelet-csr-approver https://kubernetes.io/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/
まとめ metrics-serverを, '--kubelet-insecure-tls' オプションを使わずインストールする方法と, その仕組みを解説した 方法 - kubeletのオプションでserverTLSBootstrap: trueとする -
kubeletの再起動 - csrを承認(kubectl certificate approve) 仕組み - metrics-serverはkubeletのエンドポイントから情報を取得し, Metrics APIを提供している - kubeletのサーバ証明書をクラスターのCAで署名してやればよい - serverTLSBootStrapオプション1つで証明書要求まで良しなにやってくれる 気が向いたらQiitaかZenにも投稿します.
以下、補足スライド
TLS通信の仕組み TLS通信の例 https://www.google.com サーバー証明書 ルート証明書 ルート認証局 ルート証明書の 秘密鍵 サーバー ルート認証局の証明書
ルート認証局に 署名されている ブラウザがルート認証局の 証明書を持っている ⇒ 通信先の正当性を確認
TLS通信の仕組み TLS通信の例 https://www.google.com サーバー証明書 ルート証明書 ルート認証局 ルート証明書の 秘密鍵 サーバー サーバー秘密鍵
証明書要求 (CSR) ルート認証局の証明書 署名された 証明書 kubernetesではクラスター内で ルート認証局(CA証明書/秘密鍵)を 作成
TLS通信の仕組み 自己署名だとどうなるのか https://www.google.com サーバー 証明書 サーバー 秘密鍵 自分で署名しちゃう (オレオレ証明書) サーバ証明書が正当な
ものなのか 確かめられない httpsで通信できず. (サーバの正当性の確認をスキップすればtlsできるっぽいが...) ブラウザだと怒られる
Q&A Q. metrics-serverのTLSを有効化したことによって, 何か他のコンポーネントに影響があったみ たいなことはなかったでしょうか? A. 特にないです. サーバーの証明書が"(クラスタ内で)由緒正しい"ものに差し変わっただけです.