ワーカーノードの欠落
背景
株式会社XYZは、Kubernetesバージョン1.30を実行するEKSクラスターを使用して、us-west-2リージョンで新しいeコマースプラットフォームを立ち上げようとしています。セキュリティレビューの際、クラスターのセキュリティ態勢、特にノードグループのボリューム暗号化とAMIカスタマイズに関するいくつかのギャップが特定されました。
セキュリティチームは以下の具体的な要件を提示しました:
- ノードグループボリュームの暗号化の有効化
- ベストプラクティスに基づくネットワーク設定
- EKS最適化AMIの使用
- Kubernetesの監査の有効化
Kubernetes経験はあるものの、EKSに関しては新人のエンジニアSamは、これらの要件を実装するために_new_nodegroup_1_という名前の新しいマネージドノードグループを作成しました。しかし、ノードグループの作成は成功したように見えるものの、新しいノードがクラスターに参加していません。EKSクラスターのステータス、ノードグループの構成、Kubernetesイベントの初期チェックでは、明 らかな問題は見つかりませんでした。
ステップ1:ノードステータスの確認
まず、Samの観測した欠落しているノードについて確認しましょう:
No resources found
これによりSamの観測が確認できました - 新しいノードグループ(new_nodegroup_1)からのノードは存在していません。
ステップ2:マネージドノードグループのステータス確認
マネージドノードグループはノードの作成を担当しているため、ノードグループの詳細を調べてみましょう。確認すべき重要な側面:
- ノードグループの存在
- ステータスと健全性
- 希望するサイズ
EKSコンソールでもこの情報を確認できます:
EKSクラスターコンピューティングタブを開くステップ3:ノードグループの健全性ステータスの分析
ノードグループは最終的に「DEGRADED」(劣化)状態に移行するはずです。詳細なステータスを調べてみましょう:
ワーカーノードワークショップ環境が10分以内にデプロイされた場合、ノードグループが「ACTIVE」状態で表示される可能性があります。その場合は、以下の出力を参考にしてください。ノードグループはデプロイから10分以内に「DEGRADED」に移行するはずです。ステップ4に進んでAutoScalingグループを直接確認することもできます。
{ "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グループのアクティビティの調査
起動失敗を理解するためにASGのアクティビティを調べてみましょう:
4.1. ノードグループのAuto Scalingグループ名の特定
以下のコマンドを実行して、ノードグループのAutoscaleグループ名を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コンソールでも確認できます。「詳細」タブの下にあるAutoscalingグループ名をクリックして、Autoscalingアクティビティを表示します。
EKSクラスターノードグループタブを開くステップ5:起動テンプレートの設定を調べる
暗号化設定を確認するために起動テンプレートを確認しましょう:
5.1. ASGまたはマネージドノードグループから起動テンプレートIDを見つける。この例ではASGを使用します
5.2. 次に暗号化設定を確認できます
注意: 便宜上、起動テンプレートIDを環境変数 $NEW_NODEGROUP_1_LT_ID として追加しました。
{"LaunchTemplateVersions": [
{"LaunchTemplateId": "lt-1234abcd1234abcd1",
...
"DefaultVersion": true,
"LaunchTemplateData": {...
"BlockDeviceMappings": [
{"DeviceName": "/dev/xvda",
"Ebs": {--->>> "Encrypted": true,
--->>> "KmsKeyId": "arn:aws:kms:us-west-2:xxxxxxxxxxxx:key/xxxxxxxxxxxx",
"VolumeSize": 20,
"VolumeType": "gp2"
}
}
]
ステップ6:KMSキーの設定を確認する
6.1. KMSキーのステータスとアクセス許可を調べる
注意: 便宜上、KMSキーIDを環境変数 $NEW_KMS_KEY_ID として追加しました。
{"KeyId": "1234abcd-1234-abcd-1234-1234abcd1234",
"Enabled": true, <<<---
"KeyUsage": "ENCRYPT_DECRYPT",
"KeyState": "Enabled", <<<---
"KeyManager": "CUSTOMER"
}
この情報はKMSコンソールでも確認できます。キーには_new_kms_key_alias_の後に5つのランダムな文字列(例:new_kms_key_alias_123ab)が付いたエイリアスがあります:
KMSカスタマー管理キーを開く6.2. CMKのキーポリシーを確認する
{"Version": "2012-10-17",
"Statement": [
{"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::1234567890:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
キーポリシーにはAutoScalingサービスロールに必要な許可がありません。