Изменение времени удержания узла-прокси-сервера Kubernetes tcp
Как правильно изменить время keepalive TCP для node-proxy?
Я запускаю Kubernetes в Google Container Engine и настроил вход, поддерживаемый HTTP (S) Google Load Balancer. Когда я постоянно делаю POST-запросы на вход, я получаю ошибку 502 ровно один раз каждые 80 секунд или около того. backend_connection_closed_before_data_sent_to_client
в облачном протоколе, поскольку это связано с тем, что keepalive GLB tcp (600 секунд) больше, чем keepalive узла-прокси (не знаю, что это такое).
Зарегистрированная ошибка подробно описана на странице https://cloud.google.com/compute/docs/load-balancing/http/.
Спасибо!
Ответы
Ответ 1
Вы можете использовать пользовательские ресурсы BackendConfig
, которые существуют на каждом кластере GKE для настройки времени ожидания и другие параметры, такие как CDN здесь является Документационный
Пример отсюда показывает, как настроить на входе
Это определение BackendConfig
:
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
name: my-bsc-backendconfig
spec:
timeoutSec: 40
connectionDraining:
drainingTimeoutSec: 60
И это как использовать на входе определение с помощью аннотаций
apiVersion: v1
kind: Service
metadata:
name: my-bsc-service
labels:
purpose: bsc-config-demo
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
spec:
type: NodePort
selector:
purpose: bsc-config-demo
ports:
- port: 80
protocol: TCP
targetPort: 8080
Ответ 2
просто для понимания, когда вы используете решение Google для балансировки нагрузки и управления своим Kubernetes Ingress, у вас будут GLBC
работающие в пространстве имен kube-system
.
Вы можете проверить это с помощью:
kubectl -n kube-system get po
Эти контейнеры предназначены для маршрутизации входящего трафика с фактического балансировщика нагрузки Google.
Я думаю, что время ожидания должно быть настроено там, на GLBC
. Вы должны проверить, какие аннотации или ConfigMap GLBC
могут потребоваться для настройки, если таковые имеются.
Здесь вы можете найти информацию:
Лично я предпочитаю использовать Nginx Ingress Controller на данный момент, и у него есть необходимые annotations
и поддержка ConfigMap
.
Увидеть: