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
コメント
コメントを投稿