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
620
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
120
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
50
ラズパイ奮闘記 その1
y_sera15
0
71
EKS勉強会
y_sera15
1
150
自宅k8s構築日記 冬休み編
y_sera15
0
270
自宅k8sクラスター構築日記
y_sera15
0
230
EKSを動かしてみた話
y_sera15
0
120
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
280
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
230
Other Decks in Technology
See All in Technology
AWS DevOps Agent or Kiro の使いどころを考える_20260402
masakiokuda
0
120
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
400
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
170
FastMCP OAuth Proxy with Cognito
hironobuiga
3
230
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
17k
ハーネスエンジニアリング×AI適応開発
aictokamiya
2
960
OCI技術資料 : 証明書サービス概要
ocise
1
7.2k
来期の評価で変えようと思っていること 〜AI時代に変わること・変わらないこと〜
estie
0
130
Move Fast and Break Things: 10 in 20
ramimac
0
110
LLMに何を任せ、何を任せないか
cap120
11
6.7k
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
170
SaaSに宿る21g
kanyamaguc
2
180
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
How to build a perfect <img>
jonoalderson
1
5.3k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
79
Visualization
eitanlees
150
17k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
470
sira's awesome portfolio website redesign presentation
elsirapls
0
200
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
Building Adaptive Systems
keathley
44
3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
100
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
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. 特にないです. サーバーの証明書が"(クラスタ内で)由緒正しい"ものに差し変わっただけです.