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

Автор: | 04/03/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 – по идее, после рестарта он начнёт правильно отсчитывать время, и всё заработает.

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

[simterm]

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

[/simterm]

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

[simterm]

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

[/simterm]

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

[simterm]

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

[/simterm]

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

[simterm]

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

[/simterm]

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

[simterm]

$ 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

[/simterm]

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

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