Ingressgateway возвращает код состояния, отличный от кода Pod.

Устанавливаю Istio на GKE и запускаю приложение.

Хотя при доступе с помощью curl проблем нет, Ingressgateway возвращает код состояния, отличный от кода состояния прокси-сервера Pod, посредством некоторого запроса изображения при доступе из браузера. В частности, 200 и 302 и т. Д. Возвращаются как 500 или 504. Ресурсы, которые становятся 500 или 504, каждый раз различаются, но это 1 или 2 из примерно 100 запросов изображения. И если вы снова запросите еще один запрос 500 или 504, правильный ответ вернется без проблем.

Вы знаете, что вызывает такого рода причину?

Окружение такое.
GKE 1.10.11-gke.1
Istio 1.0.4

helm install install/kubernetes/helm/istio --name istio --namespace istio-system --set tracing.enabled=true --set kiali.enabled=true  --set global.proxy.includeIPRanges="10.0.0.0/8"

Ниже представлен журнал, полученный из Stackdriver Logging.

Журнал Ingressgateway.

"[2019-01-22T09:16:17.048Z] \"GET /my/app/image.pngHTTP/2\" 504 UT 0 24 60001 - \"xxx.xxx.xxx.xxx\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36\" \"c0abe3be-1153-45c5-bd8e-067ab597feb4\" \"my.app.com\" \"10.128.0.116:80\" outbound|80|ga|myapp.default.svc.cluster.local - 10.128.0.16:443 xxx.xxx.xxx.xxx:62257\n"

Журнал istio-proxy модуля приложения.

"[2019-01-22T09:16:17.048Z] \"GET /my/spp/images.pngHTTP/1.1\" 200 - 0 3113 0 0 \"xxx.xxx.xxx.xxx\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36\" \"c0abe3be-1153-45c5-bd8e-067ab597feb4\" \"my.app.com\" \"127.0.0.1:80\" inbound|80||myapp.default.svc.cluster.local - 10.128.0.116:80 xxx.xxx.xxx.xxx:0\n"

журнал nginx.

{
  "uri": "/my/app/image.png",
  "host": "my.app.com",
  "requestTime": "0.000",
  "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
  "xForwardedProto": "https",
  "user": "",
  "protocol": "HTTP/1.1",
  "bodyByteSize": "3113",
  "method": "GET",
  "remoteAddress": "127.0.0.1",
  "upstreamResponseTime": "",
  "request": "GET /my/app/images.png HTTP/1.1",
  "referrer": "https://my.app.com/",
  "status": "200",
  "xForwardedFor": "xxx.xxx.xxx.xxx"
}

Глядя на этот журнал, я думаю, что Ingressgateway отбрасывает ответ от Pod.


person akaimo    schedule 23.01.2019    source источник


Ответы (1)


UT в журнале прокси означает, что истекло время ожидания:

UT: Тайм-аут восходящего запроса в дополнение к коду ответа 504.

Попробуйте увеличить время ожидания подключения, указав Настройки пула подключений в Правило назначения:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myapp
  namespace: default
spec:
  host: myapp.default.svc.cluster.local
  trafficPolicy:
    connectionPool:
      tcp:
        connectTimeout: 10s
person Vadim Eisenberg    schedule 23.01.2019
comment
Я пробовал, но это не помогло. 504 возвращается по истечении тайм-аута, указанного VirtualService. Даже если вы установите время больше таймаута, указанного в VirtualService. - person akaimo; 24.01.2019
comment
Итак, каков тайм-аут в вашей VirtualService? - person Vadim Eisenberg; 24.01.2019
comment
Это 60 секунд. Через 60 секунд после запроса в браузере будет 504. - person akaimo; 24.01.2019
comment
Можете ли вы увеличить оба, например до 600 с. Сколько времени должно занять скачивание этого файла? - person Vadim Eisenberg; 24.01.2019
comment
Даже за 600 секунд он получил 504 после 600 секунд доступа. Когда curl или браузер my.app.com/my/app/image.png, это будет 200, но при доступе css из my.app.com/top это будет 504. /top имеет доступ примерно к 150–180 изображениям, 1 или 2 из них не работают с 504, а остальные - с 200. I доступ к изображениям с http2. - person akaimo; 24.01.2019
comment
Так вы можете попробовать какое-нибудь смехотворно большое число, например 1000000? - person Vadim Eisenberg; 24.01.2019
comment
Я получил доступ к 1000000 сейчас. Istio-proxy Pod немедленно выводит 200 журналов, но журнал Ingressgateway еще не был выведен. Я думаю, это потому, что это связано с браузером. - person akaimo; 24.01.2019
comment
Кто-нибудь знает о упомянутых выше 500 от Envoy? У нас возникла аналогичная проблема, но единственное, что я смог найти около 500 от Envoy, - это если вы достигнете предела буфера тела ответа, который мы наблюдаем в конечной точке здоровья, где тело очень маленькое. - person George Tseres; 10.05.2019