누락된 워커 노드
배경
XYZ 기업은 Kubernetes 버전 1.30을 실행하는 EKS 클러스터를 사용하여 us-west-2 리전에서 새로운 전자상거래 플랫폼을 출시하고 있습니다. 보안 검토 중에 클러스터의 보안 상태에서 여러 취약점이 발견되었으며, 특히 노드 그룹 볼륨 암호화 및 AMI 사용자 지정과 관련된 부분이 문제였습니다.
보안 팀은 다음과 같은 구체적인 요구 사항을 제시했습니다:
- 노드 그룹 볼륨에 대한 암호화 활성화
- 모범 사례 네트워크 구성 설정
- EKS 최적화 AMI 사용 보장
- Kubernetes 감사 활성화
Kubernetes 경험은 있지만 EKS는 처음인 Sam 엔지니어는 이러한 요구 사항을 구현하기 위해 _new_nodegroup_1_이라는 새로운 관리형 노드 그룹을 생성했습니다. 그러나 노드 그룹 생성은 성공적으로 보이지만 새 노드가 클러스터에 조인하지 않고 있습니다. EKS 클러스터 상태, 노드 그룹 구성 및 Kubernetes 이벤트에 대한 초기 점검에서는 명확한 문제가 발견되지 않았습니다.
1단계: 노드 상태 확인
먼저 누락된 노드에 대한 Sam의 관찰을 확인해 보겠습니다:
No resources found
이는 Sam의 관찰을 확인시켜 줍니다 - 새 노드그룹(new_nodegroup_1)에서 노드가 존재하지 않습니다.
2단계: 관리형 노드 그룹 상태 확인
관리형 노드 그룹이 노드 생성을 담당하므로 노드그룹 세부 정보를 살펴보겠습니다. 확인해야 할 주요 사항:
- 노드 그룹 존재 여부
- 상태 및 헬스
- 원하는 크기
EKS 콘솔에서도 이 정보를 확인할 수 있습니다:
EKS 클러스터 Compute 탭 열기3단계: 노드 그룹 헬스 상태 분석
노드그룹은 결국 DEGRADED 상태로 전환되어야 합니다. 세부 상태를 살펴보겠습니다:
Workernodes 워크샵 환경이 10분 이내에 배포된 경우 노드그룹이 ACTIVE 상태로 표시될 수 있습니다. 그렇다면 아래 출력을 참고용으로 확인하세요. 노드그룹은 배포 후 10분 이내에 DEGRADED로 전환되어야 합니다. 4단계로 진행하여 Auto Scaling Group을 직접 확인할 수 있습니다.
{ "nodegroup": {"nodegroupName": "new_nodegroup_1", <<<---
"nodegroupArn": "arn:aws:eks:us-west-2:1234567890:nodegroup/eks-workshop/new_nodegroup_1/abcd1234-1234-abcd-1234-1234abcd1234",
"clusterName": "eks-workshop",
...
"status": "DEGRADED", <<<---
"capacityType": "ON_DEMAND",
"scalingConfig": {"minSize": 0,
"maxSize": 1,
"desiredSize": 1 <<<---
},
...
"resources": {"autoScalingGroups": [
{"name": "eks-new_nodegroup_1-abcd1234-1234-abcd-1234-1234abcd1234"
}
]
},
"health": { <<<---"issues": [
{"code": "AsgInstanceLaunchFailures",
"message": "Instance became unhealthy while waiting for instance to be in InService state. Termination Reason: Client.InvalidKMSKey.InvalidState: The KMS key provided is in an incorrect state",
"resourceIds": [
"eks-new_nodegroup_1-abcd1234-1234-abcd-1234-1234abcd1234"
]
}
]
}
...
}
헬스 상태는 인스턴스 시작을 방해하는 KMS 키 문제를 드러냅니다. 이는 볼륨 암호화를 구현하려는 Sam의 시도와 일치합니다.
4단계: Auto Scaling Group 활동 조사
ASG 활동을 살펴보고 시작 실패를 이해해 보겠습니다:
4.1. 노드그룹의 Auto Scaling Group 이름 확인
아래 명령을 실행하여 노드그룹 Autoscale Group 이름을 NEW_NODEGROUP_1_ASG_NAME으로 캡처합니다.
4.2. AutoScaling 활동 확인
{"Activities": [
{"ActivityId": "1234abcd-1234-abcd-1234-1234abcd1234",
"AutoScalingGroupName": "eks-new_nodegroup_1-abcd1234-1234-abcd-1234-1234abcd1234",
"Description": "Launching a new EC2 instance: i-1234abcd1234abcd1. Status Reason: Instance became unhealthy while waiting for instance to be in InService state. Termination Reason: Client.InvalidKMSKey.InvalidState: The KMS key provided is in an incorrect state",
"Cause": "At 2024-10-04T18:06:36Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.",
...
"StatusCode": "Cancelled",
--->>> "StatusMessage": "Instance became unhealthy while waiting for instance to be in InService state. Termination Reason: Client.InvalidKMSKey.InvalidState: The KMS key provided is in an incorrect state"
},
...
]
}
EKS 콘솔에서도 이 정보를 확인할 수 있습니다. Details 탭 아래의 Autoscaling group 이름을 클릭하여 Autoscaling 활동을 확인하세요.
EKS 클러스터 Nodegroup 탭 열기5단계: Launch Template 구성 검토
암호화 설정을 위해 Launch Template을 확인해 보겠습니다: