Envoy Gateway is a Kubernetes traffic management tool used to expose BRIX application services through a unified entry point: the API Gateway.
Envoy Gateway enables you to:
- Route and redirect traffic.
- Provide TLS termination and request management.
- Implement load balancing.
- Utilize advanced network observability features.
Setting up and configuring Envoy Gateway involves the following steps:
- Download the Helm chart and configuration file.
- Fill out the configuration file.
- Install the Helm chart into your Kubernetes cluster.
- Create a GatewayClass.
- Create a TLS certificate.
- Create a Gateway resource.
- Configure an external IP address via MetalLB (optional).
- Configure BRIX to work with Gateway API.
Important: We strongly recommend running only one Gateway controller in your cluster to avoid HTTPRoute and Gateway resource conflicts, unpredictable routing, and increased system load. Running two controllers is only permitted temporarily (e.g., during migration) or in strictly isolated namespaces using different GatewayClass resources.
Шаг Download the Helm chart and configuration file
For online installation retrieve the values-envoy-gateway.yaml configuration file by running:
helm repo add brix365 https://charts.brix365.com
helm repo update
helm show values brix365/envoy-gateway > values-envoy-gateway.yaml
Getting the configuration file for installation without internet access
helm repo add brix365 https://charts.brix365.com
tar -xf envoy-gateway-X.Y.Z.tgz |
Step 2. Fill out the configuration file
Define your Envoy Gateway deployment settings in the values-envoy-gateway.yaml file.
Important: Ensure that the url: http://envoy-gateway-system-kube-prometheus-prometheus.envoy-gateway-system.svc parameter correctly points to the path of your Prometheus service.
Sample values-envoy-gateway.yaml file
## envoy-gateway settings |
Configuring private registry settings for offline installation in air-gapped environments
## envoy-gateway settings |
Step 3. Install the envoy-gateway chart in the Kubernetes cluster
Use Helm to install the envoy-gateway chart in the envoy-gateway-system namespace:
- For online installation:
helm upgrade --install -n envoy-gateway-system envoy-gateway brix365/envoy-gateway -f values-envoy-gateway.yaml
- For offline installation: Navigate to the directory containing the extracted chart and run:
helm upgrade --install envoy-gateway ./envoy-gateway -f values-envoy-gateway.yaml -n envoy-gateway-system
Step 4. Create a GatewayClass
The GatewayClass resource defines which controller handles Gateway resources across the cluster.
To create a GatewayClass, run:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: envoy-gateway
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
parametersRef:
group: gateway.envoyproxy.io
kind: EnvoyProxy
name: custom-envoy-proxy
namespace: envoy-gateway-system
EOF
Step 5. Create a TLS certificate
To enable HTTPS access, create a TLS certificate and add it to Kubernetes as a secret.
You can use either:
- A self-signed certificate (for details, see the article on creating self-signed TLS/SSL certificates with OpenSSL.
- A certificate issued by a trusted Certificate Authority (CA).
To add the certificate to Kubernetes, create a TLS secret in the kube-system namespace using your .crt certificate file and .key private key file:
kubectl create secret tls brix365-tls -n envoy-gateway-system \
--cert=/etc/ssl/certs/selfsigned.crt \
--key=/etc/ssl/private/selfsigned.key
where:
- brix365-tls is the secret name referenced in the Gateway resource.
- --cert is the path to the SSL/TLS certificate.
- --key is the path to the private key.
Step 6. Create a Gateway
The Gateway resource defines how incoming traffic is handled in the cluster. It specifies listener ports, protocols, and TLS certificates used for HTTPS traffic:
- Add the Gateway resource and link it to your GatewayClass:
kubectl apply -n envoy-gateway-system -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: envoy-gateway
spec:
gatewayClassName: envoy-gateway
listeners:
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: All
- name: https
port: 443
protocol: HTTPS
tls:
mode: Terminate
certificateRefs:
- name: brix365-tls
allowedRoutes:
namespaces:
from: All
EOF
where:
- gatewayClassName is the he controller that processes this Gateway resource.
- listeners is the list of entry points:
- port: network port.
- protocol: network protocol (HTTP or HTTPS).
- tls.mode: Terminate terminates TLS connections at the Gateway layer.
- certificateRefs references the previously created Kubernetes TLS secret. The name value must match your certificate name.
- allowedRoutes defines which namespaces are permitted to attach route resources.
- Publish the envoy-gateway service using one of the following methods:
- Via a third-party load balancer such as MetalLB.
- Via native Gateway features: to assign a LoadBalancer type to the service, run the following command (replace <node_ip> with your node's accessible IP address, e.g., 192.168.1.10):
kubectl patch svc $(kubectl get svc -n envoy-gateway-system -o name | grep envoy-gateway | head -1 | sed 's|service/||') -n envoy-gateway-system -p '{"spec": {"type": "LoadBalancer", "externalIPs":["<node_ip>"]}}'
Step 7. Configure an external IP Address via MetalLB (optional)
Proper Gateway API functionality requires direct internet exposure with a public IP address assigned to a cluster node via a NodePort service. Once the Gateway resource is created, a LoadBalancer service is automatically generated to handle incoming traffic.
You can deploy MetalLB, which functions similarly to cloud-based load balancers. MetalLB utilizes Layer 2 (ARP/NDP) mechanisms or BGP routing to assign IP addresses to LoadBalancer services generated by Gateway.
When MetalLB is NOT required:
|
To check if your Gateway service has an external IP assigned, run:
kubectl get svc -n envoy-gateway-system
Check the EXTERNAL-IP column:
- If an IP address is displayed, external access is already configured.
- If it shows <pending> or <none>, no external load balancer is present:
- In cloud Kubernetes clusters: The cloud load balancer will provision automatically—no action needed;
- In on-premises or test environments: You can deploy MetalLB.
Install MetalLB
To deploy MetalLB for external Gateway routing:
- Install MetalLB:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml
- Monitor pod startup status and wait for all components to run:
kubectl get pods -n metallb-system -w
- Configure an IP address pool:
kubectl apply -f - <<EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: host-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.29.176-192.168.29.176
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: host-ip-adv
namespace: metallb-system
spec:
ipAddressPools:
- host-ip-pool
EOF
where 192.168.29.176 is a sample host IP address. Replace it with an available, externally accessible host IP address from your Kubernetes cluster.
- Verify the Gateway service configuration:
kubectl get svc -n envoy-gateway-system
Your Gateway resource is now ready to route BRIX application traffic.
Step 8. Configure BRIX to work with Gateway API
Once Gateway is installed, enable Gateway API support in your BRIX configuration.
In your values-brix365.yaml configuration file, add or modify the following parameters:
global:
…
gatewayAPI:
## Enable Gateway API (HTTPRoute)
enabled: true
parentRefs:
- name: envoy-gateway
namespace: envoy-gateway-system
where:
- enabled enables Gateway API instead of Ingress;
- parentRefs specifies the target Gateway resource through which BRIX is exposed.
hese values must match the parameters of your previously created Gateway resource.
For details on editing system parameters, see the article on modifying BRIX parameters.