Ruta y redirección con envoy

Un ejemplo de envoy.yaml que muestra cómo enrutar y redirigir.

Hay diferentes opciones, ver aquí

https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route.proto#route-redirectaction

Este envoy.yaml enruta /taxgod y /taxgod/ (el segundo probablemente podría omitirse porque el primero también debería coincidir, creo) a un nuevo puerto y un protocolo diferente.

/picockpit es simplemente redirigido a /

y finalmente / se dirige al backend target_picockpit

static_resources:
  oyentes:
  - address:
      socket_address:
        address: 0.0.0.0
        valor_puerto: 80
    cadenas_de_filtro:
    - filters:
      - nombre: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            virtual_hosts:
            - name: backend
              dominios: ["*"]
              rutas:
              - match: { prefijo: "/" }
                redirección:
                  path_redirect: "/"
                  https_redirect: true
          http_filtros:
          - nombre: envoy.router
            config: {}
  - dirección:
      socket_address:
        dirección: 0.0.0.0
        valor_de_puerto: 443
    filter_chains:
    - tls_context:
        common_tls_context:
          tls_certificados:
          - certificate_chain: { filename: "/etc/example-com.crt" }
            private_key: { nombre de archivo: "/etc/ejemplo-com.key" }
          alpn_protocols: [ "h2,http/1.1" ]
      filtros:
      - name: envoy.http_connection_manager
        config:
          stat_prefix: ingress_https
          route_config:
            virtual_hosts:
            - nombre: backend
              dominios: ["*"]
              rutas:
              - match: { prefijo: "/taxgod" }
                redirect: { port_redirect: 2080, path_redirect: "/", scheme_redirect: "http"}
              - match: { prefix: "/taxgod" }
                redirect: { port_redirect: 2080, path_redirect: "/", scheme_redirect: "http"}
              - match: { prefix: "/picockpit/" }
                redirect: { path_redirect: "/" }
              - match: { prefijo: "/picockpit" }
                redirect: { path_redirect: "/" }
              - match: { prefijo: "/gagarin" }
                direct_response: { status: 200, body: { inline_string: "Traer la redención a mi noche oscura. La hermosa rendición es donde quiero estar". } }
              - ...coinciden..: { prefijo: "/" }
                ruta: { cluster: target_picockpit }
          http_filters:
          - nombre: envoy.router
            config: {}
  clusters:
  - nombre: target_taxgod
    connect_timeout: 0.25s
    tipo: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        dirección: taxgod
        valor_puerto: 3000
  - nombre: target_picockpit
    connect_timeout: 0.25s
    tipo: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        dirección: picockpit
        valor_puerto: 3000
admin:
  access_log_path: "/tmp/envoy.log"
  dirección:
    socket_address:
      dirección: 0.0.0.0
      valor_puerto: 9901