Ingress konfigurieren
Hier erfahren Sie, wie Sie Ihre Ingress-Konfiguration entsprechend Ihren Workloadanforderungen konfigurieren können.
Quellen-IP-Adresse beibehalten
Um Quellen-IP-Adressen beizubehalten, können Sie das Protokoll PROXY für VPC-Cluster aktivieren. Diese Option ist für Cluster verfügbar, auf denen Version 4.13 oder höher ausgeführt wird.
Das PROXY-Protokoll bietet eine bequeme Möglichkeit, Verbindungsinformationen, wie z. B. die Adresse eines Clients, über mehrere Schichten von NAT oder TCP Proxies zu transportieren. Weitere Informationen über das PROXY-Protokoll finden Sie in der Spezifikation HAProxy.
Der Ingress-Controller empfängt standardmäßig Verbindungen, die nur die Quellenadresse enthalten, die der Lastausgleichsfunktion zugeordnet ist. Sie können das Protokoll PROXY in VPC-Clustern aktivieren, um die Lastausgleichsfunktion so zu konfigurieren, dass die ursprüngliche Clientadresse für Verbindungen beibehalten wird, die der Ingress-Controller empfängt.
PROXY-Protokoll aktivieren
-
Bearbeiten Sie die Ingress-Controllerressource.
oc -n openshift-ingress-operator edit ingresscontroller/default -
Suchen Sie in der Ingress-Controllerressource den Abschnitt
spec.endpointPublishingStrategy.loadBalancerund definieren Sie die folgendenproviderParameters-Werte.endpointPublishingStrategy: loadBalancer: providerParameters: type: IBM ibm: protocol: PROXY scope: External type: LoadBalancerService -
Speichern Sie die Ressource und wenden Sie sie an.
PROXY-Protokoll inaktivieren
-
Bearbeiten Sie die Ingress-Controllerressource.
oc -n openshift-ingress-operator edit ingresscontroller/default -
Suchen Sie in der Ingress-Controllerressource den Abschnitt
spec.endpointPublishingStrategy.loadBalancerund definieren Sie die folgendenproviderParameters-Werte.endpointPublishingStrategy: loadBalancer: providerParameters: type: IBM ibm: protocol: TCP scope: External type: LoadBalancerService -
Speichern Sie die Ressource und wenden Sie sie an.
Ingress-Routing mit Annotationen anpassen
Wenn Sie die Routing-Regeln für Ihre App anpassen möchten, können Sie in den von Ihnen definierten Ingress-Ressourcen routenspezifische Annotationen vom Typ „ HAProxy “ verwenden.
Diese unterstützten Annotationen haben das Format haproxy.router.openshift.io/<annotation> oder router.openshift.io/<annotation>.IBM Cloud Kubernetes Service-Annotationen (ingress.bluemix.net/<annotation>)
und NGINX-Annotationen (nginx.ingress.kubernetes.io/<annotation>) werden für den Ingress-Controller oder die Ingress-Ressource in Red Hat OpenShift Version 4 nicht unterstützt.
Zugriffsprotokollierung aktivieren
HTTP Zugriffsprotokolle enthalten Informationen zu eingehenden HTTP Anfragen. Zugriffsprotokolle sind bei der Fehlerbehebung komplexer Probleme hilfreich, aber der OpenShift Router unterstützt standardmäßig keine Zugriffsprotokollierung. Für
OpenShift Cluster können Sie die Zugriffsprotokollierung für Router konfigurieren, was dazu führt, dass ein Sidecar-Container im Router-Pod vorhanden ist, der einen syslog Server ausführt und Zugriffsprotokolle in seine schreibt
stdout.
-
Bearbeiten Sie die
IngressController-Konfiguration und fügen Sie die folgende Konfiguration zu.spechinzu.logging: access: destination: type: Container httpCaptureHeaders: request: - maxLength: 256 name: Host httpLogFormat: '{"time_date":"%t","client":"%ci","host":"%[capture.req.hdr(0)]","ssl_version":"%sslv","request_method":"%HM", "request_uri":"%HU","status":%ST,"upstream_addr":"%si:%sp","request_time":%Tt,"upstream_connect_time":%Tc, "upstream_header_time":%Tr,"termination_state":"%ts"}'edit (Befehl)
kubectl edit ingresscontroller -n openshift-ingress-operator default ingresscontroller.operator.openshift.io/default edited -
Überprüfen Sie, ob die Router-Pods zwei Container ausführen.
kubectl get pod -n openshift-ingress -wBeispielausgabe
NAME READY STATUS RESTARTS AGE router-default-66945cc7c4-4xlnh 2/2 Running 0 36s router-default-66945cc7c4-5cxpn 2/2 Running 0 36s -
Überprüfen Sie die Zugriffsprotokolle.
kubectl logs -n openshift-ingress router-default-66945cc7c4-4xlnh -c logsBeispielausgabe
... 2025-01-28T12:29:07.038592+00:00 router-default-7fc484bbb8-qfm5d router-default-7fc484bbb8-qfm5d haproxy[41]:{"time_date": "28/Jan/2025:12:29:06.879","client":"10.5.207.79","host":"alb-autoscale-example-service-default.pvg-classic-z9g5zltmgb1ir -1e7743ca80a399c9cff4eaf617434c72-0000.us-south.stg.kube.appdomain.cloud","ssl_version":"TLSv1.3","request_method": "GET","request_uri":"/","status":200,"upstream_addr":"172.30.210.252:8080","request_time":159,"upstream_connect_time":1, "upstream_header_time":2,"termination_state":"--"} 2025-01-28T12:29:09.572129+00:00 router-default-7fc484bbb8-qfm5d router-default-7fc484bbb8-qfm5d haproxy[41]: {"time_date": "28/Jan/2025:12:29:09.405","client":"10.5.207.79","host":"alb-autoscale-example-service-default.pvg-classic-z9g5zltmgb1ir -1e7743ca80a399c9cff4eaf617434c72-0000.us-south.stg.kube.appdomain.cloud","ssl_version":"TLSv1.3","request_method":"GET", "request_uri":"/","status":200,"upstream_addr":"172.30.210.252:8080","request_time":166,"upstream_connect_time":0, "upstream_header_time":3,"termination_state":"--"} ...
Feinabstimmung der Verbindungsbehandlung
Die Parameter clientTimeout und serverTimeout sind wichtige Konfigurationen, die festlegen, wie lange Verbindungen zwischen Clients, dem Ingress-Controller und den Backend-Servern aktiv bleiben. Diese Timeouts spielen
eine wichtige Rolle bei der Optimierung der Anfragebearbeitung, insbesondere wenn es um lang andauernde Client-Verbindungen und verzögerte Antworten von Backend-Servern geht, und verhindern, dass wertvolle Ressourcen unnötig belegt werden.
Wenn Sie davon ausgehen, dass die Kunden die Verbindungen länger offen halten, ist es ratsam, die Einstellung clientTimeout zu erhöhen, um diesen Szenarien Rechnung zu tragen. Wenn umgekehrt Ihre Backend-Server aufgrund eines hohen
Verkehrsaufkommens oder einer hohen Verarbeitungslast eine hohe Latenz aufweisen, kann die Anpassung von serverTimeout den Servern die nötige Zeit geben, um die Verarbeitung ihrer Anfragen abzuschließen, bevor der Ingress-Controller
die Verbindung beendet.
Sie können die oben genannten Parameter in Ihrer IngressController Ressource ändern:
apiVersion: operator.openshift.io/v1
kind: IngressController
...
spec:
tuningOptions:
clientTimeout: 5s
serverTimeout: 5s
Weitere Informationen zu den Tuning-Optionen finden Sie in der OpenShift Dokumentation.
Anpassen von Zeitüberschreitungen
Wenn Ihre Cluster mit IBM CloudCloud Internet Services (CIS) / Cloudflare exponiert sind und eine Web Application Firewall (WAF) oder globales Load Balancing verwenden, sollten Sie und serverTimeout auf Werte clientTimeout über 900 Sekunden setzen, um vorzeitige Verbindungsabbrüche zu vermeiden. Weitere Informationen finden Sie in der Cloudflare-Dokumentation.
-
Identifizieren Sie Ihren Ingress Controller: Beginnen Sie mit der Auflistung Ihrer
IngressControllerRessourcen. Dies kann mit dem Befehl erreicht werden:oc get ingresscontrollers -n openshift-ingress-operator -
Aktualisieren Sie die Timeout-Parameter: Um die Parameter
clientTimeoutundserverTimeoutfür ein bestimmtesIngressControllerzu ändern, können Sie einen Patch-Befehl ausführen. Der folgende Befehl aktualisiert beispielsweise die Timeout-Einstellung für diedefaultIngress Controller auf 905 Sekunden:oc patch ingresscontrollers default --patch '{"spec": {"tuningOptions":{"clientTimeout": "905s", "serverTimeout": "905s"}}}' --type=merge -n openshift-ingress-operator -
Nur VPC-Cluster: In Fällen, in denen Sie innerhalb einer Virtual Private Cloud (VPC) arbeiten, ist es notwendig, die Leerlaufzeit der Verbindung des VPC-Load Balancers zusammen mit den Einstellungen des Ingress Controllers einzustellen. Es wird empfohlen, eine größere Leerlaufzeit für die Verbindung zu wählen als die Timeout-Einstellungen Ihres Ingress Controllers. Der folgende Befehl veranschaulicht, wie die Zeitüberschreitung für inaktive Verbindungen für den Dienst
router-defaultLoadBalancer auf 910 Sekunden aktualisiert werden kann:oc annotate svc -n openshift-ingress service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout="910" router-default