EKSクラスターの作成
EKSクラスターの作成:
コンソールでクラスターを作成した IAM ユーザと、手元のkubectlコマンドを実行したIAM ユーザが異なることでチュートリアルAmazon EKS の使用開始が成功しなかった。
EKSクラスターを作成したIAM ユーザが Kubernetes RBAC認証テーブルに追加されるので、はじめはクラスターを作成するIAMユーザでkubectlコマンドを実行する必要があります。
コンソールでクラスターを作成したIAMユーザーと、kubectlコマンドを実行するIAMユーザが異なると、次のようなエラーが出た。(-v6とかつけるとapiサーバーにから403が返ってくることを確認可能)
ちゃんと上記のハマりポイントはドキュメントの重要に記述されていた。
Amazon EKS クラスターの作成
kubectlするIAMユーザと同じアクセスキーでクラスターを作成すればいいので、CloudFormationを用いてクラスターを作成する。
次のテンプレートを使用するときはCidirではなく、ワーカーノードのSecurityGroupを指定して推奨設定にした方が良い。
デプロイ(VPCとサブネットはDefaultで指定するかコマンドで渡してください)
IAMユーザでKubernetesにアクセスするプラグインをインストールする。
作成したクラスターのコンテキストを
ハマったこと
コンソールでクラスターを作成した IAM ユーザと、手元のkubectlコマンドを実行したIAM ユーザが異なることでチュートリアルAmazon EKS の使用開始が成功しなかった。EKSクラスターを作成したIAM ユーザが Kubernetes RBAC認証テーブルに追加されるので、はじめはクラスターを作成するIAMユーザでkubectlコマンドを実行する必要があります。
発生したエラー
コンソールでクラスターを作成したIAMユーザーと、kubectlコマンドを実行するIAMユーザが異なると、次のようなエラーが出た。(-v6とかつけるとapiサーバーにから403が返ってくることを確認可能)$ kubectl get svc error: the server doesn't have a resource type "svc"
ドキュメントに記載あり
ちゃんと上記のハマりポイントはドキュメントの重要に記述されていた。Amazon EKS クラスターの作成
重要 Amazon EKS クラスターが作成されたら、クラスターを作成する IAM エンティティ (ユーザーまたはロール) は、管理者 (system:master アクセス許可が付与されている) として Kubernetes RBAC 認証テーブルに追加されます。 最初は、その IAM ユーザーだけが kubectl を使用して Kubernetes API サーバーを呼び出すことができます。 詳細については、「クラスターのユーザーまたは IAM ロールの管理」を参照してください。 また、AWS IAM Authenticator for Kubernetes では、AWS SDK for Go を使用して、Amazon EKS クラスターに対して認証を行います。コンソールを使用してクラスターを作成する場合は、クラスター上で kubectl コマンドを実行する際、同じ IAM ユーザー認証情報が AWS SDK 認証情報チェーンにあることを確認する必要があります。
解決策
kubectlするIAMユーザと同じアクセスキーでクラスターを作成すればいいので、CloudFormationを用いてクラスターを作成する。次のテンプレートを使用するときはCidirではなく、ワーカーノードのSecurityGroupを指定して推奨設定にした方が良い。
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
VpcId:
Type: AWS::EC2::VPC::Id
SubnetIds:
Type: List<AWS::EC2::Subnet::Id>
Resources:
EksCluster:
Type: "AWS::EKS::Cluster"
Properties:
Name: !Sub ${AWS::StackName}
ResourcesVpcConfig:
SecurityGroupIds:
- !Ref EksClusterSecurityGroup
SubnetIds: !Ref SubnetIds
RoleArn: !GetAtt EksServiceRole.Arn
EksServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- eks.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
- arn:aws:iam::aws:policy/AmazonEKSServicePolicy
EksClusterSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: "EKS Cluster Security Group"
VpcId: !Ref VpcId
EksIngress01:
Type: AWS::EC2::SecurityGroupIngress
Properties:
Description: "From Worker Node Security Group"
GroupId: !Ref EksClusterSecurityGroup
IpProtocol: tcp
CidrIp: 0.0.0.0/0
FromPort: 443
ToPort: 443
EksEgress01:
Type: AWS::EC2::SecurityGroupIngress
Properties:
Description: "To Worker Node Security Group"
GroupId: !Ref EksClusterSecurityGroup
IpProtocol: tcp
CidrIp: 0.0.0.0/0
FromPort: 1025
ToPort: 65535
$ aws cloudformation deploy --stack-name <スタック名> --template eks-cluster.yaml --capabilities CAPABILITY_IAM
$ curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/darwin/amd64/aws-iam-authenticator $ chmod +x aws-iam-authenticator $ mv aws-iam-authenticator /usr/local/bin $ source ~/.zshrc
~/.kube/configに設定する。$ aws eks update-kubeconfig --name <スタック名> $ kubectl get svc kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 17m
コメント
コメントを投稿