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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
世良泰明
July 30, 2024
Technology
0
610
metrics-serverをセキュアなTLSでデプロイしてみた
2024/7/30 Kubernetes Novice Tokyo #33 発表資料
世良泰明
July 30, 2024
Tweet
Share
More Decks by 世良泰明
See All by 世良泰明
Serendie Design Systemを使ってWebアプリケーションを開発してみた
y_sera15
0
120
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
50
ラズパイ奮闘記 その1
y_sera15
0
70
EKS勉強会
y_sera15
1
150
自宅k8s構築日記 冬休み編
y_sera15
0
260
自宅k8sクラスター構築日記
y_sera15
0
230
EKSを動かしてみた話
y_sera15
0
110
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
280
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
230
Other Decks in Technology
See All in Technology
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
4.1k
OCI技術資料 : コンピュート・サービス 概要
ocise
4
54k
DevOpsエージェントで実現する!! AWS Well-Architected(W-A) を実現するシステム設計 / 20260307 Masaki Okuda
shift_evolve
PRO
3
410
20260311 ビジネスSWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
120
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
2
250
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.7k
Fundraising Gala’s in 2026 What’s Changing & What Still Works
auctria
PRO
0
110
クラウド時代における一時権限取得
krrrr38
1
180
Datadog の RBAC のすべて
nulabinc
PRO
3
410
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
5
950
Evolution of Claude Code & How to use features
oikon48
1
560
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
270
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
From π to Pie charts
rasagy
0
150
Are puppies a ranking factor?
jonoalderson
1
3.1k
Agile that works and the tools we love
rasmusluckow
331
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Building Applications with DynamoDB
mza
96
6.9k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
200
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How GitHub (no longer) Works
holman
316
140k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
230
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. 特にないです. サーバーの証明書が"(クラスタ内で)由緒正しい"ものに差し変わっただけです.