|
Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar. |
Verwendung eines externen Gateways mit Rancher
Bei Verwendung des Gateway-API-Netzwerk-Exposure-Typs kann Rancher eine eigene Gateway-Ressource erstellen und verwalten. Wenn Sie jedoch ein vorhandenes Gateway haben, das Sie unabhängig verwalten (zum Beispiel ein gemeinsames Gateway, das von mehreren Anwendungen verwendet wird), müssen Sie Ihre eigenen HTTPRoute-Ressourcen erstellen, um den Datenverkehr zu Rancher zu leiten.
In diesem Abschnitt wird erläutert, wie die erforderlichen HTTPRoute-Ressourcen manuell erstellt werden, wenn ein extern verwaltetes Gateway verwendet wird.
Voraussetzungen
-
Eine vorhandene Gateway-Ressource, die in Ihrem Cluster konfiguriert und betriebsbereit ist
-
Kenntnis Ihres Gateways:
-
Name und Namespace
-
Listener-Namen (sectionName) für HTTP- und/oder HTTPS-Datenverkehr
-
-
Rancher installiert mit
networkExposure.typeauf etwas anderem alsgateway(z. B.noneoderingress)
Anforderungen an Cross-Namespace-Gateway
Wenn sich Ihr Gateway in einem anderen Namespace als Rancher befindet (z. B. Gateway in gateway-system, Rancher in cattle-system), muss das Gateway so konfiguriert werden, dass es HTTPRoutes aus dem Rancher-Namespace akzeptiert. Standardmäßig erlaubt die Gateway-API nur Routen aus demselben Namespace wie das Gateway.
Der Gateway-Besitzer muss allowedRoutes auf den relevanten Listenern konfigurieren. Es gibt zwei Optionen:
Option 1: Erlauben Sie Routen aus allen Namespaces
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: shared-gateway
namespace: gateway-system
spec:
gatewayClassName: example
listeners:
- name: https
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: All
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: All
Option 2: Erlauben Sie Routen aus bestimmten Namespaces (restriktiver)
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: shared-gateway
namespace: gateway-system
spec:
gatewayClassName: example
listeners:
- name: https
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
shared-gateway-access: "true"
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
shared-gateway-access: "true"
Stellen Sie beim Verwenden des Selektoransatzes sicher, dass der Rancher-Namespace das erforderliche Label hat:
kubectl label namespace cattle-system shared-gateway-access=true
|
Wenn das Gateway und Rancher im selben Namespace sind, ist keine zusätzliche Konfiguration erforderlich – die Standard- |
Bestimmung Ihrer Rancher-Dienstwerte
Bevor Sie HTTPRoute-Ressourcen erstellen, identifizieren Sie die folgenden Werte aus Ihrer Rancher-Installation:
| Wert | Wie man bestimmt | Beispiel |
|---|---|---|
Release-Name |
Der in |
|
Namespace |
Der Namespace, in dem Rancher installiert ist |
|
Hostname |
Der |
|
TLS-Modus |
Der |
|
Service HTTP deaktiviert |
Der |
|
Der Rancher-Dienstname folgt dem Muster: <release-name>-rancher (oder nur <release-name>, wenn der Release-Name bereits "rancher" enthält).
HTTPRoute-Konfiguration
Primary HTTPRoute
Erstellen Sie eine HTTPRoute, um den Datenverkehr von Ihrem Gateway zum Rancher-Dienst zu leiten. Die Konfiguration hängt von Ihrer TLS-Einrichtung ab:
Wenn TLS am Gateway oder innerhalb von Kubernetes (tls: ingress, tls: secret oder tls: letsEncrypt) endet:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
namespace: cattle-system # Must match Rancher's namespace
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-https-listener-name> # Your Gateway's HTTPS listener
hostnames:
- <your-rancher-hostname> # e.g., rancher.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher # Your Rancher service name
port: 80 # Use 443 if service.disableHTTP=true
Wenn TLS extern endet (tls: external):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
namespace: cattle-system
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-http-listener-name> # Your Gateway's HTTP listener
hostnames:
- <your-rancher-hostname>
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher
port: 80
HTTP zu HTTPS Weiterleitungsroute (Optional)
Wenn TLS an oder innerhalb von Kubernetes (nicht extern) endet, möchten Sie möglicherweise den HTTP-Verkehr auf HTTPS umleiten. Erstellen Sie eine zusätzliche HTTPRoute:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher-http-redirect
namespace: cattle-system
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-http-listener-name> # Your Gateway's HTTP listener
hostnames:
- <your-rancher-hostname>
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
Verwendung von extraObjects
Sie können diese HTTPRoute-Ressourcen direkt in Ihrer Rancher Helm-Installation mit dem extraObjects-Wert einfügen. Dies hält alle Ressourcen zusammen verwaltet:
# values.yaml
hostname: rancher.example.com
tls: ingress
extraObjects:
- apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
spec:
parentRefs:
- name: my-shared-gateway
namespace: gateway-system
sectionName: https
hostnames:
- rancher.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher
port: 80
- apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher-http-redirect
spec:
parentRefs:
- name: my-shared-gateway
namespace: gateway-system
sectionName: http
hostnames:
- rancher.example.com
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
Backend-Portauswahl
Der Port in backendRefs hängt von Ihrer service.disableHTTP-Einstellung ab:
service.disableHTTP |
Backend-Port |
|---|---|
|
|
|
|
Zusammenfassung der Listener-Auswahl
| TLS-Konfiguration | Primärer Routen-Listener | Umleitungsroute |
|---|---|---|
|
HTTP-Listener |
Nicht erforderlich |
|
HTTPS-Listener |
HTTP-Listener (optional) |
|
HTTPS-Listener |
HTTP-Listener (optional) |
|
HTTPS-Listener |
HTTP-Listener (optional) |
Fehlerbehebung
HTTPRoute wird nicht akzeptiert:
-
Überprüfen Sie, ob der Gateway-Name und der Namespace korrekt sind
-
Stellen Sie sicher, dass
sectionNamemit einem vorhandenen Listener auf Ihrem Gateway übereinstimmt -
Überprüfen Sie, ob der Listener Routen aus dem Rancher-Namespace zulässt (siehe die Konfiguration des Gateways
allowedRoutes)
Verbindung abgelehnt oder Zeitüberschreitungen:
-
Bestätigen Sie, dass der Rancher-Dienst existiert und Endpunkte hat:
kubectl get endpoints rancher -n cattle-system -
Überprüfen Sie, ob der Backend-Port mit Ihrer
service.disableHTTP-Einstellung übereinstimmt
Zertifikatfehler:
-
Wenn Sie
tls: ingressodertls: secretverwenden, stellen Sie sicher, dass der HTTPS-Listener Ihres Gateways das entsprechende Zertifikat konfiguriert hat -
Überprüfen Sie, ob das Zertifikat Ihren Rancher-Hostnamen abdeckt