Route & Redirection avec envoy

Un exemple de envoy.yaml montrant comment router et rediriger.

Il existe différentes options, voir ici

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

Cet envoy.yaml route /taxgod et /taxgod/ (le second pourrait probablement être omis car le premier devrait aussi correspondre, je pense) vers un nouveau port et un protocole différent.

/picockpit est simplement redirigé vers /

et enfin / est acheminé vers le backend target_picockpit

ressources_statiques :
  auditeurs :
  - adresse :
      adresse_socket :
        adresse : 0.0.0.0
        port_value : 80
    chaînes_de_filtres :
    - filtres :
      - nom : envoy.http_connection_manager
        config :
          codec_type : auto
          stat_prefix : ingress_http
          route_config :
            virtual_hosts :
            - nom : backend
              domaines : ["*"]
              routes :
              - match : { prefix : "/" }
                redirect :
                  path_redirect : "/"
                  https_redirect : true
          http_filters :
          - nom : envoy.router
            config : {}
  - address :
      socket_address :
        adresse : 0.0.0.0
        port_value : 443
    filter_chains :
    - tls_context :
        common_tls_context :
          tls_certificates :
          - certificate_chain : { filename : "/etc/example-com.crt" }
            private_key : { nom de fichier : "/etc/example-com.key" }
          alpn_protocols : [ "h2,http/1.1" ]
      filtres :
      - nom : envoy.http_connection_manager
        config :
          stat_prefix : ingress_https
          route_config :
            virtual_hosts :
            - nom : backend
              domaines : ["*"]
              routes :
              - match : { prefix : "/taxgod" }
                redirect : { port_redirect : 2080, path_redirect : "/", scheme_redirect : "http"}
              - match : { préfixe : "/taxgod" }
                redirect : { port_redirect : 2080, path_redirect : "/", scheme_redirect : "http"}
              - match : { préfixe : "/picockpit/" }
                redirect : { path_redirect : "/" }
              - match : { préfixe : "/picockpit" }
                redirect : { path_redirect : "/" }
              - match : { préfixe : "/gagarine" }
                direct_response : { status : 200, body : { inline_string : "Apporter la rédemption à ma nuit noire. Une belle reddition est l'endroit où je veux être." } }
              - match : { préfixe : "/" }
                route : { cluster : target_picockpit }
          http_filters :
          - nom : envoy.router
            config : {}
  clusters :
  - nom : target_taxgod
    connect_timeout : 0.25s
    type : strict_dns
    lb_policy : round_robin
    hôtes :
    - socket_address :
        adresse : taxgod
        port_value : 3000
  - nom : target_picockpit
    connect_timeout : 0.25s
    type : strict_dns
    lb_policy : round_robin
    hôtes :
    - socket_address :
        adresse : picockpit
        port_value : 3000
admin :
  chemin d'accès_log : " /tmp/envoy.log "
  adresse :
    socket_address :
      adresse : 0.0.0.0
      valeur_du_port : 9901