Warum brauchst du ein Tor?
Wir wissen, dass wir selbst in einen Dienst eintreten wollen, und es ist offensichtlich, dass wir keine besonders gute Methode haben. Wir geben direkt die IP -Adresse + Portnummer ein. Wir wissen, dass dieser Ansatz sehr schlecht ist. Mit diesem Ansatz gibt es ein großes Problem. Erstens enthält es die IP -Adresse unserer physischen Maschine. Wenn andere Ihre IP -Adresse betrachten, wissen sie, wo der Dienst bereitgestellt wird, sodass andere Angriffsvorgänge sehr bequem durchführen können.
Zweitens haben wir so viele Dienste, müssen wir sie einzeln nennen? Nehmen wir an, wir haben die Erlaubnisauthentifizierung durchgeführt, und jeder unserer Kunden greift auf Serviceprogramme auf verschiedenen JVMs zu, die auf verschiedenen Maschinen ausgeführt werden. Jeder unserer Dienste benötigt eine Serviceauthentifizierung. Ist das nervig? Es ist offensichtlich sehr nervig.
Dann stehen wir zu diesem Zeitpunkt vor diesen beiden und ihren allgemeinen Problemen und brauchen eine Möglichkeit, sie zu lösen. Schauen wir uns zunächst die Exposition der IP-Adresse und das durch die IP-Adresse nach dem Tod verursachte Einzelpunktproblem an. Muss ich auch die Liste der Dienste für einen solchen Dienst selbst dynamisch verwalten? Ich muss diesen Service selbst nennen. Benötige ich auch eine Lastausgleichssache?
Es gibt auch Dinge über die Exposition von IP -Adresse. Muss ich ein Proxy sein, wie der Reverse -Proxy von Nginx, und es gibt auch Dinge, die öffentliche Module für dieses Ding bereitstellen, wie z. B. Berechtigungsüberprüfung für alle Portale. Wir brauchen jetzt das Zuul API -Gateway. Es löst das obige Problem. Wenn Sie einen bestimmten Dienst anrufen möchten, werden Sie und die IP -Adresse Ihres Dienstes zugeordnet
Wenn Sie den Pfad eingeben, stimmt er mit ihm überein und wird für Sie auf den Service zugreifen. Es wird einen Anfrage -Weiterleitungsprozess haben. Wie Nginx, die spezifische Stärke der Service -Maschine -Instanz, wird sie nicht direkt auf die IP zugreifen, sondern wird zum Eureka -Registrierungszentrum gilt, um die Service -Instanz -ID zu erhalten, dh den Servicenamen. Ich habe das Lastausgleichsband des Kunden verwendet, um erneut auf eine der Serviceinstanzen zuzugreifen.
Das API -Gateway wird hauptsächlich verwendet, um das Problem externer Anrufe durch den Dienst selbst zu lösen und das Problem der Berechtigungsüberprüfung zu lösen. Sie können hier eine Reihe von Filtern integrieren und anrufen, z. B. Shiro, Spring Security und andere Dinge.
Zuul kann einen dynamischen Filtermechanismus laden, um die folgenden Funktionen zu erzielen:
1. Überprüfung und Sicherheit: Identifizieren Sie die Überprüfungsanforderungen für verschiedene Ressourcen und lehnen Sie Anforderungen ab, die nicht mit den Anforderungen entsprechen.
2. Überprüfung und Überwachung: Verfolgen Sie sinnvolle Daten und statistische Ergebnisse an den Randstandorten und bringen uns so genaue Schlussfolgerungen zum Produktionsstatus.
3. Dynamisches Routing: Routenanforderungen an verschiedene Backend -Cluster dynamisch nach Bedarf.
4. Spannungstest: Erhöhen Sie den Lastfluss zum Cluster nach und nach, um das Leistungsniveau zu berechnen.
5. Lastzuweisung: Weisen Sie jedem Lasttyp die entsprechende Kapazität zu und deaktivieren Sie Anforderungen, die den Grenzwert überschreiten.
6. Statische Reaktionsverarbeitung: Erstellen Sie teilweise Antworten direkt an den Randstellen, um zu verhindern, dass sie in den internen Cluster fließen.
7. Multi-Region-Elastizität: Anforderungsrouting in AWS-Regionen wurde entwickelt, um eine diversifizierte ELB-Nutzung zu erreichen und sicherzustellen, dass die Kantenstandorte für Benutzer so nah wie möglich sind.
Als nächstes gehen Sie zu einer kleinen Demo
Der erste Schritt besteht darin, ein neues Zuul -Modul unter dem ursprünglichen Projekt zu erstellen und Abhängigkeiten einzuführen. Der Code ist wie folgt:
<Depepentcy> <gruppe> org.springFramework.cloud </Groupid> <artifactId> Spring-Cloud-Starter-Eureka </artifactid> <version> 1.3.5 <version> 1.3.5.Release </Version> </abhängig>
Geben Sie dann die Annotation von @EnableZuulProxy in die Startkurs ein, und der Code lautet wie folgt:
Server: Port: 5000Spring: Anwendung: Name: api-Gassewayzu: Routen:#Identifizieren Sie den Namen Ihres Dienstes, der hier selbst definiert werden kann. Im Allgemeinen sind die Bequemlichkeit und Spezifikationen mit dem Namen Ihres Service-Hello-Service-Service über diesen Pfad übereinstimmen, dass Sie von außen auf Ihren Service zugreifen können. Ziel ist es, die IP Ihres Geräts und die serviceorientierte Route zu vermeiden und eine verfügbare für Sie auszuwählen. #Sher, Zuul hängt automatisch von Hystrix und Band ab, nicht für den eigenständigen Pfad: /Hello-Service /**# Dies muss der Name des Dienstes in Ihrem Eureka-Registrierungszentrum sein. Daher ist der ServiceID hier konfiguriert, da sie mit Eureka kombiniert wird. Wenn Sie Zuul allein verwenden, müssen Sie die IP Ihrer eigenen Maschine schreiben. #Such als URL: http: // localhost: 8080/Das ist nicht gut genug, um die IP -Tote zu schreiben. Wenn diese IP fehlschlägt und dies eine hohe Verfügbarkeit ist, wird der Service -Registrierungssatz nicht verwendet. ServiceID: Hallo-serviceeureka: #client: #registration center address service-url: defaultZone: http: // localhost: 8888/eureka/, http: // localhost: 8889/eureka/
Starten Sie dann das Registrierungszentrum und zwei Hello-Service-Dienstleister im vorherigen Artikel. Dann führen wir es aus und werfen einen Blick auf seine Anfrage -Weiterleitungsfunktion, um festzustellen, ob sie in die beiden Dienste abfragen.
Geben Sie localhost: 5000/hello service/hello wie folgt ein:
Dann noch einmal aktualisieren:
Sie können sehen, dass Zuul eine Anfrage gestellt hat, es zu verteilen. Es wird einem bestimmten Computer basierend auf Ihrem Servicenamen Hello-Servie zugeordnet. Ist das nicht die Funktion eines umgekehrten Proxy?
Zuul kann auch Anforderungsfilterung durchführen. Lassen Sie uns also die Token -Überprüfung durchführen, um nachzuweisen. Zunächst müssen wir eine neue Tokenfilter -Klasse erstellen, um die Zuulfilter -Klasse zu erben und ihre vier Schnittstellen zu implementieren. Der Code ist wie folgt:
Paket hjc.zuul; importieren com.netflix.zuul.zuulfilter; import com.netflix.zuquestcontext; import Javax.servlet.http.httpServletRequest;/*** Erstellt von Cong am 2018/5/18. */Public Class Tokenfilter erweitert Zuulfilter {// vier Typen: Pre, Routing, Fehler, Post // PRE: Es wird hauptsächlich in der Routing -Mapping -Stufe verwendet, um die Routing -Mapping -Tabelle zu ermitteln // Routing: Der spezifische Routing -Weiterleitungsfilter befindet sich im Routing -Router. Beim Weiterleiten der spezifischen Anforderung wird sie aufgerufen // Fehler: Sobald der vorherige Filterfehler auftritt, wird der Fehlerfilter aufgerufen. // post: Dieser Filter wird nicht aufgerufen, nachdem Routing und Fehler abgeschlossen sind. Es ist @Override public String filterType () {return "pre"; } // Passen Sie die Reihenfolge der Ausführung von Filtern an. Je größer der Wert ist, desto später die Ausführung. Je kleiner der Wert ist, desto mehr wird er ausgeführt, desto mehr wird er zuerst ausgeführt. @Override public int filterorder () {return 0; } // steuern Sie den Filter, um wirksam zu werden oder nicht. Sie können eine Logikzeichenfolge darin schreiben, um @Override public boolean silfilter () {return true; } // Filter logic @Override public Object run () {requestContext context = requestContext.getCurrentContext (); HttpServletRequest request = context.getRequest (); String token = request.getParameter ("token"); if (token == null) {context.setsendzuResponse (false); context.setResponSestatuscode (401); context.setResponsebody ("nicht authriert"); null zurückkehren; } return null; }}FilterType: Gibt eine Zeichenfolge zurück, die den Typ des Filters darstellt. In Zuul sind vier Filtertypen mit unterschiedlichen Lebenszyklen definiert, wie folgt:
1. pre : Es kann aufgerufen werden, bevor die Anfrage geleitet wird. Es wird verwendet, um die Routing -Mapping -Tabelle während der Routing -Mapping -Phase zu finden.
2.route : wird während der Routing -Anfrage aufgerufen. Der spezifische Routing -Weiterleitungsfilter wird aufgerufen, wenn die spezifische Weiterleitung des Routers aufgerufen wird.
3. error : Aufgerufen, wenn bei der Verarbeitung der Anforderung ein Fehler auftritt
post
Hier erklären wir die Ausnahme, die auftritt, wenn der Zuul -Filter eine Netzwerkanforderung ausführt. Die von Try-Catch erfasste Ausnahme kann nicht direkt auf die Seite im Filter geworfen werden. Die von der Anwendung ausgelöste Ausnahme kann mit der Methode context.set () in der Fang auf die Seite zurückgegeben werden. wie folgt:
try {Business Logic ...} catch (Ausnahme E) {RequestContext context = RequestContext.getCurrentContext (); context.set ("error.status_code", 401); context.set ("error.exception", e); context.set ("error.message", "sfdfsdf");}Als nächstes müssen Sie diesen Filter zum Frühling hinzufügen und die Frühling verwalten lassen. Der Code ist wie folgt:
Paket hjc; import hjc.zuul.tokenfilter; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure org.springFramework.context.annotation.bean;@SpringBootApplication@enableZuulProxypublic Class Zuulapplication {public static void main (String [] args) {SpringApplication.run (Zuulapplication.class, Args); } // Überlassen Sie den Filter dem Spring Management @Bean public tokenFilter tokenFilter () {return New tokenFilter (); }}Lassen Sie uns als nächstes wie folgt die Startkurs und den ersten Zugriff ohne Token starten:
Sie können sehen, dass eine Nachricht ohne Erlaubnis zurückgegeben wird. Hier möchte ich sagen, dass Token normalerweise in den Anfrage -Header platziert werden. Hier tun wir das nicht zu Demonstrationszwecken.
Dann nehmen Sie das Token und besuchen Sie es wie folgt:
Sie können sehen, dass unsere Anfrage gesendet wurde.
Hier werde ich über die Standardroute sprechen und die Zuul -Konfiguration wie folgt löschen:
Server: Port: 5000SPRING: Anwendung: Name: api-Gassewayeureka: #Client Client: #register Center Address Service-URL: defaultZone: http: // localhost: 8888/eureka/, http: // localhost: 8889/eureka/eureka/
Starten Sie dann wie folgt neu und setzen Sie den Zugriff fort:
Anwesend
Sie können sehen, dass wir weiterhin zugreifen können. Wir haben nichts zu tun, aber wir können trotzdem darauf zugreifen. Das liegt daran, dass Sie standardmäßig mit Ihrem Service-Namen Hello-Service automatisch deklariert werden.
Wenn ich es also nicht automatisch für mich deklarieren möchte und ich es selbst definieren möchte, kann ich Zuu.Nigored-Services in der YML-Konfigurationsdatei verwenden, um sie wie Filterung wie folgt zu filtern: "
Zuul: #IF ignorierte Dienste:* bedeutet, dass alle Standardrouten abgelaufen sind. Sie müssen sie einzeln mit ihnen anpassen. Niemand wird so gefickt sein, es sei denn, Sie begegnen auf seltsames Geschäft ignorieren Sie die Services:
Sprechen wir zum Beispiel über die Zuordnungsregeln
Zuul: Routen:#Identifizieren Sie den Namen Ihres Dienstes, Sie können ihn hier selbst definieren. Im Allgemeinen sind die Bequemlichkeit und Spezifikationen mit dem Namen Ihres Service-Hello-Service-Services:#-Service-kartierter Pfad über diesen Pfad übereinstimmen, dass Sie von außen auf Ihren Service zugreifen können. Ziel ist es, die IP Ihres Geräts zu vermeiden, und die serviceorientierte Route ist für Sie. #Where Zuul hängt automatisch von Hystrix und Band ab, nicht für den eigenständigen Pfad: /Hello-Service /**#Dies muss der Name Ihres Eureka-Registrierungszentrums sein. Daher ist der ServiceID hier konfiguriert, da er mit Eureka kombiniert wird. Wenn Sie Zuul allein verwenden, müssen Sie die IP Ihres Geräts als URL als URL schreiben: http: // localhost: 8080/das ist schlecht, es bedeutet, die IP -Tote zu schreiben. Wenn diese IP fehlschlägt und eine hohe Verfügbarkeit, wird der Service-Registrierungssatz nicht verwendet.
Die beiden Zuordnungen der Zuul-Konfiguration hier haben /Hallo-Service /. Sie können sehen, dass/Hallo-Service/** inklusive/Hallo-Service/ext/**. Gibt es Konflikte, wenn Sie diese beiden Pfade abgleichen? Wie geht es damit um? Wer wird zuerst übereinstimmen?
Hier ist die in YML definierte Reihenfolge zu entsprechen. Wenn es sich um eine Konfigurationsdatei im Format von Application.Properties handelt, kann diese Reihenfolge nicht garantiert werden. Die Konfigurationsdateien im YML -Format sind nachgedacht, was garantiert werden kann. Bitte beachten Sie dies hier.
Was ist, wenn wir eine passende Regel definieren wollen? Dann müssen wir eine Bohne in der Startkurs definieren, die Ihre Route wie folgt bestimmt:
Ich werde es hier nicht demonstrieren. Wenn Sie es brauchen, suchen Sie langsam nach Informationen.
Es gibt auch ignorierte Muster: wie folgt:
Zuul: Routen:#Identifizieren Sie den Namen Ihres Dienstes, Sie können ihn hier selbst definieren. Im Allgemeinen sind die Bequemlichkeit und Spezifikationen mit dem Namen Ihres Service-Hello-Service-Services:#-Service-kartierter Pfad über diesen Pfad übereinstimmen, dass Sie von außen auf Ihren Service zugreifen können. Ziel ist es, die IP Ihres Geräts zu vermeiden, und die serviceorientierte Route ist für Sie. #Where Zuul hängt automatisch von Hystrix und Band ab, nicht für den eigenständigen Pfad: /Hello-Service /**#Dies muss der Name Ihres Eureka-Registrierungszentrums sein. Daher ist der ServiceID hier konfiguriert, da er mit Eureka kombiniert wird. Wenn Sie Zuul alleine verwenden, müssen Sie die IP Ihres Geräts als URL: http: // localhost: 8080/das schlecht schreiben, es bedeutet, eine tote IP zu schreiben. Wenn diese IP fehlschlägt und eine hohe Verfügbarkeit, wird der Service-Registrierungssatz nicht verwendet.
Ignorieren Sie Muster: Zeigt an, dass der Pfad von /Hallo /** blockiert ist. Auch wenn Sie/Hallo-Service/Hallo/** nicht möglich sind, blockieren Sie es trotzdem. Wir können diese Konfiguration weiter verfeinern. Wenn ich beispielsweise die /Hallo -Schnittstelle nicht weiterleiten möchte, können wir sie wie oben konfigurieren
Was ist, wenn wir auch das Präfix eines Dienstes konfigurieren möchten? Der Code ist wie folgt:
Zuul: Routen:#Identifizieren Sie den Namen Ihres Dienstes, Sie können ihn hier selbst definieren. Im Allgemeinen sind die Bequemlichkeit und Spezifikationen mit dem Namen Ihres Service-Hello-Service-Services:#-Service-kartierter Pfad über diesen Pfad übereinstimmen, dass Sie von außen auf Ihren Service zugreifen können. Ziel ist es, die IP Ihres Geräts zu vermeiden, und die serviceorientierte Route ist für Sie. #Where Zuul hängt automatisch von Hystrix und Band ab, nicht für den eigenständigen Pfad: /Hello-Service /**#Dies muss der Name Ihres Eureka-Registrierungszentrums sein. Daher ist der ServiceID hier konfiguriert, da er mit Eureka kombiniert wird. Wenn Sie Zuul alleine verwenden, müssen Sie die IP Ihres Geräts als URL als URL schreiben: http: // localhost: 8080/das ist nicht gut genug, um eine tote IP zu schreiben. Wenn diese IP fehlschlägt, ist sie in hohem Maße verfügbar und der Service-Registrierungssatz wird nicht verwendet.
Sie können sehen, dass die Dienste, die Sie besuchen
Was sollen wir tun, wenn wir in meine Region springen wollen, wenn wir einen Weg zu Zugang haben wollen?
Ich hoffe, dass der Benutzer beim Zugriff auf /lokal automatisch zu dieser Methode springen kann. Zu diesem Zeitpunkt müssen wir Zuuls lokale Sprung verwenden, und die Konfigurationsmethode lautet wie folgt:
Zuul: Präfix:/api ignorierte Muster:/**/Hallo/** Routen: Lokal: Pfad:/Hallo-Service/** URL: Vorwärts:/Lokal
Einige der häufig verwendeten, die sich mit Springsicherheit oder einigen Komponenten von Drittanbietern verbinden, erhalten einige Ihrer Cookie-Informationen. Zu Zul Gateway hat alle Ihre Cookie -Informationen aus Sicherheitsgründen getötet, und es gibt keine Möglichkeit, Kekse herzustellen. Es wird standardmäßig getötet.
Hier stellt Zuul Zuul.Sensitive Header an, um diese Cookies und Header für Sie herzustellen und diese Informationen nicht zu filtern. Steuern Sie Ihre sensiblen Informationen.
Standardmäßig können sensible Header -Informationen nicht durch das API -Gateway weitergeleitet werden. Wir können es durch die folgende Konfiguration passieren:
Zuul: Routen: Hallo-Service: Pfad: /Hallo-Service /** ServiceID: Hallo-Sehrempfindel-Header: Cookie, Header und andere Dinge
Es kann auch mit einigen detaillierten Konfigurationen von Hytrix verwendet werden, wie bereits erwähnt. Ich werde hier nicht darüber reden
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.