In diesem Thema wird erläutert, wie Sie Nicht-SNI-Clients für die Verwendung mit Apigee Hybrid aktivieren.
So konfigurieren Sie einen Nicht-SNI-Client
In diesem Abschnitt wird erläutert, wie Sie die Unterstützung für Nicht-SNI-Clients (Server Name Indication) in Apigee Hybrid aktivieren.
SNI definiert, wie ein TLS-Peer (Client) den Hostnamen angibt, mit dem er während des ersten TLS-Handshake eine Verbindung herstellen möchte. SNI ist seit 2003 Teil von TLS. Vor SNI antwortete der empfangende Peer immer mit denselben Anmeldedaten, wenn ein TLS-Peer ein HELLO zum Starten des Handshake sendete. SNI wurde eingeführt, damit ein einzelner Load Balancer mehrere unterschiedliche Hostnamen und Anmeldedatensätze für die Verwaltung von TLS-Verbindungen unterstützen kann. SNI wird inzwischen von den meisten TLS-Clients verwendet.
Es gibt jedoch Ausnahmen. Der Google Cloud Load Balancer verwendet beispielsweise einen Nicht-SNI-Handshake, um eine Verbindung zu Backends herzustellen.
Wenn Sie Apigee Hybrid so konfigurieren möchten, dass TLS-Handshakes ohne SNI verarbeitet werden können, weil Ihr Apigee Hybrid ein Backend für einen Google Cloud Load Balancer ist oder weil Ihr Apigee Hybrid einen anderen Nicht-SNI-Client unterstützen muss, sollten Sie die unten beschriebenen Schritte ausführen. Die Nicht-SNI-Aushandlung dient als Fallback. Apigee Hybrid verwendet sie für alle Clients, die kein SNI verwenden.
ApigeeRoute
-Ressource erstellen Achten Sie darauf, dassenableNonSniClient
auftrue
gesetzt ist:apiVersion: apigee.cloud.google.com/v1alpha1 kind: ApigeeRoute metadata: name: ROUTE_NAME namespace: APIGEE_NAMESPACE spec: hostnames: - "*" ports: - number: 443 protocol: HTTPS tls: credentialName: CREDENTIAL_NAME mode: SIMPLE #optional minProtocolVersion: TLS_AUTO selector: app: apigee-ingressgateway enableNonSniClient: true
Dabei gilt:
- ROUTE_NAME ist der Name, den Sie der benutzerdefinierten Ressource zuweisen.
- CREDENTIAL_NAME ist der Name eines Kubernetes-Secrets, das auf dem Cluster bereitgestellt wird und TLS-Anmeldedaten für Ihren virtuellen Host enthält. Sie finden den Namen der Anmeldedaten mit dem folgenden
kubectl
-Befehl:kubectl -n APIGEE_NAMESPACE get ApigeeRoutes -o=yaml | grep credentialName
hostnames
muss auf den Platzhalter „*“ gesetzt werden.
- Öffnen Sie die Überschreibungsdatei und nehmen Sie die im nächsten Schritt beschriebene Änderung vor.
- Fügen Sie für jede Umgebungsgruppe den Namen ApigeeRoute in das Attribut
additionalGateways
ein. Beispiel:virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["ROUTE_NAME"]
- Speichern Sie die CRD-Datei. Beispiel:
ApigeeRoute.yaml
- Wenden Sie die CRD auf den Cluster an:
kubectl apply -f ApigeeRoute.yaml -n APIGEE_NAMESPACE
- Wenden Sie die Änderung auf
virtualhosts
an. Wenn Sie die Umgebungsvariable $ENV_GROUP in Ihrer Shell festgelegt haben, können Sie sie in den folgenden Befehlen verwenden:helm upgrade $ENV_GROUP apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f OVERRIDES_FILE.yaml
Verwendungshinweise
- Was passiert, wenn der Cluster mehr als eine Organisation hat?
Da sich das Ingress auf der Clusterebene für einen bestimmten Port (443) befindet und es nur ein Schlüssel-/Zertifikatpaar für den ApigeeRoute-CRD gibt, müssen alle Organisationen dasselbe Schlüssel-/Zertifikatpaar haben.
- Was geschieht, wenn der Cluster mehr als eine Umgebungsgruppe hat? Funktioniert die VM, wenn die virtuellen Hosts dasselbe Schlüssel-/Zertifikatpaar verwenden?
Alle Hostnamen in allen Umgebungsgruppen müssen dasselbe Schlüssel-/Zertifikatpaar verwenden.
- Warum erstellen wir statt eines Gateways eine ApigeeRoute?
ApigeeRoutes können von Apigee validiert werden; das Gateway (Istio-CRD) jedoch nicht. Technisch funktioniert sogar ein Gateway, aber mögliche Konfigurationsfehler können (durch einen Validierungs-Webhook) vermieden werden.
- Wie kann ich Nicht-SNI-Clients für Apigee konfigurieren?
Wenn Ihre Apigee-Instanz über einen Google Load Balancer bereitgestellt wird, unterstützt der Load Balancer Nicht-SNI-Clients, wie in der Load-Balancing-Dokumentation beschrieben. Wenn Sie eine Apigee-Instanz über einen internen PSC-Endpunkt oder ein VPC-Netzwerk bereitgestellt haben, unterstützt die Apigee-Instanz standardmäßig Nicht-SNI-Clients.