AWS: InvalidSignatureException: Signature not yet current и Kubernetes AWS ALB Ingress controller

Автор: | 03/04/2021
 

Одним прекрасным утром девелоперы пожаловались, что не создаются AWS LoadBalancer из Ingress нашего Dev-кластера Kubernetes (AWS EKS).

Балансеры создаются через AWS ALB Controller, см. AWS Elastic Kubernetes Service: запуск ALB Ingress controller.

Сама ошибка в лога контроллера выглядела так:

E0304 07:12:38.595113       1 controller.go:217] kubebuilder/controller «msg»=»Reconciler error» «error»=»no object matching key \»test-namespace/test-ingress\» in local store»  «controller»=»alb-ingress-controller» «request»={«Namespace»:»test-namespace»,»Name»:»test-ingress»}
E0304 07:12:39.610204       1 controller.go:217] kubebuilder/controller «msg»=»Reconciler error» «error»=»failed to build LoadBalancer configuration due to failed to get AWS tags. Error: InvalidSignatureException: Signature not yet current: 20210304T071239Z is still later than 20210304T071056Z (20210304T070556Z + 5 min.)\n\tstatus code: 400, request id: 0ee08317-ca50-4b20-b136-49e6dda2b4ff»  «controller»=»alb-ingress-controller» «request»={«Namespace»:»test-namespace»,»Name»:»test-ingress»}

Сам текст «20210304T071239Z is still later than 20210304T071056Z» подсказало направление мысли, а быстрое гугление по запросу «InvalidSignatureException: Signature not yet current» привело к этому треду в Github Issues, где обсуждается AWS SDK и проблема с синхронизацией времени.

Пробуем просто пересоздать под с ALB Controller — по идее, после рестарта он начнёт правильно отсчитывать время, и всё заработает.

Находим деплоймент контроллера:

kk -n kube-system get deploy
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
alb-ingress-controller   1/1     1            1           96d

Скейлим в ноль:

kk -n kube-system scale deploy alb-ingress-controller --replicas=0
deployment.apps/alb-ingress-controller scaled

Обратно в 1 под:

kk -n kube-system scale deploy alb-ingress-controller --replicas=1
deployment.apps/alb-ingress-controller scaled

Проверяем под:

kk -n kube-system get pod | grep alb
alb-ingress-controller-7bd97f99bb-bzzdm   1/1     Running   0          4s

Пересоздаём тестовый Ingress:

kk -n test-namespace get ingress
NAME           CLASS    HOSTS   ADDRESS                                                                PORTS   AGE
test-ingress   <none>   *       aadca942-testnamespace-tes-***.us-east-2.elb.amazonaws.com   80      4m53s

Всё заработало.

Позже нашёл ещё один пост на эту тему — идея с рестартом пода была правильной, см. Solving «Signature not yet current» Error When Using AWS in Docker.