Прошли недели с тех пор, как у меня много тайм-аутов, когда gcp lbs проверяет ingress-nginx healthz, в то время как все отвечает правильно.
У меня есть кластер GKE с Container Optimized OS и n1-standard-4 в качестве машины и версии kubernetes. v1.21.10-gke.2000
.
Вот мои узлы:
kubectl топ нет
НАЗВАНИЕ CPU(ядер) CPU% MEMORY(bytes) MEMORY%
gke-xxx-gke-cluster0-xxx-gke-cluster0-0a2ef32c-6lj0 821m 20% 3683Mi 29%
gke-xxx-gke-cluster0-xxx-gke-cluster0-98567a10-pqk2 2302m 58% 4983Mi 40%
gke-xxx-gke-cluster0-xxx-gke-cluster0-cd892740-3v6m 83m 2% 852Mi 6%
Вот мои модули и сервисы ingress-nginx:
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
pod/nginx-ingress-controller-fnxlc 1/1 Работает 0 65 м
pod/nginx-ingress-controller-m4nq2 1/1 Работает 0 67 м
pod/nginx-ingress-controller-tb4gc 1/1 Работает 0 66 м
НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ(Ы) ВОЗРАСТ
service/nginx-ingress-controller NodePort УДАЛЕНО <нет> 80:32080/TCP, 443:32443/TCP 69d
service/nginx-ingress-controller-metrics ClusterIP REDACTED <none> 10254/TCP 69d
Вот мои значения руля для ngress-nginx/вход-nginx
версия 4.1.0
:
входной классресурс:
имя: нгинкс
включено: правда
по умолчанию: ложь
значение контроллера: "k8s.io/ingress-nginx"
вид: DaemonSet
живостьзонд:
httpПолучить:
путь: "/healthz"
порт: 10254
схема: HTTP
начальные секунды задержки: 10
периодСекунды: 10
таймаутСекунды: 1
Порог успеха: 1
порог отказа: 5
готовностьзонд:
httpПолучить:
путь: "/healthz"
порт: 10254
схема: HTTP
начальные секунды задержки: 10
периодСекунды: 10
таймаутСекунды: 1
Порог успеха: 1
порог отказа: 3
podАннотации:
prometheus.io/scrape_metrics_app: «правда»
prometheus.io/scrape_metrics_port_app: "10254"
prometheus.io/scrape_metrics_port_name_app: метрики
Ресурсы:
Запросы:
процессор: 100 м
память: 120Ми
оказание услуг:
включено: правда
аннотации:
cloud.google.com/backend-config: '{"ports": {"80":"security-policy"}}'
целевые порты:
http: http
https: https
тип: NodePort
порты узлов:
http: 32080
https: 32443
TCP:
8080: 32808
показатели:
порт: 10254
# если этот порт изменен, измените healthz-port: в extraArgs: соответственно
включено: правда
PriorityClassName: nginx-вход
допускВебхуки:
включено: ложь
пластырь:
PriorityClassName: nginx-вход
Моя конфигурация бэкенда:
---
apiVersion: планирование.k8s.io/v1
вид: PriorityClass
метаданные:
имя: nginx-вход
стоимость: 1000000
globalDefault: ложь
---
Версия API: cloud.google.com/v1
вид: BackendConfig
метаданные:
имя: политика безопасности
спецификация:
таймаутСек: 60
соединениеСлив:
дренированиеTimeoutSec: 10
политика безопасности:
название: "УДАЛЕНО"
проверка состояния здоровья:
чекинтервалсек: 10
таймаутСек: 5
здоровыйПорог: 1
нездоровый порог: 2
порт: 32080
тип: HTTP
Путь запроса: /healthz
---
Версия API: networking.k8s.io/v1
вид: Вход
метаданные:
имя: nginx-ingress-controller-gke
аннотации:
kubernetes.io/ingress.global-static-ip-name: «УДАЛЕНО»
kubernetes.io/ingress.class: «gce»
спецификация:
ingressClassName: nginx
по умолчаниюБэкэнд:
оказание услуг:
имя: nginx-вход-контроллер
порт:
номер: 80
Мое правило брандмауэра:
позволил:
- IP-протокол: TCP
порты:
- '32080'
- «80»
временная метка создания: «УДАЛЕНО»
описание: ''
направление: ВХОД
отключено: ложь
идентификатор: 'ОТРЕДАКТИРОВАНО'
вид: вычислить # брандмауэр
логКонфиг:
включить: ложь
имя: УДАЛЕНО-allow-i-google-gke-health
сеть: https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/REDACTED
приоритет: 1000
selfLink: https://www.googleapis.com/compute/v1/projects/REDACTED/global/firewalls/REDACTED-allow-i-google-gke-health
исходные диапазоны:
- 130.211.0.0/22
- 35.191.0.0/16
целевые сервисные аккаунты:
- УДАЛЕНО
Моя серверная служба ЗДОРОВА:
---
серверная часть: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-b/instanceGroups/k8s-ig--REDACTED
положение дел:
статус здоровья:
- HealthState: ЗДОРОВЫЙ
экземпляр: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-b/instances/REDACTED
IP-адрес: УДАЛЕНО
порт: 32080
вид: вычислить#backendServiceGroupHealth
---
серверная часть: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-c/instanceGroups/k8s-ig--REDACTED
положение дел:
статус здоровья:
- HealthState: ЗДОРОВЫЙ
экземпляр: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-c/instances/REDACTED
IP-адрес: УДАЛЕНО
порт: 32080
вид: вычислить#backendServiceGroupHealth
---
серверная часть: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-d/instanceGroups/k8s-ig--REDACTED
положение дел:
статус здоровья:
- HealthState: ЗДОРОВЫЙ
экземпляр: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-d/instances/REDACTED
IP-адрес: УДАЛЕНО
порт: 32080
вид: вычислить#backendServiceGroupHealth
Мои целевые прокси http/https в порядке.
Проблема в том, что, начиная с GKE 1.21, у меня много времени ожидания проверки работоспособности от google lb:
{
"insertId": "120vrdac2cf",
"jsonПайлоад": {
"healthCheckProbeResult": {
"healthCheckProtocol": "HTTP",
"healthState": "НЕЗДОРОВО",
"previousHealthState": "ЗДОРОВЫЙ",
"probeResultText": "Ответ HTTP: , Ошибка: время ожидания подключения истекло",
"probeSourceIp": "35.191.13.216",
"ipAddress": "УДАЛЕНО",
"probeCompletionTimestamp": "2022-04-27T15:40:52.868912018Z",
"previousDetailedHealthState": "ЗДОРОВО",
"targetIp": "УДАЛЕНО",
"detailedHealthState": "ТАЙМ-АУТ",
"responseLatency": "5.001074s",
"целевой порт": 32080,
"probeRequest": "/здоровьез"
}
},
"ресурс": {
"тип": "gce_instance_group",
"метки": {
"instance_group_name": "k8s-ig--d350a72156e88e7d",
"instance_group_id": "7274987390644036118",
"местоположение": "europe-west1-c",
"project_id": "УДАЛЕНО"
}
},
"отметка времени": "2022-04-27T15:40:53.307035382Z",
"серьезность": "ИНФОРМАЦИЯ",
"logName": "projects/REDACTED/logs/compute.googleapis.com%2Fhealthchecks",
"receiveTimestamp": "2022-04-27T15:40:54.568716762Z"
}
Вот скриншот всех ошибок:
ошибки проверки работоспособности
У меня нет проблем с брандмауэром.
С узла нет проблем с проверкой работоспособности:
пока верно; do curl -m 2 -o /dev/null -sw "%{http_code} %{time_total}s\n" 0:32080/healthz; сделано
200 0,000984 с
200 0,000845 с
200 0,000704 с
200 0,002411 с
200 0,001235 с
200 0,000784 с
200 0,001471 с
200 0,000498 с
HTTP-ответ всегда равен 200.
Все это означает, что и gke, и стручки здоровы. Если модули не были исправны, у меня будет несколько перезапусков, которых у меня вообще нет.
Мои проверки работоспособности модулей всегда отвечают за миллисекунды.
Но по какой-то неизвестной причине у меня много проблем с проверкой работоспособности. Время ожидания подключения
которые вызывают проблемы с трафиком на моем сайте.
Во время отладки у меня нет трафика на моем сайте.
Я не помню, чтобы у меня были проблемы с GKE. 1.19/1.20
. Я, конечно, пробовал много версий 1.21, но все равно не повезло.
Я перешел с ingress-nginx 4.0.16
к 4.1.0
но проблема все еще присутствует.
Я также увеличил интервал проверки работоспособности и время ожидания, но та же проблема.
Я подумал, что, может быть, nginx много раз перезагружает свою конфигурацию, но на самом деле это не так, потому что в журналах почти то же самое:
Контроллер nginx-ingress-controller-fnxlc I0427 16:10:38.352350 8 event.go:285] Событие (v1.ObjectReference {Вид: «Ingress», пространство имен: «nginx-ingress», имя: «nginx-ingress-controller- gke", UID: "45baf918-c5b9-499e-9930-b6e5d03aa38e", APIVersion: "networking.k8s.io/v1", ResourceVersion: "83550719", FieldPath: ""}): тип: "Нормальный" причина: ' Синхронизация запланирована для синхронизации
У кого-нибудь есть такая же проблема?
Любая помощь?