View a markdown version of this page

Amazon EKS Hybrid Nodes 게이트웨이 문제 해결 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

Amazon EKS Hybrid Nodes 게이트웨이 문제 해결

이 페이지에서는 Amazon EKS Hybrid Nodes 게이트웨이와 관련된 일반적인 문제를 진단하고 해결하기 위한 지침을 제공합니다. 각 섹션에서는 증상, 가능한 원인, 진단 단계 및 해결 방법을 설명합니다. 작업에 대한 자세한 내용은 Amazon EKS Hybrid Nodes 게이트웨이 작업 섹션을 참조하세요.

VPC에서 도달할 수 없는 하이브리드 노드의 포드

하이브리드 노드에서 실행되는 포드에 EC2 인스턴스, 로드 밸런서 또는 Kubernetes 컨트롤 플레인과 같은 VPC의 리소스에서 도달할 수 없습니다.

가능한 원인:

  • VPC 라우팅 테이블 항목이 누락되었거나 잘못된 ENI를 가리킵니다.

  • 게이트웨이 리더 포드가 실행 중이 아니거나 설정을 완료하지 않았습니다.

  • Cilium VTEP가 하이브리드 노드에서 활성화되거나 구성되지 않았습니다.

  • 소스/대상 확인이 게이트웨이 EC2 인스턴스에서 활성화됩니다.

진단 단계:

  1. VPC 라우팅 테이블 항목을 확인하세요. 하이브리드 포드 CIDR에 대한 경로가 있으며, 활성 게이트웨이 인스턴스의 프라이머리 ENI를 가리키는지 확인하세요.

    aws ec2 describe-route-tables \ --route-table-ids ROUTE_TABLE_ID \ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"

    경로가 누락된 경우 게이트웨이 로그에서 라우팅 테이블 오류가 있는지 확인하세요. 경로가 잘못된 ENI를 가리키는 경우 장애 조치가 성공적으로 완료되지 않았을 수 있습니다.

  2. 게이트웨이 포드 상태 및 리더 선정을 확인하세요. 두 게이트웨이 포드가 실행 중이고 한 게이트웨이 포드가 리더 리스를 보유하는지 확인하세요.

    kubectl get pods -n eks-hybrid-nodes-gateway kubectl get lease -n eks-hybrid-nodes-gateway

    리스를 보유한 포드가 없는 경우 리더 선정 관련 문제 섹션을 참조하세요.

  3. 하이브리드 노드에서 Cilium VTEP 구성을 확인하세요. CiliumVTEPConfig 리소스가 있고, 리더의 노드 IP가 포함되어 있는지 확인하세요.

    kubectl get ciliumvtepconfig hybrid-gateway -o yaml

    spec.endpoints[0].tunnelEndpoint는 리더 게이트웨이 노드의 IP 주소와 일치해야 합니다. 리소스가 누락되었거나 오래된 IP를 보유하는 경우 게이트웨이에서 리더 설정이 완료되지 않았을 수 있습니다.

  4. 소스/대상 확인을 확인하세요. 게이트웨이 EC2 인스턴스에서 소스/대상 확인이 비활성화되어 있는지 확인하세요.

    aws ec2 describe-instance-attribute \ --instance-id GATEWAY_INSTANCE_ID \ --attribute sourceDestCheck

    sourceDestChecktrue이면 비활성화하세요. EKS Hybrid Nodes 게이트웨이 시작하기을(를) 참조하세요.

하이브리드 노드에 대한 웹후크 직접 호출 실패

Kubernetes API 서버가 하이브리드 노드에서 실행되는 웹후크 엔드포인트에 도달할 수 없습니다. 웹후크 승인 요청에서 제한 시간을 초과하거나 연결 오류를 반환합니다.

가능한 원인:

  • 게이트웨이가 컨트롤 플레인에서 하이브리드 포드로 트래픽을 라우팅하지 않습니다.

  • CiliumVTEPConfig 리소스가 누락되었거나 오래된 엔드포인트 IP를 보유하고 있습니다.

진단 단계:

  1. 컨트롤 플레인이 게이트웨이 노드 IP에 도달할 수 있는지 확인하세요. 컨트롤 플레인은 트래픽을 VPC 라우팅 테이블로 전송하고, 여기서 이를 게이트웨이의 ENI로 전달합니다. VPC에서 도달할 수 없는 하이브리드 노드의 포드의 단계를 사용하여 VPC 라우팅 테이블 항목이 올바른지 확인하세요.

  2. CiliumVTEPConfig 리소스를 확인하세요. 리소스가 존재하고 tunnelEndpoint가 현재 리더의 노드 IP와 일치하는지 확인하세요.

    kubectl get ciliumvtepconfig hybrid-gateway -o yaml

    터널 엔드포인트가 오래된 경우(이전 리더를 가리킴) 게이트웨이에서 리더 설정 시퀀스를 완료하지 않았을 수 있습니다. CiliumVTEPConfig 업서트 중에 게이트웨이 로그에 오류가 있는지 확인하세요.

VPC 라우팅 테이블 업데이트 실패

게이트웨이 로그에는 VPC 라우팅 테이블 작업과 관련된 오류가 표시되며, 하이브리드 포드 CIDR에 대한 경로는 생성되거나 업데이트되지 않습니다.

가능한 원인:

  • 게이트웨이의 IAM 역할에 필요한 EC2 권한이 없습니다.

  • 구성의 라우팅 테이블 ID가 잘못되었거나 라우팅 테이블이 존재하지 않습니다.

  • 게이트웨이가 EC2 API 엔드포인트에 도달할 수 없습니다.

진단 단계:

  1. IAM 권한을 확인하세요. 게이트웨이에는 다음 IAM 작업이 필요합니다.

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      게이트웨이 노드의 인스턴스 프로파일 또는 Pod Identity 구성에 연결된 IAM 역할을 확인하세요.

  2. 구성에서 라우팅 테이블 ID를 확인하세요. 게이트웨이 배포에서 ROUTE_TABLE_IDS 환경 변수에 유효한 라우팅 테이블 ID가 포함되어 있는지 확인하세요.

    kubectl get deployment eks-hybrid-nodes-gateway -n eks-hybrid-nodes-gateway -o jsonpath='{.spec.template.spec.containers[0].env}' | jq .

    VPC에 라우팅 테이블 ID가 있는지 확인하세요.

    aws ec2 describe-route-tables --route-table-ids ROUTE_TABLE_ID
  3. 게이트웨이 로그에서 라우팅 테이블 오류를 확인하세요. 라우팅 테이블 작업과 관련된 오류 메시지를 찾아보세요.

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD | grep -i "route table"

    일반적인 오류 메시지로 다음이 포함됩니다.

    • Failed to verify route table access - 게이트웨이가 라우팅 테이블을 설명할 수 없습니다. IAM 권한 및 라우팅 테이블 ID를 확인하세요.

    • Failed to update route tables - 게이트웨이에서 경로를 생성하거나 대체할 수 없습니다. IAM 권한을 확인하세요.

    • failed to access route table - 라우팅 테이블 ID가 잘못되었거나 IAM 역할에 ec2:DescribeRouteTables가 없습니다.

게이트웨이 포드가 시작되지 않거나 비정상 상태임

게이트웨이 포드가 CrashLoopBackOff, Error 또는 Pending 상태이거나 상태 엔드포인트에서 오류를 반환합니다.

가능한 원인:

  • 필수 환경 변수(VPC_CIDR, POD_CIDRS, ROUTE_TABLE_IDS)가 설정되지 않았습니다.

  • IP 전달이 게이트웨이 노드에서 활성화되지 않았습니다.

  • 노드 레이블 또는 비선호도 제약 조건으로 예약되지 않습니다.

진단 단계:

  1. 포드 로그를 확인하세요. 장애가 발생한 포드의 로그를 보고 오류를 식별하세요.

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD
  2. 필수 환경 변수를 확인하세요. 게이트웨이에 NODE_IP, VPC_CIDRPOD_CIDRS가 필요합니다. 누락된 항목이 있으면 게이트웨이가 즉시 종료됩니다. 포드 사양을 확인하세요.

    kubectl get pod -n eks-hybrid-nodes-gateway LEADER_POD -o jsonpath='{.spec.containers[0].env}' | jq .
    • NODE_IP는 포드 사양의 status.hostIP에서 자동으로 설정됩니다. 비어 있는 경우 포드가 아직 노드에서 예약되지 않았을 수 있습니다.

    • VPC_CIDRPOD_CIDRS는 헬름 값에서 가져옵니다. 올바르게 설정되었는지 확인하세요.

  3. IP 전달을 확인하세요. 게이트웨이는 시작 시 IP 전달이 활성화되었는지 확인하고 활성화되지 않은 경우 종료됩니다. 포드 로그에서 오류 메시지 IP forwarding is not enabled를 찾아보세요. 노드에서 IP 전달을 활성화하세요.

    # Check current setting cat /proc/sys/net/ipv4/ip_forward # Enable if not set sudo sysctl -w net.ipv4.ip_forward=1

    영구 설정의 경우 kubelet을 통해 IP 전달을 구성하거나 net.ipv4.ip_forward=1/etc/sysctl.d/에 추가하세요.

  4. 노드 레이블 및 예약 제약 조건을 확인하세요. 게이트웨이 포드에는 hybrid-gateway-node=true 레이블이 있는 노드가 필요합니다. 포드 비선호도는 각 포드가 별도의 노드에서 실행되도록 보장합니다. 포드가 Pending인 경우 예약 문제가 있는지 확인하세요.

    kubectl describe pod -n eks-hybrid-nodes-gateway LEADER_POD

    노드 부족, 레이블 누락 또는 비선호도 충돌을 나타내는 이벤트가 있는지 찾아보세요.

리더 선정 관련 문제

게이트웨이 포드가 실행 중이지만 리더 리스를 획득하는 포드가 없거나 리더십 전환이 빈번하게 발생합니다.

가능한 원인:

  • 객체 리스에 대한 RBAC 권한이 누락되었습니다.

  • 게이트웨이 포드 및 Kubernetes API 서버 간 네트워크 연결은 신뢰할 수 없습니다.

  • 리더 선정 파라미터가 잘못 구성되었습니다.

진단 단계:

  1. 리스 객체를 확인하세요. 리스가 존재하는지 확인하고 현재 보유자를 검사하세요.

    kubectl get lease -n eks-hybrid-nodes-gateway hybrid-gateway-leader -o yaml

    spec.holderIdentity 필드는 현재 리더를 표시합니다. spec.renewTime은 리스가 마지막으로 갱신된 시점을 보여줍니다. renewTime이 오래된 경우 리더에서 API 서버에 대한 연결이 끊어졌을 수 있습니다.

  2. RBAC 권한을 확인하세요. 게이트웨이 서비스 계정에는 게이트웨이 네임스페이스에서 리스 객체를 가져오고 생성하며 업데이트하기 위한 권한이 필요합니다. 역할 및 RoleBinding을 확인하세요.

    kubectl get role -n eks-hybrid-nodes-gateway kubectl get rolebinding -n eks-hybrid-nodes-gateway

    역할에는 coordination.k8s.io API 그룹의 leases 리소스에 대한 get, createupdate 동사가 포함되어야 합니다.

  3. 포드 로그에서 리스 오류를 확인하세요. 포드 로그에서 리더 선정 오류를 찾아보세요.

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD | grep -i "leader\|lease"

    일반적인 문제:

    • Failed to acquire lease - 포드에서 리스 객체를 생성하거나 업데이트할 수 없습니다. RBAC 권한을 확인하세요.

    • Leadership ended 메시지 뒤에 Leader setup complete가 빈번하게 나오는 경우 - 리더가 리스를 상실한 후 다시 획득하는 것입니다. 포드 및 API 서버 간 네트워크 불안정성을 나타낼 수 있습니다. --leader-election-lease-duration을 늘리는 방법을 고려합니다.

  4. 리더 선정 파라미터를 확인하세요. 구성된 값을 확인하세요.

    kubectl get deployment eks-hybrid-nodes-gateway -n eks-hybrid-nodes-gateway -o jsonpath='{.spec.template.spec.containers[0].args}'

    --leader-election-renew-deadline--leader-election-lease-duration보다 작아야 합니다. 갱신 기한이 리스 기간을 초과하는 경우 리더는 갱신하기 전에 리스를 잃습니다. 자세한 내용은 리더 선정 조정 섹션을 참조하세요.

일반적인 오류 메시지

다음 표에는 게이트웨이 포드 로그에 표시될 수 있는 오류 메시지와 관련 해결 방법이 나와 있습니다.

오류 메시지 원인 해결 방법

IP forwarding is not enabled

커널 파라미터 net.ipv4.ip_forward가 게이트웨이 노드에서 1로 설정되지 않았습니다.

kubelet 구성을 통해 또는 sysctl -w net.ipv4.ip_forward=1을 실행하여 IP 전달을 활성화하세요.

Failed to setup VXLAN

게이트웨이에서 VXLAN 네트워크 인터페이스를 생성할 수 없습니다. 일반적으로 포드에 NET_ADMIN 기능이 없는 경우에 발생합니다.

배포 사양에서 securityContext.capabilities.addNET_ADMIN이 포함되어 있는지 확인하세요. 헬름 차트가 올바르게 배포되었는지 확인하세요.

Failed to verify route table access

게이트웨이에서 시작 시 하나 이상의 VPC 라우팅 테이블을 설명할 수 없습니다.

IAM 역할에 ec2:DescribeRouteTables 권한이 있고 구성의 라우팅 테이블 ID가 올바른지 확인하세요.

Failed to update route tables

게이트웨이가 VPC 라우팅 테이블에서 경로를 생성하거나 대체할 수 없습니다.

IAM 역할에 ec2:CreateRouteec2:ReplaceRoute 권한이 있는지 확인하세요.

Failed to create route table manager

게이트웨이에서 AWS EC2 클라이언트를 초기화하거나 인스턴스의 프라이머리 ENI를 검색할 수 없습니다.

IAM 역할에 ec2:DescribeInstances 권한이 있고 인스턴스 메타데이터 서비스(IMDS)에 액세스할 수 있는지 확인하세요.

NODE_IP is required

NODE_IP 환경 변수 또는 --node-ip 플래그가 설정되지 않았습니다.

포드 사양에서 fieldRef를 사용하여 status.hostIP에서 NODE_IP를 설정하는지 확인하세요. 헬름 차트가 올바르게 배포되었는지 확인하세요.

Invalid NODE_IP

NODE_IP에 제공된 값이 유효한 IP 주소가 아닙니다.

포드 사양에서 NODE_IP 환경 변수 값을 확인하세요.

pod-cidrs and vpc-cidr are required

POD_CIDRS 또는 VPC_CIDR 환경 변수가 비어 있습니다.

설치 중에 podCIDRsvpcCIDR 헬름 값을 설정하세요.

No valid route table IDs provided

ROUTE_TABLE_IDS 값이 설정되었지만 구문 분석 후 유효한 라우팅 테이블 ID를 포함하지 않습니다.

routeTableIDs 헬름 값에서 형식 지정 오류가 있는지 확인하세요. 라우팅 테이블 ID는 쉼표로 구분해야 합니다(예: rtb-abc123,rtb-def456).

Failed to auto-detect AWS region

게이트웨이가 EC2 인스턴스 메타데이터에서 AWS 리전을 검색할 수 없습니다.

인스턴스 메타데이터 서비스(IMDS)에 액세스할 수 있는지 확인하세요. 또는 --aws-region 플래그 또는 AWS_REGION 환경 변수를 명시적으로 설정하세요.

Failed to auto-detect AWS instance ID

게이트웨이가 EC2 인스턴스 메타데이터에서 인스턴스 ID를 검색할 수 없습니다.

인스턴스 메타데이터 서비스(IMDS)에 액세스할 수 있는지 확인하세요. 또는 --aws-instance-id 플래그 또는 AWS_INSTANCE_ID 환경 변수를 명시적으로 설정하세요.

CiliumNode has no internal IP

하이브리드 노드의 CiliumNode 객체에서 해당 사양에 내부 IP 주소가 없습니다.

하이브리드 노드가 올바르게 등록되었고 Cilium 에이전트가 실행 중인지 확인하세요. 노드의 CiliumNode 리소스를 확인하세요.

CiliumNode <name> has no pod CIDRs allocated

하이브리드 노드의 CiliumNode 객체에 Cilium IPAM에서 할당한 포드 CIDR이 없습니다.

Cilium IPAM이 하이브리드 노드에서 올바르게 구성되었는지 확인하세요. CiliumNode 리소스에서 노드의 IPAM 상태를 확인하세요.

Failed to upsert CiliumVTEPConfig

게이트웨이에서 CiliumVTEPConfig 사용자 지정 리소스를 생성하거나 업데이트할 수 없습니다.

CRD가 클러스터에 설치되어 있고 게이트웨이 서비스 계정에 CiliumVTEPConfig 리소스를 관리할 권한이 있는지 확인하세요.

Unable to create manager

컨트롤러-런타임 관리자가 초기화되지 않았습니다.

포드 로그에서 추가 컨텍스트를 확인하세요. 일반적인 원인으로 잘못된 kubeconfig 또는 Kubernetes API 서버에 도달할 수 없는 경우가 포함됩니다.

Failed to add gateway setup

리더 선정 실행 가능 항목을 컨트롤러 관리자에 등록할 수 없습니다.

일반적으로 내부 오류입니다. 전체 포드 로그에서 추가 컨텍스트를 확인하고 GitHub 리포지토리에 문제를 보고하세요.

Unable to create Node controller

CiliumNode 조정자를 컨트롤러 관리자에 등록할 수 없습니다.

포드 로그에서 추가 컨텍스트를 확인하세요. CiliumNode CRD가 클러스터에 설치되어 있는지 확인하세요.

Problem running manager

컨트롤러 관리자가 예기치 않게 종료되었습니다.

포드 로그에서 기본 오류를 확인하세요. 일반적인 원인으로 Kubernetes API 서버에 대한 연결 끊어짐 또는 지표나 상태 프로브 바인드 주소의 포트 충돌이 포함됩니다.

failed to access route table <id>

게이트웨이에서 시작 확인 검사 중에 특정 VPC 라우팅 테이블을 설명할 수 없습니다.

IAM 역할에 ec2:DescribeRouteTables 권한이 있고 라우팅 테이블 ID가 올바른지 확인하세요. 라우팅 테이블이 게이트웨이 인스턴스와 같은 리전에 있어야 합니다.