Partage de technologie

Passerelle SpringCloud

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

effet

  • Gestion unifiée, facile à surveiller
  • Sécurité, limitation de courant : filtrez les informations illégales au niveau de la couche passerelle
  • passerelle externe nginx, passerelle intranet
  • nginx peut être amélioré avec Lua ou Kong

concept

  • identifiant : n'importe quel nom
  • uri : l'adresse du service proxy. id et uri sont obligatoires, le prédicat et le filtre sont facultatifs
  • Prédicat : peut être utilisé pour faire correspondre l'URI pour accéder à la passerelle. S'il correspond, l'itinéraire actuel prendra effet.
  • Filtre : une instance de GatewayFilter, ajoutant une logique avant ou après le proxy, avec la plus grande flexibilité

Flux de traitement

  • Tout d'abord, Handler Mapping traite l'URL, puis la transmet à Web Handler. Une fois le traitement terminé, il appelle le service proxy réel. Une fois que le service proxy a répondu, il exécute la logique. de la seconde moitié du filtre. Renvoie le résultat à WebHandler, puis à HandlerMapping, et enfin au client.

utiliser

gateway:
      discovery:
        locator:
          enabled: true # 启用自动根据服务ID生成路由
          lower-case-service-id: true # 设置路由的路径为小写的服务ID
  • 1
  • 2
  • 3
  • 4
  • 5

configuration yml

  • Si les éléments de la liste ont plusieurs champs, vous avez besoin de "-" et de deux-points pour spécifier respectivement chaque champ et valeur ; s'il n'y a qu'un seul champ, vous pouvez utiliser des virgules pour le séparer.
  • Configuration du type d'objet, chaque champ peut être configuré via "-" et deux points
  • Type de carte : clé, valeur séparée par deux points
predicates:
  - Path=/sendOrder
  - Query=name,ma.
  - name: Query
    args:
      param: id
      regexp: d+
 #predicates是List, 它的元素是
 public class PredicateDefinition {

	@NotNull
	private String name;

	private Map<String, String> args = new LinkedHashMap<>();
  }
  等号分割转成对象的写法不是yml内置支持的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

prédicat

  • La configuration du prédicat est une Liste dont les éléments peuvent être des chaînes dans un format spécifique, ou des objets. Méthode d'écriture de chaîne : divisée par le signe égal, la première partie est le nom du prédicat, la deuxième partie args est séparée par des virgules, la valeur est enregistrée dans la valeur Map et la clé Map est automatiquement générée. Méthode d'écriture d'objet : PredicateDefinition
  • S'il y a des virgules et des deux-points dans les arguments eux-mêmes, le format de chaîne ne peut pas être utilisé
  • La méthode shortType définit la méthode d'analyse des paramètres args sur ConfigClass : raccourciFieldOrder supprime le préfixe raccourciFieldPrefix et correspond au nom du champ ConfigClass. La valeur du paramètre args correspond à la valeur du champ de ConfigClass : liste séparée par des virgules ; : Liste séparée par des virgules, mais la dernière La valeur est une valeur booléenne, qui est finalement convertie en une Carte de 2 clés La valeur de la première clé est la Liste devant la valeur booléenne, et la deuxième clé est la. Valeur booléenne.
  • Utilisé pour faire correspondre les demandes d'accès à la passerelle (telles que l'URI, les paramètres de requête, les en-têtes de requête). En cas de correspondance, l'itinéraire actuel prendra effet.
  • Correspondant à l'implémentation de GatewayPredicate, la classe d'implémentation est créée par la fabrique. La classe d'implémentation de RoutePredicateFactory. La spécification de dénomination de la classe d'implémentation est : nom du prédicat + RoutePredicateFactory.
  • Le nom du prédicat correspond au préfixe du nom de classe de la classe d'implémentation de la fabrique, et le paramètre de prédicat args correspond à la classe ConfigClass de la fabrique.
  • Plusieurs prédicats sontetRelation
  • Lorsque le prédicat ne passe pas, la passerelle renvoie 404

Chemin

  • Faites correspondre les chemins, prenez en charge la correspondance des fourmis et extrayez les uriVariables via {}

Requête

  • Existe-t-il un nom de paramètre de requête http correspondant ? La valeur peut être régulière.
  • le nom est une requête fixe, args a 2 valeurs, param et regexp, correspondant au nom et à la valeur du paramètre de requête
  • Lorsque seul le nom est configuré, cela signifie que tant que le paramètre de requête existe, il sera transmis.

Entête

  • En-têteRoutePredicateFactory
  • Faites correspondre le nom et la valeur de l'en-tête de la demande. Vous ne pouvez faire correspondre que le nom. La valeur réelle de l'en-tête de la demande peut être multiple. Tant qu'il y a une correspondance, la valeur de configuration prend en charge les expressions régulières.

Méthode

  • Correspond à la méthode de requête HTTP, la configuration doit être en lettres majuscules et séparée par des virgules.

Adresse distante

  • L'IP du client correspondant à la requête, pour être précis, l'IP du dernier proxy réseau, peut être multiple, séparée par des virgules

Hôte

  • Correspond à la valeur de la partie hôte dans l'en-tête de la requête Host (à l'exclusion du port). Elle peut être multiple, séparée par des virgules et correspondre par fourmi.
  • Utilisez AntPathMatcher pour faire la correspondance et le séparateur de chemin est "."

Biscuit

  • Faites correspondre le nom et la valeur du cookie. La valeur peut être mise en correspondance régulièrement.

Poids

  • Utilisé pour l'équilibrage de charge de différents itinéraires. Les itinéraires du même groupe sont chargés en fonction du poids.
  • Vous pouvez configurer 2 valeurs, séparées par des virgules, qui sont le regroupement et le poids.
  • WeightCalculatorWebFilter : une fois démarré, une carte à deux couches est générée en fonction de la configuration de poids. La première couche est le nom du groupe et la deuxième couche est l'ID de routage. Lorsque la demande arrive, un nombre aléatoire de 0 à 1 est généré. et un ID de routage est sélectionné pour chaque groupe.
  • WeightRoutePredicateFactory : lors du filtrage de prédicat, filtre en fonction du groupe et de l'ID de route

filtre

  • La méthode d'écriture de la configuration est la même que celle du prédicat. La méthode d'écriture de la chaîne : divisée par le signe égal. La première partie correspond au préfixe du nom de classe GatewayFilterFactory de la fabrique de filtres, et la deuxième partie est le paramètre.
  • Les filtres sont utilisés pour modifier les demandes et les réponses

Ajouter un en-tête de demande

  • Ajouter des en-têtes de requête, qui peuvent être obtenus par le backend
  • La valeur de l'en-tête de requête prend en charge l'acquisition dynamique à partir d'uriVariables

Préfixe de bande

  • Il n'y a qu'une seule valeur entière n. Après avoir divisé le chemin demandé par "/", supprimez le préfixe n.

Limiter

Interdomaine

spring.cloud.gateway.globalcors:
  cors-configurations:
    '[/**]': #跨域的uriPattern
      allowedHeaders: "*"
      allowedOrigins: "*"
      allowedMethods:
        - POST
        - OPTIONS
        - GET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Le serveur détermine s'il s'agit d'une requête inter-domaine en fonction du fait que l'origine de l'en-tête de la requête et le schéma, l'hôte et le port de l'URL de la requête sont identiques. Tant qu'il y a une différence, il s'agit d'une requête inter-domaine.
  • Il doit y avoir une configuration inter-domaine et l'uri demandé correspond à l'uriPattern de la configuration inter-domaine. La passerelle déterminera si elle est inter-domaine. Si elle est inter-domaine, elle autorisera les en-têtes de requête inter-domaines. sources, méthodes de requête et requêtes réelles dans la configuration inter-domaines. Si l'en-tête de requête, la source et la méthode de requête correspondent, s'ils correspondent tous, exécutez un accès inter-domaine, sinon renvoie 403Forbiden.
  • org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandler
  • org.springframework.web.cors.reactive.DefaultCorsProcessor#process

Générer automatiquement des itinéraires

  • Prend en charge l'obtention de l'ID de service via la découverte de services et génère automatiquement une configuration de routage basée sur l'ID de service.L'URI de la configuration de routage par défaut est lb://serviceId, le prédicat est /serviceId/** et le filtre est Rewritepath pour supprimer serviceId.

filtre global

Filtre client d'équilibrage de charge réactive

  • Pour traiter l'URI de routage avec le schéma lb, obtenez d'abord l'instance de service en fonction du nom du service via ServiceInstanceListSupplier, puis équilibrez la charge via l'instance ReactorLoadBalancer.

RouteToRequestUrlFilter

  • Faites 2 choses : 1. Prenez en charge les schémas à 2 couches, enregistrez le schéma externe dans GATEWAY_SCHEME_PREFIX_ATTR, puis supprimez-le. 2. Utilisez le schéma interne, l'hôte et le port pour remplacer l'URI réellement demandé afin d'effectuer le transfert.