Я запускаю Istio в Google Kubenetes Engine. Мое приложение использует gRPC и имеет контейнер Extensible Service Proxy для связи со службой Google Enpoints.
Istio в GKE по умолчанию блокирует все исходящие запросы, но это нарушает работу контейнера ESP, поскольку ему необходимо запрашивать некоторые данные из-за пределов сетки Istio.
Журналы ESP сообщили мне, что он пытался получить доступ к IP 169.254.169.254, чтобы получить некоторые метаданные, поэтому я открыл выходной канал из Istio, чтобы это произошло, и это нормально.
Но следующая попытка ESP — «получить идентификатор конфигурации службы из службы развертывания». Опять же, это заблокировано, но на этот раз ошибка журнала не сообщает мне URL-адрес, к которому он пытается получить доступ, а только путь. Поэтому я не знаю, какой URL открыть для выхода.
Это запись в журнале:
WARNING:Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Connection reset by peer'))': /v1/services/rev79.endpoints.rev79-232812.cloud.goog/rollouts?filter=status=SUCCESS
Так может ли кто-нибудь сказать мне, к каким URL-адресам должен получить доступ ESP, чтобы иметь возможность работать?
В конце концов я наткнулся на то, что искал, погуглив части пути с некоторыми ключевыми словами. Это похоже на то, к чему пытается получить доступ ESP: https://servicemanagement.googleapis.com/v1/services/{serviceName}/rollouts/{rolloutId}
Действительно, открытие маршрута к этому хосту запускает и запускает ESP.
Для всех, кто застрял с этой проблемой.
ESP требуется доступ к двум отдельным конечным точкам, чтобы работать без сбоев. Они есть
Для правильной работы ему также необходимо
Если у вас есть строгая фильтрация исходящего трафика в сетке Istio, вам потребуются два ресурса ServiceEntry, чтобы это произошло.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: endpoints-cert
spec:
hosts:
- metadata.google # this field does not matter
addresses:
- 169.254.169.254/32
ports:
- number: 80
name: http
protocol: HTTP
resolution: NONE
location: MESH_EXTERNAL
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: endpoints-metadata
spec:
hosts:
- "servicemanagement.googleapis.com"
- "servicecontrol.googleapis.com"
ports:
- number: 80 # may not be necessary
name: http
protocol: HTTP
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNAL
Если вы используете выходной шлюз, вам потребуется дополнительная настройка для обоих эти конечные точки.