Kubernetes: ExternalDNS – records retrieval failed: failed to list hosted zones: Throttling: status code: 400

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

Имеется у нас ExternalDNS, см. Kubernetes: обновление DNS в Route53 при создании Ingress, который начал сыпать в лог сообщениями типа:

msg=”failed to list resource records sets for zone /hostedzone/Z2VM3W5SRY4I9J: Throttling: \n\tstatus code: 400

И даже в AWS Console в Route53 начали появляться сообщения “Throttling error that was caused because API rate was exceeded. Try again later.“:

Проблема очевидна – ExternalDNS делает слишком много запросов к AWS API.

Для решения – добавим опции --interval и --events.

В --interval укажем интервал раз в 2 минуты вместо дефолтной одной, см. Parameters, а --events активирует дополнительный обработчик, который вызывает ExternalDNS при создании или обновлении Ingress-объектов.

Деплоится ExternalDNS у нас из Ansible и Helm, см. Ansible: модуль community.kubernetes и установка Helm-чарта с ExternalDNS – обновляем Ansible-task:

- name: "Deploy ExternalDNS chart inside {{ eks_env }}-devops-external-dns-ns namespace (and create it)"
  community.kubernetes.helm:
    kubeconfig: "{{ kube_config_path }}"
    name: "external-dns"
    chart_ref: "bitnami/external-dns"
    release_namespace: "{{ eks_env }}-devops-external-dns-ns"
    create_namespace: true
    values:
      interval: 2m
      triggerLoopOnEvent: true
    ...

Деплоим, проверяем логи – всё чисто.