【해결 방법】 Amazon EKS에서`kubectl get svc`명령 실패

7583 단어 eksAWS

문제



Amazon EKS에서 클러스터를 생성한 후 kubectl get svc 명령을 실행해도 실패함
# Amazon EKSクラスターのkubeconfigを取得→成功
$ aws eks update-kubeconfig --name <cluster_name>
Added new context arn:aws:eks:us-west-2:xxxxx:cluster/<cluster_name> to /Users/<username>/.kube/config

# 失敗するコマンド
$ kubectl get svc
error: the server doesn't have a resource type "svc"

원인



EKS 클러스터를 생성한 IAM 사용자와 AWS CLI의 IAM 사용자가 다릅니다.

@ngyuki 님에게 정보를 제공해 주셨습니다 🙇‍♂️

참고 : Amazon EKS 시작 - Amazon EKS
콘솔을 사용하여 클러스터를 생성하는 경우 클러스터에서 kubectl 명령을 실행할 때 동일한 IAM 사용자 자격 증명이 AWS SDK 자격 증명 체인에 있는지 확인해야 합니다.

해결 방법



패턴 1. AWS CLI의 IAM 사용자를 EKS 클러스터를 생성한 사용자로 전환
패턴 2. AWS CLI의 IAM 사용자로 EKS 클러스터 재작성( CLI에서 EKS 클러스터를 다시 만드는 방법은 여기 )

보충
루트 계정에서의 작업은 더 이상 사용되지 않으므로(참고 ) 루트 계정으로 로그인한 콘솔에서 EKS 클러스터를 만든 경우 EKS 클러스터를 삭제하고 다른 사용자가 EKS 클러스터를 다시 작성하는 것이 좋습니다. 보인다


다음은 원인을 알 수 없을 때의 해결 방법입니다.



여기보다 아래의 내용은 원인이 불명했을 때에 투고한 해결 방법입니다.

조사



해외 포럼이나 블로그 등에서 소개된 해결 방법
더 똑똑한 해결책이 있으면 알려주세요 m (_ _) m


해결 방법
결과


1. AWS CLI에서 EKS 클러스터 생성
○: 해결할 수 있었다

2. AWS CLI에 IAM 설정
×: 해결되지 않았다

3. kubectl 버전 업데이트
×: 해결되지 않았다

4. aws-iam-authenticator 설정
×: 해결되지 않았다


해결된 단계



1. AWS CLI에서 EKS 클러스터 생성



EKS 클러스터를 콘솔에서 생성하면 이 문제가 발생했지만, AWS CLI에서 EKS 클러스터를 생성하면 해결했다는 정보를 보면서 실천한 결과 해결할 수 있었다.

보충
CloudFormation에서 만든 클러스터에서도 비슷한 문제가 발생하는 것 같습니다.
코멘트란에서 @ishigero 님으로부터 정보를 제공해 주셨습니다 m(_ _)m

참고 : Amazon EKS 시작 - Amazon EKS

프로시저 1. 기존 클러스터 설정 확인



AWS 콘솔에서 만든 클러스터
  • Role ARN
  • Subnets
  • security groups

  • 메모해 둡니다.



    2단계. AWS CLI에서 클러스터 생성



    참고한 정보를 참조하여 AWS CLI에서 클러스터 생성

    보충--role-arn 에 Role ARN 의 값을 지정한다--resources-vpc-config 에 Subnets,Security groups 값을 지정합니다.
    $ aws eks create-cluster --name <cluster_name> \
       --role-arn xxx \
       --resources-vpc-config \
       subnetIds=subnet-xxx,subnet-xxx,securityGroupIds=sg-xxx
    
    {
        "cluster": {
            "status": "CREATING",
            "name": "<cluster_name>",
            "certificateAuthority": {},
            "roleArn": "xxx",
            "resourcesVpcConfig": {
                "subnetIds": [
                    "subnet-xxx",
                    "subnet-xxx"
                ],
                "vpcId": "vpc-xxx",
                "securityGroupIds": [
                    "sg-xxx"
                ]
            },
            "version": "1.10",
            "arn": "arn:aws:eks:us-west-2:xxx:cluster/<cluster_name>",
            "platformVersion": "eks.2",
            "createdAt": xxx
        }
    }
    

    3단계. 클러스터가 생성되었는지 확인


    $ aws eks describe-cluster --name <cluster_name> --query cluster.status
    "ACTIVE"
    

    4단계. kubectl get svc 명령이 성공했는지 확인


    # 作成したクラスターのkubeconfigを取得
    $ aws eks update-kubeconfig --name <cluster_name>
    Updated context arn:aws:eks:us-west-2:xxx:cluster/<cluster_name> in /Users/<username>/.kube/config
    
    $ kubectl get svc
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   3m
    

    해결할 수 없는 단계



    2. AWS CLI에 IAM 설정



    AWS CLI에 IAM이 설정되어 있지 않으면 본 문제가 발생한다는 정보를 보았지만, AWS CLI에서 Amazon EKS 클러스터의 kubeconfig를 얻을 수 있기 때문에 AWS CLI 설정은 문제 없다고 판단했다.
    aws configure
    AWS Access Key ID [****************WVJA]:
    AWS Secret Access Key [****************LD/m]:
    Default region name [us-west-2]: 
    Default output format [None]:
    
    # Amazon EKSクラスターのkubeconfigを取得→成功
    $ aws eks update-kubeconfig --name <cluster_name>
    Added new context arn:aws:eks:us-west-2:xxxxx:cluster/<cluster_name> to /Users/<username>/.kube/confi
    

    3. kubectl 버전 업데이트



    kubectl 버전이 1.10.xx 이상이 아니면 문제가 발생한다는 정보를 보았지만 버전은 문제 없다고 판단했다.
    $ kubectl version --short --client
    Client Version: v1.10.3
    

    참고 : kubectl 설치 - Amazon EKS

    4. aws-iam-authenticator 설정



    aws-iam-authenticator의 설정이 없으면 문제가 발생한다는 정보를 보았지만 설정은 문제 없다고 판단했다.
    $ aws-iam-authenticator help
    A tool to authenticate to Kubernetes using AWS IAM credentials
    ...
    

    참고 : kubectl을 Amazon EKS용으로 설정합니다. - Amazon EKS

    좋은 웹페이지 즐겨찾기