Проблема с переподключением коляски Istio
Я использую istio 1.0.6 (без mTLS) в нашем кластере EKS и испытываю проблемы с соединением между двумя модулями, которые я не могу понять.
У меня есть клиент gRPC (abc-client
) и сервер (abc-server
Бег обоих написано в го. В кластере включена автоматическая инъекция коляски, поэтому оба работают.
Все работает нормально, если я просто запускаю две службы, но всякий раз, когда сервер перезагружается, клиент не может повторно подключиться к нему. После перезапуска я постоянно получаю следующее сообщение об ошибке на клиенте:
{"level":"error","error":"rpc error: code = Unavailable desc = upstream connect error or disconnect/reset before headers","time":"2019-03-19T12:07:52Z","message":"abc-server service unhealthy"}
Без коляски istio переподключение работает немедленно. Когда я смотрю на журналы коляски abc-client
Я вижу много следующих сообщений о проверках работоспособности, которые пытается выполнить клиент:
2019-03-19T12:09:41.527Z] "POST /grpc.health.v1.Health/CheckHTTP/2" 200 UF 5 0 1002 - "-" "grpc-go/1.15.0" "6a874d67-9c43-4b67-ad24-7337a26cac8d" "abc-server.abc-namespace:8086" "172.31.18.194:8086" outbound|8086||abc-server.abc-namespace.svc.cluster.local - 172.31.18.194:8086 172.31.22.131:44994
Мой вывод из этих журналов заключается в том, что у прокси возникают проблемы с подключением к вышестоящему серверу, которого больше нет, поэтому UF
флаг (сбой в восходящем направлении), но все еще возвращает 200
код статуса для клиента. Мне кажется, что это поведение не вызывает переподключение.
У меня нет никаких VirtualService
с или DestinationRule
Это просто кластер istio с включенными колясками.
Что мне не хватает? Заранее спасибо за помощь.
1 ответ
Проблема заключается в подключении к безголовым услугам. мой service.yaml
выглядело так:
apiVersion: v1
kind: Service
metadata:
name: grpc-test-server
spec:
type: ClusterIP
clusterIP: None
selector:
app: grpc-test-server
role: grpc-test-server
ports:
- name: grpc
port: 9999
targetPort: grpc
По вопросам № 10659 и № 7495 istio еще не работает с безголовыми службами.
Итак, если вам не нужен ваш сервис, чтобы быть безголовым, вы можете просто удалить clusterIP: None
от ямля и все должно работать как положено.
Я до сих пор не знаю, как заставить наборы состояний работать, которые требуют безголовых услуг.