Часто встречающиеся проблемы и пути их устранения#

Код ошибки

Пример ошибки

Решение

Pod RL Service завершается с ошибкой

time=»2022-08-04T14:30:21Z» level=warning msg=»connecting to redis on mymaster,redis-sentinel-0.redis-sentinel:26379,redis-sentinel-1.redis-sentinel:26379,redis-sentinel-2.redis-sentinel:26379 with pool size 10» panic: dial tcp: lookup redis-sentinel-2.redis-sentinel on { IP_ADDRESS }:53: no such host

Необходимо удостовериться, что 3 Pod StatefulSet redis-sentinel запущены корректно

Некорректная балансировка запросов от Ingress Gateway до RL Service

В случае перезапуска Pod RL Service или увеличения числа Pods, трафик на вновь созданный Pod почти не поступает

Убедиться, что в артефакте GlobalRateLimit указан Headless Service RL Service, а не обычный. Headless Service — это Service, у которого параметр clusterIP выставлен в None

Не срабатывает RateLimit

-

Проверить, что:
1) все Pod RL Operator, RL Service, Redis, Sentinel, Radish, Egress Gateway (в зависимости от выбранного варианта развертывания состав Pod может отличаться) запущены, в логах приложений нет ошибок;
2) загружен артефакт GlobalRateLimit (GRL) с необходимыми настройками;
3) в артефакте GRL выставлено корректное значение поля visibility в соответствии с типом установки компонента SRLS, для централизованного — cluster, для децентрализованного — namespace;
4) значение поля workloadSelector, указанное в GRL, соответствует меткам Ingress (Egress) Gateway;
5) указанные значения настроек rlserver и rlserverport верны — в качестве host должен быть указан Headless Service RL Service, порт — 8081);
6) в случае централизованного варианта установки в поле rlnamespace должен быть указан целевой namespace централизованного компонента SRLS;
7) созданы все необходимые Role, ClusterRole, RoleBinding и ClusterRoleBinding в соответствии с инструкцией по установке;
8) в полях endpoint указан host, на который поступает трафик, и порт для входящих соединений Ingress (Egress), который задается в артефакте Gateway (если в артефакте Gateway указано несколько адресов, то см. подраздел «Несколько адресов в артефакте Gateway» раздела «Использование программного компонента» документа «Руководство прикладного разработчика»);
9) если настроена интеграция с SYND, то:
— образ прикладного Ingress/Egress включает интеграцию с SYND;
— прикладной Ingress/Egress подключен к SYND (см. документацию компонента IGEG);
— в прикладном проекте присутствует артефакт DiscoveryImport (см. документацию компонента SYND)

Не запускается Pod RL Service или RL Operator

panic: dial tcp: address radish-0.radish.da-dp2-sy-dev-srls-03.svc.cluster.local:2181,radish-1.radish.da-dp2-sy-dev-srls-03.svc.cluster.local:2181,radish-2.radish.da-dp2-sy-dev-srls-03.svc.cluster.local:2181: too many colons in address

Выставьте корректный тип Radish (standalone или scarecrow) и укажите корректный список серверов. Для standalone должен быть указан только один адрес подключения

Не запускается Pod

Failed to pull image «registry.mydomain.ru/ci90000055_srls/operator@sha256:{ hash }»: rpc error: code = Unknown desc = Error reading manifest sha256:{ hash } in registry.mydomain.ru/domain/srls/operator: unauthorized: authentication required

Предоставьте права на доступ к образу для пользователя, прописанного в ImagePullSecret rls-image-pull-secret

Не применяется конфигурация GlobalRateLimit

1) Ошибка в блоке status: endpoint [test-server1-endpoint-tribe-sy-srls-dev-03.apps.stands-vdc01.solution.test:8080] tenant.Name [server1.path] tenant.ResourceName [account-3] duplicate error: GlobalRateLimit manifest not valid.
2) В блоке status есть ошибка с полем reason: synd has not connected yet.
3) В блоке status есть ошибки с полем reason: patch was not applied

1) Значение поля resourceName должно быть уникальным при конфигурировании endpoint. Скорректируйте значение поля resourceName.
2) Нет подключения к SYND, проверьте его работоспособность. Проверьте, что:
— в артефакте PeerAuthentication srls-pa выставлено значение STRICT;
— в артефактах DestinationRule operator-dr, radish-dr-all, radish-dr-0, radish-dr-1 выставлено значение ISTIO_MUTUAL.
3) SYND не смог применить патч. В блоке status посмотрите имена ресурсов, которые не применились, и сообщение об ошибке. Скорректируйте артефакт GlobalRateLimit

Не запускается Pod RL Operator

W0816 16:15:07.596714 1 reflector.go:424] sigs.k8s.io/controller-runtime/pkg/cache/internal/informers_map.go:262: failed to list *v1alpha1.GlobalRateLimit: globalratelimits.ratelimit.service is forbidden: User «system:serviceaccount:some-namespace:rate-limiter-service» cannot list resource «globalratelimits» in API group «ratelimit.service» at the cluster scope

Убедитесь, что созданы артефакты ClusterRole и ClusterRoleBinding, предоставляющие права на артефакт GlobalRateLimit для ServiceAccount rate-limiter-service в вашем namespace

Warning в статусе GlobalRateLimit

Сообщения с подобным текстом могут появляться в status артефакта GlobalRateLimit и логах RL Operator:
1) endpoint [ingress-my-namespace-02.apps.domain.org:8080] byHeader [synapse-consumerid] invokers are shadowed by uri_prefixes
2) unused [size_key [size1]]

В сообщении говорится о некритичной ошибке конфигурации:
1) Для endpoint в секции by_header указаны одновременно invokers и uri_prefixes; uri_prefixes имеет более высокий приоритет, поэтому блок invokers игнорируется — необходимо удалить одну из секций.
2) В артефакте GlobalRateLimit определен набор ограничений в разрезе размера тела запроса size1, который не используется ни в одном endpoint

Не запускается Pod RL Operator

error controller-runtime.source.EventHandler failed to get informer from cache {«error»: «failed to get restmapping: failed to get server groups: Get «https://kubernetes.default.svc.cluster.local:443/api»: read tcp { IP_ADDRESS }:44884->{ IP_ADDRESS_EXTERNAL }:443: read: connection reset by peer - error from a previous attempt: read tcp { IP_ADDRESS }:44878->{ IP_ADDRESS_EXTERNAL }:443: read: connection reset by peer»}

Проверьте корректность маршрута проброса трафика к Kube API через Egress. Должны быть созданы артефакты VirtualService с названием egress-kubeapi-vs, ServiceEntry с названием egress-kubeapi-se, Gateway с названием egress-kubeapi-gw и Service с названием egressgateway-rls-svc. Если выбран децентрализованный вариант установки, убедитесь, что в стендозависимом параметре .Values.egress.selectors указан корректный набор label, указывающий на pod Egress Gateway

Заданная в артефакте GlobalRateLimit квота исчерпывается при меньшем количестве запросов

В GlobalRateLimit установлена квота 2 запроса в минуту, отправляются 2 запроса, однако Rate Limiter Service пропускает лишь 1.
В логах пода rate-limiter-service можно заметить, что пришло в 2 раза больше запросов:

2024-06-25T09:19:43.617 DBG got descriptor descriptor=(endpoint=svchttp),(svchttp.httpecho-http-header=httpecho-http-client)
2024-06-25T09:19:43.617 DBG starting get limit lookup
2024-06-25T09:19:43.617 DBG applying limit requests=2 unit=MINUTE
2024-06-25T09:19:43.617 DBG got descriptor descriptor=(endpoint=svchttp),(svchttp.httpecho-http-header=httpecho-http-client)
2024-06-25T09:19:43.617 DBG starting get limit lookup
2024-06-25T09:19:43.617 DBG applying limit requests=2 unit=MINUTE
2024-06-25T09:19:43.617 DBG starting cache lookup
2024-06-25T09:19:43.617 DBG looking up cache key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.617 DBG looking up cache key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.618 DBG cache current=1 key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.618 DBG cache current=2 key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.618 DBG returning normal response response=OK

2024-06-25T09:19:43.713 DBG got descriptor descriptor=(endpoint=svchttp),(svchttp.httpecho-http-header=httpecho-http-client)
2024-06-25T09:19:43.713 DBG starting get limit lookup
2024-06-25T09:19:43.713 DBG applying limit requests=2 unit=MINUTE
2024-06-25T09:19:43.713 DBG got descriptor descriptor=(endpoint=svchttp),(svchttp.httpecho-http-header=httpecho-http-client)
2024-06-25T09:19:43.713 DBG starting get limit lookup
2024-06-25T09:19:43.713 DBG applying limit requests=2 unit=MINUTE
2024-06-25T09:19:43.713 DBG starting cache lookup
2024-06-25T09:19:43.713 DBG looking up cache key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.713 DBG looking up cache key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.714 DBG cache current=3 key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.714 DBG cache current=4 key=srls_endpoint_svchttp_svchttp.httpecho-http-header_httpecho-http-client_1719296340
2024-06-25T09:19:43.714 DBG returning normal response response=OVER_LIMIT

Проверьте, что EnvoyFilter для каждого указанного в GlobalRateLimit endpoint присутствует в единственном экземпляре