Das Istio-Ingress-Gateway kann für einen Dienst keine Verbindung zu mehr als einer Replik herstellen

Das Istio-Ingress-Gateway kann für einen Dienst keine Verbindung zu mehr als einer Replik herstellen

Ich richte Istio in einem neuen AWS EKS-Cluster ein und habe zum Testen eine grundlegende Nginx-Bereitstellung erstellt. Wenn die Bereitstellung nur eine Replik hat, funktioniert sie perfekt und reagiert in weniger als 100 ms. Wenn ich eine Replik hinzufüge, steigt die Reaktionszeit des neuen Pods rasend schnell an und beträgt im Durchschnitt etwa 10 Sekunden.

Basierend auf Vorschlägen von anderswo aktualisierte ich dieMesh-KonfigurationSo deaktivieren Sie automatische Wiederholungsversuche:

meshConfig:
   defaultHttpRetryPolicy: {}

Nachdem dies passiert war, stellte ich fest, dass Anfragen an den zweiten Pod immer fehlschlugen:

"GET / HTTP/1.1" 503 UF upstream_reset_before_response_started{connection_failure} - "-" 0 91 10003 - "108.249.9.111,10.1.0.117" "curl/7.68.0" "6fa51be8-1441-4454-8d 1b-a03c93b257dc" "example.com" "10.1.52.62:80" outbound|80||nginx.my-namespace.svc.cluster.local - 10.1.108.189:8080 10.1.0.117:21410 - -

Mein Setup ist das folgende:

# AWS ALB Ingress -> istio-ingressgateway (ClusterIP) -> gateway -> virtualservice -> service -> nginx

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: default
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

---

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: nginx
spec:
  hosts:
  - "example.com"
  gateways:
  - default
  http:
  - route:
    - destination:
        host: nginx

---

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      name: http

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
    version: v1
spec:
  replicas: 2
  revisionHistoryLimit: 1
  selector:
    matchLabels:
      app: nginx
      version: v1
  template:
    metadata:
      labels:
        app: nginx
        version: v1
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
          resources:
            requests:
              memory: 100Mi
              cpu: 100m
            limits:
              memory: 1500Mi
              cpu: 1000m

Versionen:

$ istioctl version
client version: 1.13.2
control plane version: 1.13.2
data plane version: 1.13.2 (1 proxies)


$ kubectl version --short
Client Version: v1.21.11
Server Version: v1.21.5-eks-bc4871b

Antwort1

Ich fand heraus, dass mein Problem auf falsch konfigurierte Sicherheitsgruppenregeln für die Knoten zurückzuführen war. Ich ließ keinen Datenverkehr von Knoten zu Knoten zu und verhinderte so, dass das Istio-Ingress-Gateway mit Pods in anderen Knoten kommunizieren konnte.

Mithilfe des AWS EKS Terraform-Moduls habe ich Folgendes hinzugefügt:


  node_security_group_additional_rules = {

    ingress_self_all = {
      description = "Node to node all ports/protocols"
      protocol    = "-1"
      from_port   = 0
      to_port     = 0
      type        = "ingress"
      self        = true
    }
    egress_all = {
      description = "Node all egress"
      protocol    = "-1"
      from_port   = 0
      to_port     = 0
      type        = "egress"
      cidr_blocks = ["0.0.0.0/0"]
    }
  }

verwandte Informationen