クライアント証明書とサーバー証明書
今まで証明書に関して、一つの役割しか持っていないと思っていたのですが、証明書には二つの役割があるんですね。
kubelet の設定ファイルを見ているときに、二つの証明書を設定していることに気づきました。二つの証明書の役割について確認していきます。
その二つの役割とは簡単に言うと以下の通りです。
(1) 身分証明書としての証明書
(2) 通信を暗号化するための証明書
では詳しく見ていきます。
`kubelet` に設定される2つの主要な証明書は、通常以下のような役割を果たしています:
kubelet のサーバー証明書(tlsCertFile)
役割:この証明書は、`kubelet` 自身がサーバーとして動作するために使用されます。
利用用途:クライアント(たとえば、APIサーバーや監視ツール)が `kubelet` に接続する際に、通信の暗号化と `kubelet` の信頼性を保証します。
使用タイミング:API サーバーが `kubelet` に通信を行う際や、他のクライアントが `kubelet` のメトリクスやステータスを取得する際に利用され、これにより安全な通信が確立されます。
クライアント証明書(clientCAFile)
役割:この証明書は、`kubelet` に接続してくるクライアントが正当なものであるかどうかを認証するために使用されます。
利用用途:クライアント証明書を使って `kubelet` にアクセスする API サーバーなどの Kubernetes コンポーネントを認証します。これにより、信頼できるクライアントのみが `kubelet` にアクセスできるようにします。
使用タイミング:API サーバーが `kubelet` にアクセスする際に、API サーバーが正当であることを確認し、不正なクライアントがアクセスできないようにします。
まとめ
サーバー証明書(tlsCertFile):
目的:`kubelet` の身元を証明し、安全に通信を暗号化する。
利用:`kubelet` がサーバーとして機能するための暗号化通信に使用。
クライアント証明書(clientCAFile):
目的:`kubelet` に接続するクライアントの信頼性を確認する。
利用:`kubelet` に接続する API サーバーなどの正当性を検証。
これら2つの証明書設定により、`kubelet` の通信は暗号化され、かつ正当なクライアントのみが接続できるようにセキュリティが確保されています。