$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
metrics-serverをセキュアなTLSでデプロイしてみた
Search
世良泰明
July 30, 2024
Technology
0
570
metrics-serverをセキュアなTLSでデプロイしてみた
2024/7/30 Kubernetes Novice Tokyo #33 発表資料
世良泰明
July 30, 2024
Tweet
Share
More Decks by 世良泰明
See All by 世良泰明
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
34
ラズパイ奮闘記 その1
y_sera15
0
59
EKS勉強会
y_sera15
1
140
自宅k8s構築日記 冬休み編
y_sera15
0
240
自宅k8sクラスター構築日記
y_sera15
0
220
EKSを動かしてみた話
y_sera15
0
110
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
260
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
220
小江戸らぐ 自宅にkubernetesクラスターを構築した話
y_sera15
0
44
Other Decks in Technology
See All in Technology
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
230
re:Invent2025 3つの Frontier Agents を紹介 / introducing-3-frontier-agents
tomoki10
0
320
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
260
CARTAのAI CoE が挑む「事業を進化させる AI エンジニアリング」 / carta ai coe evolution business ai engineering
carta_engineering
0
2.1k
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
330
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
180
生成AI時代におけるグローバル戦略思考
taka_aki
0
210
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
15
15k
ウェルネス SaaS × AI、1,000万ユーザーを支える 業界特化 AI プロダクト開発への道のり
hacomono
PRO
0
300
ActiveJobUpdates
igaiga
1
270
特別捜査官等研修会
nomizone
0
390
S3を正しく理解するための内部構造の読解
nrinetcom
PRO
3
220
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Bash Introduction
62gerente
615
210k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
110
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
Building an army of robots
kneath
306
46k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
47
33k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
130
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
77
Navigating Weather and Climate Data
rabernat
0
44
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. 特にないです. サーバーの証明書が"(クラスタ内で)由緒正しい"ものに差し変わっただけです.