Compartir tecnología

Puerta de enlace de SpringCloud

2024-07-12

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

efecto

  • Gestión unificada, fácil de monitorear
  • Seguridad, limitación actual: filtrar información ilegal en la capa de puerta de enlace
  • puerta de enlace externa nginx, intranet de puerta de enlace
  • nginx se puede mejorar con Lua o Kong

concepto

  • id: el nombre es arbitrario
  • uri: la dirección del servicio proxy. id y uri son obligatorios, predicado y filtro son opcionales
  • Predicado: se puede utilizar para hacer coincidir la uri para acceder a la puerta de enlace. Si coincide, la ruta actual entrará en vigor.
  • Filtro: una instancia de GatewayFilter, que agrega lógica antes o después del proxy, con la mayor flexibilidad

Flujo de procesamiento

  • Primero, Handler Mapping procesa la URL y luego se la entrega a Web Handler. Una vez que se completa el procesamiento, llama al servicio proxy real y ejecuta la lógica. de la segunda mitad del filtro Devuelve el resultado a WebHandler, luego a HandlerMapping y finalmente al cliente.

usar

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

configuración yml

  • Si los elementos de la lista tienen varios campos, necesita "-" y dos puntos para especificar cada campo y valor respectivamente; si solo hay un campo, puede usar comas para separarlo.
  • Configuración del tipo de objeto, cada campo se puede configurar mediante "-" y dos puntos
  • Tipo de mapa: clave, valor separado por dos puntos
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

predicado

  • La configuración del predicado es una Lista, cuyos elementos pueden ser cadenas en un formato específico u objetos. Método de escritura de cadenas: dividido por signo igual, la primera parte es el nombre del predicado, la segunda parte los argumentos están separados por comas, el valor se guarda en el valor del Mapa y la clave del Mapa se genera automáticamente. Método de escritura de objetos: PredicateDefinition
  • Si hay comas y dos puntos en los argumentos, no se puede utilizar el formato de cadena
  • El método shortType define el método de análisis de los parámetros args para ConfigClass: shortFieldOrder elimina el prefijo shortFieldPrefix y corresponde al nombre del campo ConfigClass. El valor del parámetro args corresponde al valor del campo de ConfigClass; : Lista separada por comas, pero el último El valor es un valor booleano, que eventualmente se convierte en un Mapa de 2 claves. El valor de la primera clave es la Lista delante del valor booleano, y la segunda clave es la. Valor booleano.
  • Se utiliza para hacer coincidir solicitudes para acceder a la puerta de enlace (como uri, parámetros de consulta, encabezados de solicitud). Si coinciden, la ruta actual entrará en vigor.
  • Correspondiente a la implementación de GatewayPredicate, la clase de implementación es creada por la fábrica. La fábrica es la clase de implementación de RoutePredicateFactory. La especificación de nomenclatura de la clase de implementación es: nombre de predicado + RoutePredicateFactory. Por ejemplo, Path corresponde a PathRoutePredicateFactory.
  • El nombre del predicado corresponde al prefijo del nombre de clase de la clase de implementación de fábrica, y los argumentos del parámetro de predicado corresponden a la ConfigClass de fábrica.
  • Múltiples predicados sonyRelación
  • Cuando el predicado no pasa, la puerta de enlace devuelve 404

Camino

  • Haga coincidir rutas, admita la coincidencia de hormigas y extraiga uriVariables a través de {}

Consulta

  • ¿Existe un nombre de parámetro de solicitud http correspondiente? El valor puede ser regular.
  • El nombre es fijo Consulta, args tiene 2 valores, parámetro y expresión regular, correspondientes al nombre y valor del parámetro de consulta.
  • Cuando solo se configura el nombre, significa que mientras exista el parámetro de solicitud, se pasará.

Encabezamiento

  • Encabezado Ruta Predicado Fábrica
  • Haga coincidir el nombre y el valor del encabezado de la solicitud. Solo puede hacer coincidir el nombre. El valor del encabezado de la solicitud real puede ser múltiple. Siempre que haya una coincidencia, el valor de configuración admite expresiones regulares.

Método

  • Coincide con el método de solicitud HTTP. La configuración debe estar en letras mayúsculas y separada por comas.

Dirección remota

  • La IP del cliente que coincide con la solicitud, para ser precisos, la IP del último proxy de red, puede ser múltiple, separada por comas.

Anfitrión

  • Coincide con el valor de la parte del host en el encabezado de la solicitud del Host (excluyendo el puerto). Puede ser múltiple, estar separado por comas y puede coincidir con ant.
  • Utilice AntPathMatcher para hacer coincidir y el separador de ruta es "."

Galleta

  • Haga coincidir el nombre y el valor de la cookie. El valor se puede hacer coincidir periódicamente.

Peso

  • Se utiliza para equilibrar la carga de diferentes rutas. Las rutas del mismo grupo se cargan según el peso.
  • Puedes configurar 2 valores, separados por comas, que son agrupación y peso.
  • WeightCalculatorWebFilter: cuando se inicia, se genera un mapa de dos capas según la configuración de peso. La primera capa es el nombre del grupo y la segunda capa es el ID de ruta. Cuando llega la solicitud, se genera un número aleatorio de 0 a 1. Se selecciona un ID de ruta para cada grupo.
  • WeightRoutePredicateFactory: al filtrar predicados, filtre según el grupo y el ID de ruta

filtrar

  • El método de escritura de la configuración es el mismo que el del predicado. El método de escritura de la cadena: dividir por signo igual. La primera parte corresponde al prefijo del nombre de la clase GatewayFilterFactory de la fábrica de filtros y la segunda parte es el parámetro.
  • Los filtros se utilizan para modificar solicitudes y respuestas.

Agregar encabezado de solicitud

  • Agregue encabezados de solicitud, que el backend puede obtener
  • El valor del encabezado de la solicitud admite la adquisición dinámica de uriVariables

Prefijo de desprendimiento

  • Solo hay un valor entero n. Después de dividir la ruta solicitada por "/", elimine el prefijo n.

Limitando

Dominio cruzado

spring.cloud.gateway.globalcors:
  cors-configurations:
    '[/**]': #跨域的uriPattern
      allowedHeaders: "*"
      allowedOrigins: "*"
      allowedMethods:
        - POST
        - OPTIONS
        - GET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • El servidor determina si se trata de una solicitud entre dominios en función de si el encabezado de la solicitud Origen y el esquema, el host y el puerto de la URL de la solicitud son los mismos. Siempre que haya una diferencia, es una solicitud entre dominios.
  • Debe haber una configuración entre dominios y el uri solicitado coincide con el uriPattern de la configuración entre dominios. La puerta de enlace determinará si es entre dominios y permitirá encabezados de solicitud entre dominios. fuentes, métodos de solicitud y solicitudes reales en la configuración entre dominios. Si el encabezado de la solicitud, la fuente y el método de solicitud coinciden, si todos coinciden, ejecute el acceso entre dominios; de lo contrario, devuelva 403Forbiden.
  • org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandler
  • org.springframework.web.cors.reactive.DefaultCorsProcessor#proceso

Generar rutas automáticamente

  • Admite la obtención de ID de servicio a través del descubrimiento de servicios y genera automáticamente una configuración de enrutamiento basada en la ID de servicio.El uri de la configuración de enrutamiento predeterminada es lb://serviceId, el predicado es /serviceId/** y el filtro es Rewritepath para eliminar serviceId.

filtro global

Filtro de cliente del equilibrador de carga reactiva

  • Para procesar el URI de enrutamiento con el esquema lb, primero obtenga la instancia de servicio de acuerdo con el nombre del servicio a través de ServiceInstanceListSupplier y luego equilibre la carga a través de la instancia de ReactorLoadBalancer.

Ruta a filtro de URL de solicitud

  • Haga 2 cosas: 1. Admita esquemas de 2 capas, guarde el esquema externo en GATEWAY_SCHEME_PREFIX_ATTR y luego elimínelo. 2. Utilice el esquema interno, el host y el puerto para reemplazar el URI solicitado real para lograr el reenvío.