Rotta e reindirizzamento con envoy

Un esempio di envoy.yaml che mostra come instradare e reindirizzare.

Ci sono diverse opzioni, vedi qui

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

Questo envoy.yaml instrada /taxgod e /taxgod/ (il secondo potrebbe probabilmente essere omesso perché anche il primo dovrebbe corrispondere, credo) a una nuova porta e a un protocollo diverso.

/picockpit è semplicemente reindirizzato a /

e poi finalmente / viene indirizzato al backend target_picockpit

risorse statiche:
  ascoltatori:
  - indirizzo:
      socket_address:
        indirizzo: 0.0.0.0
        valore_porta: 80
    catene_filtro:
    - filtri:
      - nome: envoy.http_connection_manager
        config:
          codec_type: auto
          prefisso: ingress_http
          route_config:
            virtual_hosts:
            - nome: backend
              domini: ["*"]
              route:
              - match: { prefix: "/" }
                redirect:
                  path_redirect: "/"
                  https_redirect: true
          http_filters:
          - nome: envoy.router
            config: {}
  - address:
      socket_address:
        indirizzo: 0.0.0.0
        valore_porta: 443
    catene_filtro:
    - tls_context:
        common_tls_context:
          tls_certificates:
          - certificate_chain: { filename: "/etc/example-com.crt" }
            private_key: { nome file: "/etc/example-com.key" }
          alpn_protocols: [ "h2,http/1.1" ]
      filtri:
      - nome: envoy.http_connection_manager
        config:
          stat_prefix: ingress_https
          route_config:
            virtual_hosts:
            - nome: backend
              domini: ["*"]
              route:
              - match: { prefisso: "/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: { prefix: "/picockpit" }
                redirect: { path_redirect: "/" }
              - match: { prefix: "/gagarin" }
                direct_response: { status: 200, body: { inline_string: "Portare la redenzione nella mia notte oscura. Bella resa è dove voglio essere". } }
              - match: { prefix: "/" }
                route: { cluster: target_picockpit }
          http_filters:
          - nome: envoy.router
            config: {}
  cluster:
  - nome: target_taxgod
    connect_timeout: 0.25s
    tipo: strict_dns
    lb_policy: round_robin
    host:
    - socket_address:
        indirizzo: taxgod
        valore_porta: 3000
  - nome: target_picockpit
    connect_timeout: 0.25s
    tipo: strict_dns
    lb_policy: round_robin
    host:
    - socket_address:
        indirizzo: picockpit
        valore_porta: 3000
admin:
  access_log_path: "/tmp/envoy.log"
  address:
    socket_address:
      indirizzo: 0.0.0.0
      valore_porta: 9901