EKSクラスターの作成

EKSクラスターの作成:


ハマったこと

コンソールでクラスターを作成した 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 
デプロイ(VPCとサブネットはDefaultで指定するかコマンドで渡してください)

$ aws cloudformation deploy --stack-name <スタック名> --template eks-cluster.yaml --capabilities CAPABILITY_IAM 
IAMユーザでKubernetesにアクセスするプラグインをインストールする。

$ 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 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)