Estamos ejecutando varios clústeres con EKS de AWS.
Actualmente, todos los clústeres ya están en 1.19, pero los NodeGroups aún se ejecutan en 1.18. La última actualización de los NodeGroups fue en diciembre y ahí funciona todo bien. El ConfigMap de aws-auth no se modificó desde este momento.
Ahora queremos actualizarlos. Si hacemos clic en la Consola en Actualizar o usando el siguiente comando:
aws eks --region <clusterRegion> update-nodegroup-version --cluster-name=<clusterName> --nodegroup-name=<nodeGroupName>... falla con:
An error occurred (InvalidRequestException) when calling the UpdateNodegroupVersion operation: Nodegroup health has issues other than [ AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable ]Una mirada a los detalles del grupo de nodos muestra el siguiente mensaje:
AccessDenied: The aws-auth ConfigMap in your cluster is invalid.El ConfigMap relacionado (que funciona bien para que todos podamos acceder a él) tiene el siguiente contenido (sin información confidencial):
mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::<accountId>:role/<ourEksClusterNodeRole> username: system:node:{{EC2PrivateDNSName}} - groups: - system:masters rolearn: arn:aws:iam::<accountId>:role/AWSReservedSSO_SystemAdministrator_<someRandomString> username: {{SessionName}}Resulta que la forma propuesta por la documentación de AWS para integrar a los usuarios de SSO en los clústeres no es compatible con la última versión de EKS.
El marcador de posición {{SessionName}} no se puede evaluar. Así que he tenido que cambiarlo así:
mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::<accountId>:role/<ourEksClusterNodeRole> username: system:node:{{EC2PrivateDNSName}} - groups: - system:masters rolearn: arn:aws:iam::<accountId>:role/AWSReservedSSO_SystemAdministrator_<someRandomString> username: awssso-system-administratorLa desventaja de este enfoque es que perdimos información de auditoría en los registros.
Para evitar esto (aunque es realmente extraño):
aws-auth de esta manera.aws-auth .