Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた②

##はじめに
本記事では、Udemy にて Stephane Maarek 氏 が提供している「[Amazon EKS Starter: Docker on AWS EKS with Kubernetes](https://www.udemy.com/amazon-eks-starter-kubernetes-on-aws/)」 について紹介したいと思います。

前回は AWS EKS の利用環境の構築を行いました。今回は、EKS についてより深く学んで行きたいと思います。前回の記事のリンクは下記です。

[Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた①](https://qiita.com/Yoshiyuki03/items/ec17a6960e202c61a07c)


##EKS in Depth
###EKS Control Plane
EKS についてより深く学ぶ必要があります。
まずは EKS の制御プレーンについて理解しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/dca84b20-f425-70e6-773f-6e2d68dd8d03.png)
EKS 制御プレーンは以下の特徴があります。

- EKS Kubernetes の制御プレーンは高可用である
- 他の利用者とシェアすることはない
- AWS コンポーネントで構成されている
- 制御プレーン全体が NLB で覆われている


###EKS Networking - VPC
ネットワークも EKS におけるとても重要な要素です。
次は VPC について紹介していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/b02f5ef5-c861-5c15-259c-f961486cd1cd.png)

EKS における VPC 環境では、以下の構成を用意しておく必要があります。

- プライベートサブネット：作成したワーカーノードを収容。CIDR は大きめに作成
- パブリックサブネット：インターネットに向いているロードバランサを配置
- VPC は、ノードが制御プレーンと接続可能にするためにも、DNS ホスト名と DNS Resolution を必ず用意しておく必要があります。

###Security Group 
次は、セキュリティグループについてです。
制御プレーンの SG、ワーカーノードの SG は、それぞれ以下の図の様に設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/8cfdfab6-a290-b47c-f648-de819a9bdf43.png)


設定した SG のインバウンド・アウトバウンドを図に興したものが以下となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/db996510-4044-3065-8691-af9da14a6fb1.png)


###EKS Pod Networking
EKS ポッドネットワーキングについて紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/04144bad-e914-8617-1f62-fbf7a7fa7142.png)
- Amazon VPC CNI プラグイン：それぞれのポッドがVPC内より1つのIPアドレス（ENI）を取得します
- ポッドはEKS クラスターの内外で、同じ IP アドレスを保有することとなります
- サブネットの制限について：
 - CIDR / 24 は254 IP しか用意できないため、沢山のポッドを実行するには足りない
 - CIDR / 18 は16,384 IP も用意できるため、こちらの方がおすすめ
- EC2 の制限：
 - EC2 インスタンスは限定された ENI/IP アドレスしか保有できない 

### IAM & RBAC Integration in EKS
Kubernetes における IAM と RBAC の統合について紹介していきます。
この2つを合わせて使用することで、特定の IAM ユーザのみ、特定の環境でしか Kubernetes を利用することができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/e6639a23-ed91-9875-d538-ee25bdcfd1a9.png)
具体的な流れは以下となります。

- Kubectl に対して AWS 情報を送信
- kubectl が AWS 情報を IAMサービスと照会して情報を確認
- IAM 情報で問題が無ければ、 RBAC で確認をし、IAM ポリシーに基づいた操作権限を認可

###Load Balancers in EKS
最後に、ロードバランサについてです。EKS では、以下の3つのロードバランサに対応しております。

- Classic Load Balancer
- Network Load Balancer 
- Application Load Balancer

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/b13fc22e-b9d8-47b9-74d1-946b1c1d284c.png)
EKS はデフォルトで Classic Load Balancer を作成します。指定があった場合は、Network Load balancer を作成します。
ロードバランサの構成については、マニフェストに注釈をつけることでコントロールが可能です。
下記の URL から、Kubernetes で使用する AWS のロードバランサに関する情報を閲覧できます。

- URL：https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/0d0bda27-a9be-4927-9c36-16950b64c6c7.png)
ALB Ingress は、EKS team によってサポートされています。ターゲットグループの IP や、インスタンスモードなどをサポートします。
オープンソースの URL は下記です。

- URL：https://github.com/kubernetes-sigs/aws-alb-ingress-controller

##おわりに
EKS 周りの詳細についての紹介は以上となります。
次回より、Kubernetes Dashboard のデプロイの仕方について紹介してまいります