
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"]
}
}