スキップしてコンテンツを表示

Amazon EKS クラスターに接続できない原因を把握したいです。

所要時間3分
0

作成した Amazon Elastic Kubernetes Service (Amazon EKS) クラスターに接続できません。

簡単な説明

次のいずれかの要因で Amazon EKS クラスターに接続できない可能性があります。

  • クラスターの kubeconfig ファイルが作成されていない。
  • Amazon EKS API サーバーエンドポイントに接続できない。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

kubeconfig ファイルが作成されていない

Amazon EKS クラスターの作成後、kubectl コマンドラインを使用してクラスターに接続できるようにするために kubeconfig ファイルを構成します。kubeconfig ファイルには、Kubernetes クラスターの設定が含まれています。

使用するオペレーティングシステム (OS) に応じて、kubeconfig ファイルは次の場所に配置されます。

  • Linux または macOS では、$HOME/.kube/config に移動します。
  • Windows では、%USERPROFILE%\.kube\config 荷移動します。

別のファイルの場所を参照するには、次のいずれかの手順を実行します。

  • KUBECONFIG 環境変数が新しい場所を指すように設定します。
  • kubectl コマンドを実行してカスタムファイルパスを指定する際、--kubeconfig フラグを付与します。

既に kubeconfig ファイルがデフォルトの場所に存在する場合は、Amazon EKS は新しい設定を既存のファイルとマージします。kubectl config コマンドを使用すると、クラスターのコンテキストを管理できます。詳細については、Kubernetes のウェブサイトで kubectl config を参照してください。

Amazon EKS API サーバーエンドポイントに接続できない

この問題をトラブルシューティングするには、次の手順を実行します。

  1. Amazon EKS API サーバーの URL に接続できるかどうかを確認するには、次のコマンドを実行し、高い詳細度を指定します。

    kubectl get svc --v=9

    コマンドの出力には、接続が使用する API サーバーの URL を含む、詳細な接続情報が表示されます。[HTTP トレース: DNS ルックアップ] に表示される IP アドレスを確認します。
    出力例:

    I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/configI0110 16:43:36.936844   48173 round_trippers.go:466] curl -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500'
    I0110 16:43:37.362185   48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }]
    I0110 16:43:37.402538   48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed
    I0110 16:43:37.500276   48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds
    I0110 16:43:37.500302   48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms
    I0110 16:43:37.500308   48173 round_trippers.go:577] Response Headers:
    I0110 16:43:37.500316   48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564
    I0110 16:43:37.500323   48173 round_trippers.go:580] Cache-Control: no-cache, private
    I0110 16:43:37.500329   48173 round_trippers.go:580] Content-Type: application/json
    I0110 16:43:37.500334   48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f
    I0110 16:43:37.500340   48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c
    I0110 16:43:37.500345   48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
  2. Amazon EKS API サーバーにパブリックアクセスできるかどうかを確認するには、次の AWS CLI コマンド describe-cluster を実行します。

    aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig

    注: cluster_name をクラスター名に、example_region を使用する AWS リージョンに置き換えてください。
    出力例:

    {    "subnetIds": [
            "subnet-abc1",
            "subnet-abc2",
            "subnet-abc3",
            "subnet-abc4",
            "subnet-abc5",
            "subnet-abc6"
        ],
        "securityGroupIds": [
           "sg-abc7"
        ],
        "clusterSecurityGroupId": "sg-abc7",
        "vpcId": "vpc-abc9",
        "endpointPublicAccess": true,
        "endpointPrivateAccess": false,
        "publicAccessCidrs": [
            "0.0.0.0/0"
        ]
    }

    パブリックアクセスを許可するには、endpointPublicAccesstrue に設定する必要があります。プライベートアクセスを維持する場合は、endpointPublicAccessfalse であることを確認してください。endpointPublicAccessfalse の場合は、ステップ 9 に進みます。endpointPublicAccesstrue の場合は、セキュリティの観点から、endpointPublicAccess を特定の IP アドレス範囲に限定することが推奨されます。ステップ 3 ~ 8 を実行し、許可する IP アドレスを許可リスト publicAccessCidrs に追加します。

  3. Amazon EKS コンソールを開きます。

  4. [クラスター] を選択し、更新するクラスターを選択します。

  5. [ネットワーク] タブを選択し、[ネットワークの管理] を選択します。

  6. [パブリック] を選択します。

  7. 許可リストに追加するパブリック CIDR 範囲を [詳細設定][CIDR ブロック] に入力します。
    重要: プライベートサブネットのワーカーノードがインターネットへのアクセスに使用する NAT ゲートウェイの IP アドレスを入力します。すべての NAT デバイスネットワークコンポーネントの IP アドレスも入力する必要があります。

  8. [変更を保存] を選択します。

  9. クラスターの API サーバーをプライベート専用モードで構成した場合は、kubectl リクエストは、クラスターのネットワークから送信する必要があります。kubectl リクエストが Amazon Virtual Private Cloud (Amazon VPC) 外部から行われた場合、get svc コマンドを実行すると、次のタイムアウトエラーが発生します。

    $ kubectl get svc --v=9I0110 17:15:58.889798   50514 loader.go:373] Config loaded from file:  /Users/example-user/.kube/config
    I0110 17:15:58.896715   50514 round_trippers.go:466] curl -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500'
    I0110 17:15:59.374499   50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }]
    I0110 17:16:14.285027   50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout
    I0110 17:16:29.191768   50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout
    I0110 17:16:29.196959   50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500  in 30300 milliseconds
    I0110 17:16:29.197724   50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms
    I0110 17:16:29.197768   50514 round_trippers.go:577] Response Headers:
    I0110 17:16:29.199254   50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout
    Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
  10. クラスターのセキュリティグループを更新し、送信元の IP アドレスまたは CIDR 範囲を許可リストに追加します。この手順により、kubectl クライアントはクラスター VPC 内から Amazon EKS API サーバーエンドポイントに接続できます。

関連情報

Amazon EKS クラスターとノードに関する問題のトラブルシューティング

Amazon EKS API サーバーへの接続時に発生するエラー を解決する方法を教えてください"You must be logged in to the server (Unauthorized)"

Amazon EKS ワーカーノードのクラスターネットワークについて

Amazon EKS クラスター内の特定の IP アドレスへの API アクセスをロックダウンする方法を教えてください

コメントはありません

関連するコンテンツ