AWSでKubernetesのマネージドサービス Amazon EKS がGAになりました。 今まではAWSでk8sをいじるときはkops経由でクラスターを作って、権限設定してと手間がかかっていましたが、EKSはどれくらい楽になるのかなという観点で触ってみました。
全体的に
AWSのWebコンソール側はめっちゃシンプルで発展途上とさえ感じられるレベル。
今の所、使えるのは US West (Oregon) (us-west-2) or US East (N. Virginia) (us-east-1) のみ。
- 東京リージョン早く来てほしい!
リソースの用意は基本はCLI(aws-cli/kubectl) & CloudFormationでやる。
- クラスターのみWebから作成できる。
クラスターの作成
ネットワーク関連は自分で用意しないといけない。
Get Startedの例だとVPC/SecurityGroupをCloudFormation経由でやらせていました。クラスターの作成も含めてCloudFormationでやったほうが早そう...
ノードの作成
ワーカーノードも自分で作成する。
- クラスターとワーカーの紐付けを後から実施する形みたい。Configmapを編集して適用する。
Auto Scaling グループを設定してあげるので、最小・最大・希望ノード数の範囲で自動で増減できます。
- KubernetesのPodのスケールは HolizontalPodAutoscalerで出来るけど、ノードのスケールまで出来るのは可用性を高めるのに良さげ。
Kubernetesにアプリケーションを乗せる
通常のKubernetesの使い方同様に、ReplicationController, Service ect...を作成すればOK。
LoadBalancerはアクセスできるようになるまで10minくらい待つので気長にお茶でも飲んで待つ。
ハマりポイント
自分がハマったポイント集。
それとMFAでカッチリユーザー権限を設定している人は、事前に
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
でtokenを取得すること- An error occurred (InvalidClientTokenId) when calling the GetSessionToken operation: The security token included in the request is invalid.
もしInvalidClientTokenIdで弾かれる場合はkubeconfigから-r 行および <role-arn> 行を消すと通る。Roleをここで決めておきたいのに。。。
- could not get token: InvalidClientTokenId: The security token included in the request is invalid.
雑感
認証・認可を上手にIAMとKubernetesのRBACを統合しようとしているなと感じます。AWSでKubernetesを立てるメリットの1つではないでしょうか。
ただ、ドキュメントを見る限りEKSでのIAMの立ち位置は"認証"であって、認可はまだRBAC側で設定するみたいです。
Kubernetesのリソースアクセスの制御は、ConfigMapにIAMユーザー/ロール/アカウントを追加する必要がありますが、新しいユーザーやロールが追加されるたびに毎度毎度ConfigMapを手で書き換えるのは中々メンテナンスが大変そう。。。ここをGUIや自動化出来るとさらに使いやすいですね。
他にも最初からリソース操作はかなり CloudFormationやkubectl に頼っています。
- kopsと比較するとVPC/セキュリティグループ/Auto Scaling/Nodeの設定を細かく出来る一方で手作業となる部分が多いので、"とりあえず作って壊す" には少しハードルが高い印象を受けます。
認可の仕組みやVPC、CloudFormationあたりをもう少し探っていきたいと思います。ここら辺が明確になれば、ECSとの差別化要素も見えてきそうです。