プライベートクラスター
ここでは、AWS クラウド上にデプロイされているが、アウトバウンドのインターネットアクセスを持っていないAmazon EKS クラスタをデプロイする方法について学習します。
VPC エンドポイント
クラスターの VPC サブネットには、Pod がアクセスする必要のあるすべての AWS のサービス に対して VPC エンドポイントが必要です。
サービス | エンドポイント |
---|---|
Amazon EC2 | com.amazonaws.region-code.ec2 |
Amazon Elastic Container Registry (コンテナイメージの取得用) | com.amazonaws.region-code.ecr.api、com.amazonaws.region-code.ecr.dkr、および com.amazonaws.region-code.s3 |
Application Load Balancerおよび ネットワークロードバランサー | com.amazonaws.region-code.elasticloadbalancing |
Amazon CloudWatch Logs | com.amazonaws.region-code.logs |
AWS Security Token Service (サービスアカウントに IAM ロールを使用している場合に必要) | com.amazonaws.region-code.sts |
パターン A
CloudFormation で VPC エンドポイントを先に作成し、privateAccess を有効にする
vpc:
clusterEndpoints:
publicAccess: <true|false>
privateAccess: <true|false>
1. VPC エンドポイントを作成する(Cloudformation)
2. ClusterConfig で、clusterEndpoints.privateAccess: true にする
ここでの設定は、
- エンドポイントのプラーベートアクセス: 有効
- クラスターの VPC 内から送信される Kubernetes API リクエストは、VPC エンドポイントを使用
- エンドポイントのパブリックアクセス: 有効(アドレス指定有り)
- インターネットからパブリックエンドポイントと通信するためのアドレスを指定
としています。
その他の組み合わせについては以下ドキュメントを参照。
ClusterConfig.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: cluster-demo
region: ap-northeast-1
version: "1.28"
iam:
withOIDC: true
fargateProfiles:
- name: fargate-default
selectors:
- namespace: default
- namespace: kube-system
vpc:
subnets:
private:
us-east-1a:
id: "subnet-XXXXXXXXXXXXXXXXX"
us-east-1b:
id: "subnet-YYYYYYYYYYYYYYYYY"
us-east-1c:
id: "subnet-ZZZZZZZZZZZZZZZZZ"
clusterEndpoints:
privateAccess: true
publicAccess: true
publicAccessCIDRs: ["1.1.1.1/32", "2.2.2.0/24"]
パターン B
privateCluster を有効にすることで、完全プライベートなクラスターを作成する。
この時、冒頭で説明させていただいた、VPC エンドポイントが作成される。
privateCluster:
enabled: true
1. ClusterConfig で、privateCluster.enabled: true にする
ClusterConfig.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: cluster-demo
region: ap-northeast-1
version: "1.28"
iam:
withOIDC: true
fargateProfiles:
- name: fargate-default
selectors:
- namespace: default
- namespace: kube-system
privateCluster:
enabled: true
vpc:
subnets:
private:
ap-northeast-1a:
id: "subnet-XXXXXXXXXXXXXXXXX"
ap-northeast-1c:
id: "subnet-YYYYYYYYYYYYYYYYY"
ap-northeast-1d:
id: "subnet-ZZZZZZZZZZZZZZZZZ"