Envoy Proxy installeren en configureren op Debian 11

Envoy proxy is een gratis en open-source service proxy ontworpen voor cloud-native toepassingen. Het is vergelijkbaar met Nginx en haproxy die gebruikt kunnen worden als reverse proxy, maar Envoy proxy is ontworpen voor moderne diensten en infrastructuur.

Envoy is een krachtige service proxy die werkt met elke applicatietaal. Het gebruikt YAML configuratiebestanden voor statische configuratie en gebruikt ook een set op gRPC gebaseerde API’s.

Envoy proxy is afgestudeerd aan de Cloud Native Computing Foundation (CNCF). Het wordt gebruikt in de meeste moderne infrastructuur en containertechnologie.

In deze tutorial laten we zien hoe je de Envoy proxy installeert en configureert op de Debian 11 server.

Voorwaarden

Voor de Envoy installatie gebruiken we het volgende:

  • Een Linux server Debian 11 Bullseye
  • Een niet-root gebruiker met de sudo privileges

Envoy archief toevoegen

Envoy kan op vele manieren worden geïnstalleerd, waaronder met de binaire pakketten die door de Envoy repository worden geleverd of met behulp van Docker. In dit voorbeeld zullen we Envoy installeren met behulp van het binaire pakket uit de Envoy repository.

Voordat je Envoy toevoegt en installeert, moet je het volgende pakket installeren. De gnupg2 zal worden gebruikt om de GPG sleutel toe te voegen aan je Debian server, en de apt-transport-https maakt het mogelijk om pakketten te installeren vanaf de beveiligde https verbinding.

sudo apt install gnupg2 apt-transport-https -y

Voeg vervolgens de Envoy GPG-sleutel toe en verifieer deze met het volgende commando.

curl -sL 'https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key' | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg
echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check

Als de sleutel geldig is, zie je een uitvoerbericht zoals OK.

envoy proxy gpg sleutel toevoegen

Voeg nu de Envoy repository toe aan je systeem met het onderstaande commando.

echo "deb [arch=amd64 \
signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] \
 https://deb.dl.getenvoy.io/public/deb/debian \
$(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list

Update en ververs tenslotte je Debian repository.

sudo apt update

In het onderstaande screenshot zie je dat de Envoy repository is toegevoegd aan het Debian systeem.

envoy archief toevoegen

Envoy Proxy installeren

Je hebt nu de Envoy GPG sleutel en repository toegevoegd, nu ga je het Envoy pakket installeren op je systeem.

Voer het onderstaande apt commando uit om het Envoy pakket op je Debian 11 systeem te installeren.

sudo apt install getenvoy-envoy

Hieronder zie je de Envoy installatie tijdens het proces.

envoy proxy installeren

Nadat de Envoy installatie is voltooid, controleer je de Envoy versie met het volgende commando.

envoy --version

Hieronder zie je de Envoy v1.18 geïnstalleerd op de Debian 11. Dit is de nieuwste versie van de Envoy proxy die door de Envoy repository wordt geleverd. Als je de nieuwste versie wilt krijgen, kun je een voorgebouwd binair bestand van de Envoy website gebruiken.

envoy versie controleren

Daarnaast kun je ook alle beschikbare opties op het envoy commando controleren met het volgende commando.

envoy --help

Je ziet dan een heleboel opties die je kunt gebruiken voor het instellen van Envoy.

Envoy Proxy configureren

Na de installatie van Envoy zul je nu leren hoe je Envoy kunt instellen.

Maak eerst een nieuwe directory /etc/envoy/ aan met het volgende commando.

mkdir -p /etc/envoy/

Maak nu een nieuw bestand /etc/envoy/demo.yaml met behulp van nano editor.

sudo nano /etc/envoy/demo.yaml

Voeg de volgende configuratie toe aan het bestand. In dit voorbeeld gebruik je de static_resources configuratie voor Envoy, die de listeners, clusters en static_resources moet bevatten.

De listeners bepalen welk IP adres en welke poort gebruikt worden voor Envoy. In dit voorbeeld draait Envoy op het openbare IP adres 0.0.0.0 met poort 80.

Het cluster service_envoyproxy_io zal hier worden gebruikt als het eindpunt van de service, wat de domeinnaam www.envoyproxy.io is.

static_resources:

  listeners:
  - name: listener_0
    address:
      socket_address:
        address: 0.0.0.0
        port_value: 80
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          access_log:
          - name: envoy.access_loggers.stdout
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                route:
                  host_rewrite_literal: www.envoyproxy.io
                  cluster: service_envoyproxy_io

  clusters:
  - name: service_envoyproxy_io
    type: LOGICAL_DNS
    connect_timeout: 5s
    # Comment out the following line to test on v6 networks
    dns_lookup_family: V4_ONLY
    load_assignment:
      cluster_name: service_envoyproxy_io
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: www.envoyproxy.io
                port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
        sni: www.envoyproxy.io

Sla het bestand op en sluit het als je klaar bent.

Voer vervolgens het onderstaande envoy commando uit om het configuratiebestand demo.yaml te verifiëren.

envoy --mode validate -c /etc/envoy/demo.yaml

Als je YAML configuratie correct is, zie je de uitvoer zoals “configuration /etc/envoy/demo.yaml OK”.

envoy configuratie verifiëren

Voer nu Envoy uit met het configuratiebestand demo.yml met het volgende commando.

envoy -c /etc/envoy/demo.yaml

Je zult de onderstaande logboekuitvoer zien. Let er ook op dat je geen foutmeldingen krijgt.

draaiende envoy proxy

Ga nu naar je lokale machine en bewerk het configuratiebestand /etc/hosts met nano editor.

sudo nano /etc/hosts

Voeg de www.envoyproxy.io domeinnaam toe met je server IP adres zoals hieronder.

192.168.5.10 www.envoyproxy.io

Sla het bestand op en sluit het als je klaar bent.

Open tenslotte je webbrowser en bezoek de domeinnaam www.envoyproxy.io en je zou de homepage van de domeinnaam www.envoyproxy.io moeten krijgen.

envoy proxy

Conclusie

Gefeliciteerd! Je hebt nu met succes Envoy geïnstalleerd op de Debian 11 server. Je hebt ook geleerd hoe je Envoy kunt instellen met behulp van de YAML configuratie voor het proxen van de website www.envoyproxy.io.