соединение gRPC между двумя разными сетками сбрасывается
У меня есть два разных кластера (EKS, v1.18) со своими сетками (v1.9.0).
У меня есть развертывание Thanos в кластере A и развертывание Prometheus в кластере B (с запущенным сайдкаром thanos). Цель состоит в том, чтобы танос запрашивал эти вспомогательные машины в удаленных кластерах для прокси-запросов к каждому кластеру (сохранение блокировки с использованием S3 или аналогичного выходит за рамки этой проблемы) через внутренний балансировщик нагрузки (классический ELB)
Ресурсы для шлюза, виртуальной службы и службы находятся в кластере B, и я могу запускать Thanos локально при подключении к сети и успешно подключаться к дополнительным машинам в кластере B, используя gRPC.
ServiceEntry для полного доменного имени из кластера B был создан в кластере A, разрешение работает, маршрутизация правильная, но развертывание в кластере A не может подключиться к кластеру B.
Сайдкары Istio (из исходной рабочей нагрузки, Thanos, в кластере A) показывают, что соединение сбрасывается:
[2021-02-26T14:41:03.509Z] "POST /thanos.Store/Info HTTP/2" 0 - http2.remote_reset - "-" 5 0 4998 - "-" "grpc-go/1.29.1" "50912787-d528-994f-b8ad-78dd42081fea" "thanos.dev.integrations.internal.fqdn:10901" "-" - - 172.20.65.175:10901 172.30.9.174:37594 - default
Я не вижу входящего запроса на входном шлюзе кластера B (у меня есть публичный и частный, я проверил оба, чтобы быть уверенным).
Я пытался:
- Принудительное обновление http1.1 до http2 с помощью DR
- Принудительное отключение TLS с помощью DR
- Исключение частного диапазона LB CIDR для обхода прокси
Ресурсы (кластер A)
ServiceEntry:
---
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: thanos-integrations-dev
namespace: thanos
spec:
hosts:
- thanos.dev.integrations.internal.fqdn
location: MESH_EXTERNAL
ports:
- name: grpc-thanos-int-dev
number: 10901
protocol: GRPC
resolution: DNS
Ресурсы (кластер B)
Шлюз:
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
annotations:
meta.helm.sh/release-name: istio-routing-layer
meta.helm.sh/release-namespace: istio-system
creationTimestamp: "2021-02-25T11:37:49Z"
generation: 3
labels:
app.kubernetes.io/instance: istio-routing-layer
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: istio-routing-layer
app.kubernetes.io/version: 0.0.1
helm.sh/chart: istio-routing-layer-0.0.1
name: thanos
namespace: istio-system
spec:
selector:
istio: internal-ingressgateway
servers:
- hosts:
- thanos.dev.integrations.internal.fqdn
port:
name: grpc-thanos
number: 10901
VirtualService:
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
annotations:
meta.helm.sh/release-name: istio-routing-layer
meta.helm.sh/release-namespace: istio-system
creationTimestamp: "2021-02-25T11:37:49Z"
generation: 3
labels:
app.kubernetes.io/instance: istio-routing-layer
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: istio-routing-layer
app.kubernetes.io/version: 0.0.1
helm.sh/chart: istio-routing-layer-0.0.1
spec:
gateways:
- thanos
hosts:
- thanos.dev.integrations.internal.fqdn
http:
- route:
- destination:
host: thanos-sidecar.prometheus.svc.cluster.local
port:
number: 10901
Служба:
---
apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: prometheus-thanos-istio
meta.helm.sh/release-namespace: prometheus
creationTimestamp: "2021-02-25T14:31:02Z"
labels:
app.kubernetes.io/instance: prometheus-thanos-istio
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-thanos-istio
app.kubernetes.io/version: 0.0.1
helm.sh/chart: prometheus-thanos-istio-0.0.1
spec:
clusterIP: None
ports:
- name: grpc-thanos
port: 10901
protocol: TCP
targetPort: grpc
selector:
app: prometheus
component: server
sessionAffinity: None
type: ClusterIP