Deployment guide

Envoy

Overview

Envoy is a high-performance, cloud-native Layer 7 edge and service proxy. It was originally built at Lyft and is now a graduated CNCF project. Envoy is the data plane behind Istio and many service meshes, and it is widely used for API gateways, edge routing, load balancing, observability and zero-trust service-to-service traffic.

The SecureAnyCloud image installs the official Envoy binary as /usr/local/bin/envoy and runs it under a dedicated envoy system user. It ships a sample proxy configuration, so the proxy is serving traffic from the moment the VM boots.

What you get:

  • Envoy 1.31.x (Apache-2.0), the official upstream binary, at /usr/local/bin/envoy.
  • An envoy.service systemd unit, enabled and running on boot, under a dedicated envoy user.
  • A sample proxy configuration at /etc/envoy/envoy.yaml with an HTTP listener on 0.0.0.0:10000.
  • An http_connection_manager that routes requests through to a sample upstream cluster, demonstrating L7 routing and upstream proxying.
  • The Envoy admin interface on 127.0.0.1:9901 (/ready, /stats, /clusters) and stdout access logging.
  • 24/7 SecureAnyCloud support.

Envoy has no product web UI. The admin interface on port 9901 is a debug and observability surface, and it is bound to loopback only. The proxy listener uses port 10000, and the SecureAnyCloud image does not open 10000 in any network security group. Front the listener with your own TLS and NSG rules, and adapt the sample configuration to your own routes, clusters, filters and authentication. The proxy ships no per-VM password.

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.

Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting point.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network. Open 10000/tcp, or front it with your own load balancer and TLS termination, only when you are ready to expose the proxy to clients.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Envoy by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22).

Select Review + create, then Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:envoy-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name envoy \
  --image sac1647283583153:envoy-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard

Step 3 - Connect to your VM

Connect over SSH as azureuser:

ssh azureuser@<vm-public-ip>

Step 4 - Confirm Envoy is installed and running

Check the version and confirm that the service is active:

envoy --version systemctl is-active envoy

envoy --version reports the Envoy version and build, and systemctl is-active envoy prints active.

Step 5 - Review and validate the sample configuration

The sample proxy configuration lives at /etc/envoy/envoy.yaml. It declares the admin interface, an HTTP listener, the routes that map incoming requests onto an upstream cluster, and the upstream cluster definition. View it:

cat /etc/envoy/envoy.yaml

Envoy configuration is declarative. You describe the listeners, routes, clusters and filters you want, and Envoy programs its data plane accordingly. Before the service loads a configuration, validate its syntax and semantics with Envoy's built-in validation mode:

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

A valid configuration prints configuration '/etc/envoy/envoy.yaml' OK. Run this validation every time you edit envoy.yaml, then run sudo systemctl restart envoy to apply your changes.

Step 6 - Check the admin readiness endpoint

Envoy exposes an admin interface on 127.0.0.1:9901. The /ready endpoint returns 200 with the body LIVE when the proxy is up and serving:

curl 127.0.0.1:9901/ready

You can use this endpoint for your Azure Load Balancer or Application Gateway health probe. Proxy it appropriately, because the admin interface is loopback-only by design. The admin interface also exposes /stats and /clusters for observability.

Step 7 - Make a request through the proxy

The sample configuration routes every request on the listener through to the upstream cluster. Envoy receives a request on the listener, the http_connection_manager routes it, and Envoy proxies it to the upstream. The upstream returns the response back through Envoy to you:

curl -s 127.0.0.1:10000/posts/1

The JSON response is the upstream's reply, returned through Envoy. It shows that the proxy routes traffic end to end.

Step 8 - Inspect the upstream cluster health

Envoy continuously tracks the state of every upstream. The admin /clusters endpoint reports each cluster, its endpoints, connection and request counters, and health flags:

curl -s 127.0.0.1:9901/clusters

Look for the sample_upstream cluster. The health_flags::healthy line and the active connection counters confirm that Envoy considers the upstream reachable and is routing to it.

Envoy also writes a stdout access log, captured by journald, for every request it proxies:

sudo journalctl -u envoy -n 20 --no-pager

Step 9 - Build your own proxy

Edit /etc/envoy/envoy.yaml to define your own listeners, routes, clusters and filters. The sample, a single HTTP listener routing to one upstream cluster over TLS, is the foundation for most edge and service-proxy use cases. You can layer on rate limiting, JWT authentication, CORS, header transformation, retries, circuit breaking and gRPC support from Envoy's filter chain.

Always run envoy --mode validate -c /etc/envoy/envoy.yaml before restarting the service. See the Envoy documentation for the full configuration reference.

To expose the proxy to clients, open 10000/tcp (or your chosen listener port) in your NSG, ideally only from a load balancer subnet. The recommended approach is to place Envoy behind an Azure Application Gateway, or to terminate TLS directly in Envoy with a TLS transport socket on the listener.

Support

SecureAnyCloud maintains this image with 24/7 support. Envoy is licensed under the Apache License 2.0. Envoy and Envoy Proxy are trademarks of The Linux Foundation / CNCF. SecureAnyCloud is an independent image publisher and is not affiliated with or endorsed by the Envoy project or the CNCF. For help with the image or your deployment, contact sales@secureanycloud.com.

Deploy on Azure

Launch Envoy Proxy on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure