Leandro Jaeger Lafin
Análista de sistemas no departamento de cardiologia (CI) da Philips
https://www.linkedin.com/in/llafin/
Departamento de cardiologia (CI) já existe desde os anos 90's
90's - Construía softwares desktop que realizavam leituras de máquinas
2007 - Começaram a nascer as primeiras soluções Web
2018 - Começaram os preparativos para ida para a Cloud
ENVOY IS AN OPEN SOURCE EDGE AND SERVICE PROXY, DESIGNED FOR CLOUD-NATIVE APPLICATIONS
Qual
é a sua comunidade?
E afinal, quem o usa?
Por que usar? O que ele se propõe a solucionar?
Aprendizado de soluções como NGINX, HAProxy, balanceadores de carga de hardware e nuvem
OUT OF PROCESS ARCHITECTURE
HTTP/2 AND GRPC SUPPORT
ADVANCED LOAD BALANCING
APIS FOR CONFIGURATION MANAGEMENT
OBSERVABILITY
E como podemos configura-lo e fazer a mágica acontecer......
routes:
  # Defines a routing rule based on the path and headers of the incoming request.
  - match:
      prefix: /
      headers:
        - name: x-forwarded-proto
          exact_match: http
    redirect:
      # Forces a redirection to change the request from http to https.
      path_redirect: /
      https_redirect: true
  - match:
      prefix: /digihero/oauth2/
    route:
      cluster: oauth-proxy
  # Defines a routing rule for the path '/digihero/api/digimon/'
  - match:
      prefix: /digihero/api/digimon/
    route:
      # Redirect the incoming request to the external domain/cluster 'digimon-api'
      cluster: digimon-api
      # Rewrite the path from '/digihero/api/digimon/' to '/api/digimon/'
      prefix_rewrite: /api/digimon/
      host_rewrite_literal: ${DIGIMON_EXTERNAL_DOMAIN}
  # Defines an especific routing rule for the path '/digihero/api/Logger'
  - match:
      prefix: /digihero/api/Logger
    route:
      # Redirect the incoming request to the internal cluster 'dummy-api'
      cluster: dummy-api
      # Manipulates the requests according to the available API version
      # Rewrite the path from '/digihero/api/Logger' to '/v2/Logger'
      prefix_rewrite: /v2/Logger
      
      
      
      
      Configurar e manipular rotas
http_filters:
  # Sets Envoy to check the CORS policies on every request.
  - name: envoy.filters.http.cors
    typed_config: {}
  # Sets Envoy to check the user authentication on every request.
  - name: envoy.filters.http.ext_authz
    typed_config:
      '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
      transport_api_version: V3
      http_service:
        server_uri:
          uri: oauth2-proxy.apps.internal:8080
          cluster: oauth-proxy
          timeout: 4s
        authorization_request:
          allowed_headers:
            patterns:
              - exact: cookie
              - prefix: x-
        authorization_response:
          allowed_client_headers:
            patterns:
              - exact: set-cookie
          allowed_client_headers_on_success:
            patterns:
              - exact: set-cookie
          allowed_upstream_headers:
            patterns:
              - exact: set-cookie
              - contains: authorization
              - prefix: x-auth-request
  # Sets Envoy to execute the following Lua script in the incoming requests.
  - name: envoy.filters.http.lua
    typed_config:
      '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
      inline_code: |
        function envoy_on_request(request_handle)
          -- Retrieves the value of the header 'x-auth-request-access-token'
          local accessToken=request_handle:headers():get("x-auth-request-access-token")
          if not(accessToken == nil or accessToken == '') then 
            -- Adds the access token as the 'Authorization' header in the incoming request.
            request_handle:headers():replace("Authorization","Bearer "..accessToken)
          end
        end
  # Sets Envoy to use the routing configuration defined.
  - name: envoy.filters.http.router
    typed_config: {}
    
    
    
    
    
    Aplicar filtros por requisição
clusters:
  - name: oauth-proxy
    connect_timeout: 4s
    type: logical_dns
    load_assignment:
      cluster_name: oauth-proxy
      endpoints:
        - lb_endpoints:
            - endpoint:
                address:
                  # Defines the endpoint and port for the cluster. See: docker-compose.yml the network config for the container oauth2-proxy.
                  socket_address:
                    address: digihero.oauth2-proxy.apps.internal
                    port_value: 8080
  - name: google
    connect_timeout: 10s
    type: logical_dns
    load_assignment:
      cluster_name: google
      endpoints:
        - lb_endpoints:
            - endpoint:
                address:
                  # Defines the endpoint and port for the cluster.
                  socket_address:
                    # Gets the external domain endpoint from environment variables. See: .env.gateway file.
                    address: google.com
                    port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
        
        
        
        
        
        
        Configurar comunicações, cargas, certificados...