LoginSignup
5
7

More than 5 years have passed since last update.

5分で理解するkube2iamの仕組み

Last updated at Posted at 2019-02-24

Kubernetes(EKS)で各PodごとにIAMロールを管理するには、jtblin/kube2iamを使うのが一般的である。今回はそのkube2iamがどのような仕組みで動いているかを解説する。

TL;DR

  • EC2のメタデータ取得(169.254.169.254)をkube2iamのPodに流れるようにする(iptablesの編集)
  • kube2iamがリクエスト元Podに基づいてIAMロールを決定し、クレデンシャルを返す
  • 後発のkiamよりも手軽に導入できる(ただし高負荷時に異なるロールが割り当てられる不具合も)

kube2iamの全体像

IAM%20Access%20-%20kube2iam.png

  1. EC2メタデータのリクエストを横取り
  2. EC2のIAMロールから別のIAMロールのクレデンシャルを生成
  3. 生成したクレデンシャルを返す

kube2iamのデプロイ

  • kube2iamはDaemonset(各EC2インスタンス上で1つ以上動くPod)としてデプロイしている
  • kube2iamがiptablesを触れるよう、SecurityContextをprivilegeにしてroot権限を渡す
  • 公式Githubにyamlの例が置かれている
  • HelmもStableとして公開されている

EC2メタデータ

インスタンスメタデータのAWSドキュメントでも分かる通り、/iam/security-credentials/role-nameへリクエストすればEC2インスタンスに割り当てられているIAMロールのクレデンシャルが取得できる。
AWS系のほとんどのライブラリは、認証情報が指定されていない限り、このようにメタデータAPIからクレデンシャルを取得している。

kiamとの違い

kube2iamの他にuswitch/kiamも存在する。kube2iamが2016年に登場し、その後発として2017年にkiamが登場した。

kiamの特徴は「Node自体がIAMロールを持たない」「Daemonsetとして起動しているAgentからMasterへリクエストする」というものがある。よりセキュリティを意識した設計だが、セットアップの手軽さではkube2iamが優勢とされており、GitHubのスター数もkube2iamが多い。(kube2iam 998 : kiam 415)

IAM%20Access%20-%20kiam.png

kube2iamには高負荷時に異なったロールが割り当てられるというIssueもあり、そのような問題を考慮するとkiamも選択肢に入る。(kiamのコンセプトとしてkube2iamよりもより速く、そしてこの不具合の解決をするためというの2つがある。)

より詳しくは海外の記事「IAM Access in Kubernetes: kube2iam vs kiam」でも解説されている。(本記事の参考)

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7