Имеется у нас 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 ...
Деплоим, проверяем логи – всё чисто.