By Dao Feng
This article will introduce a recent advancement by Higress in the Wasm plugin ecosystem—Higress Wasm Plugin Server. This new component addresses the pain points of users pulling plugins during private deployment of the Higress gateway, optimizing the download and management efficiency of plugins.
Repository address: https://github.com/higress-group/plugin-server
Since its open source release, Higress has regarded Wasm technology as a core means of gateway extension. The engineering reliability, sandbox security, hot update capability brought by Wasm, as well as features such as domain/route-level effectiveness, Redis access capabilities, and AI feature support built by the Higress team enrich the gateway's extensibility and provide performance improvements and cost reductions for enterprise users. Through custom Wasm plugins, users can implement logic for authentication, encryption and decryption, session management, etc., at the gateway layer according to their business needs, reducing additional resource consumption and lowering the processing burden on backend services.
Despite the advantages of Wasm plugin technology itself, we still face some practical challenges in real enterprise-level deployments and large-scale application scenarios, mainly reflected in the following aspects:
Currently, the download and management of Higress Wasm plugins mainly depend on OCI (Open Container Initiative) repositories.
About OCI, oras, and Docker
Challenges of OCI Mechanism
Although the OCI mechanism is a standard and efficient way in cloud-native environments, for some enterprises, especially in private deployment scenarios with strict requirements on network security, the introduction of OCI repositories has become a significant barrier, raising the following issues:
When the Higress gateway pulls Wasm plugins, it supports the configuration of plugin pulling policies, defaulting to IfNotPresent, which means that if the local plugin exists, it will not pull it again. This is reasonable in most cases. However, when users want the Wasm plugin to update promptly (for example, when iterating frequently in development and testing environments) or want to ensure that they are always using the latest version of the plugin, they tend to set the policy to Always, resulting in the following issues:
The above issues collectively lead to unnecessary complexity when users configure and use Wasm plugins. We hope to provide a simpler, more intuitive way to distribute plugins, enabling users to focus more on implementing business logic.
It is precisely based on these pain points that we have developed the Higress Wasm Plugin Server.
Our core idea is to provide a simple, highly available HTTP-based file server to distribute Wasm plugins. The reason for choosing HTTP is that it is ubiquitous, easy to deploy, easy to integrate, and in many enterprise internal environments, HTTP file services are standard configuration and simple to set up.
This new component, higress-plugin-server, takes on the following core functions and goals:
http://higress-plugin-server.higress-system.svc/plugins/<plugin-name>/<version>/plugin.wasm.Its launch brings the following advantages to users:
To achieve the above goals, we designed and built the higress-plugin-server component from scratch.
We created a GitHub repository https://github.com/higress-group/plugin-server , with the following repository structure:
plugin-server/
├── Dockerfile # Core for building the Nginx image
├── nginx.conf # Nginx configuration file for serving static files
├── pull_plugins.py # Plugin download script for pulling plugins from OCI
├── plugins.properties # Plugin list and version configuration
├── deploy/ # Kubernetes deployment files (Service & Deployment)
│ └── service.yaml
│ └── deployment.yaml
└── .github/workflows/ # GitHub Action pipeline definition for automated builds and pushes
└── build-plugin-server-image-and-push.yml
The core of plugin-server is its Dockerfile:
# Build Stage: Handling Plugins and Metadata
FROM python:3.11-alpine AS builder
# Install system dependencies, including ORAS client
RUN apk add --no-cache \
wget \
ca-certificates \
&& update-ca-certificates
RUN set -eux; \
ORAS_VERSION="1.2.3"; \
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/'); \
wget -O /tmp/oras.tar.gz "https://github.com/oras-project/oras/releases/download/v${ORAS_VERSION}/oras_$(echo ${ORAS_VERSION})_linux_${ARCH}.tar.gz" \
&& tar -zxvf /tmp/oras.tar.gz -C /usr/local/bin \
&& rm -rf /tmp/oras.tar.gz oras \
&& oras version
# Copy and execute Python script to pull plugins
WORKDIR /workspace
COPY pull_plugins.py plugins.properties ./
RUN python3 pull_plugins.py
# Run Stage: Final Image
FROM docker.io/nginx:alpine
# Copy generated files from build stage
COPY --from=builder /workspace/plugins /usr/share/nginx/html/plugins
# Copy Nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf
# Expose port and start Nginx
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
Key Point Analysis:
We have set a clear version tag of 1.0.0 for the higress-plugin-server image, rather than following the version evolution of higress-gateway and higress-console, primarily considering that it will not require many version releases.
Through GitHub Actions, we have implemented automated build and push processes. When there are updates to the main branch of the higress-plugin-server repository, GitHub Action will automatically trigger a build and push it to Higress's official image repository. In the future, we plan to listen for plugin-related PRs in the main Higress repository to trigger image builds for dynamic updates of plugins.
To enable users to conveniently deploy the higress-plugin-server, we have directly integrated its Kubernetes deployment configuration (Deployment and Service) into the Helm Chart of the main Higress repository (higress/helm/core).
# higress/helm/core/values.yaml
...
global:
enablePluginServer: false # Default is false; users can set it to true to enable
...
pluginServer:
name: "higress-plugin-server"
replicas: 2 # Default is 2 replicas, recommended for high availability
image: plugin-server
hub: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress
tag: "1.0.0" # Explicit image version
# ... other resource limits, port configurations, etc.
To achieve a seamless user experience, we have also modified the higress-console repository. When users choose to enable the plugin-server, the Higress Console will automatically configure the default download URL for Wasm plugins to http://higress-plugin-server.higress-system.svc/plugins/{version}/plugin.wasm.
# higress-console/helm/templates/deployment.yaml
...
spec:
template:
containers:
env:
{{-ifand.Values.global.enablePluginServer(not(hasKey.Values.podEnvs"HIGRESS_ADMIN_WASM_PLUGIN_CUSTOM_IMAGE_URL_PATTERN"))}}
-name:HIGRESS_ADMIN_WASM_PLUGIN_CUSTOM_IMAGE_URL_PATTERN
value:"{{ .Values.pluginServer.urlPattern }}"
{{-end}}
# higress-console/helm/values.yaml
...
pluginServer:
urlPattern:"http://higress-plugin-server.higress-system.svc/plugins/${name}/${version}/plugin.wasm"
Intelligent Judgment: It is worth noting that we have added logic for judgment: if the user has already manually configured the HIGRESS_ADMIN_WASM_PLUGIN_CUSTOM_IMAGE_URL_PATTERN environment variable, the user's configuration will take precedence to avoid automatically overriding the user's intent. This ensures flexibility and compatibility.
Now, let's introduce how to experience and use the Higress Plugin Server. We strive to make it as simplified as possible for users to get started.
Starting from the next version of Higress (expected v2.1.5), you only need to add an additional Helm parameter when installing Higress to simultaneously deploy the core components of Higress and the Wasm Plugin Server:
helm repo add higress.io https://higress.cn/helm-charts
helm install higress -n higress-system higress.io/higress --create-namespace --set global.enablePluginServer=true --render-subchart-notes
After executing the above command, you can check the running Pod named higress-plugin-server via kubectl get pods -n higress-system.
Once the higress-plugin-server is deployed and running, the Higress Console will automatically detect it and set it as the default download source for Wasm plugins.
No additional configuration is required, and you can see that the default download URL of the plugin has automatically updated in the plugin management page of the Higress Console:
http://higress-plugin-server.higress-system.svc/plugins/{version}/plugin.wasm
kubectl exec -it <higress-gateway-pod> -n higress-system -- curl http://higress-plugin-server.higress-system.svc/plugins/key-auth/1.0.0/metadata.txt
If the metadata information of the plugin is returned, it indicates that the plugin server is working normally.
docker build to build and push it to your image repository. Finally, when installing via Helm, modify the pluginServer.image and pluginServer.tag parameters to specify your custom image.Since Higress v2.1.5 had not been released at the time of this article's publication, or due to concerns about upgrading existing versions to major versions, if you wish to use the Higress Plugin Server independently, you can refer to https://github.com/alibaba/higress/blob/main/helm/core/templates/plugin-server-deployment.yaml to deploy the Plugin Server independently
and configure the environment variables of the higress-console
HIGRESS_ADMIN_WASM_PLUGIN_CUSTOM_IMAGE_URL_PATTERN=http://higress-plugin-server.higress-system.svc/plugins/${name}/${version}/plugin.wasm
You can then use the Higress Plugin Server.
Frankly speaking, the complexity of this feature is not high, but the launch of the Higress Wasm Plugin Server is an important advancement by the Higress team in continuously optimizing user experience and lowering the barriers for enterprise deployment. It allows Wasm plugins to run smoothly in various complex private environments and lays a solid foundation for more advanced plugin management features in the future.
In the future, we will continue to optimize the higress-plugin-server:
We believe that the Higress Wasm plugin ecosystem will continue to evolve with the improvement of these infrastructures. We welcome everyone to actively try the higress-plugin-server and provide us with valuable feedback and suggestions.
If you want to learn more about Alibaba Cloud API Gateway (Higress), please click: https://higress.ai/en/
Higress MCP Service Management Helps Build a Private MCP Market
20 Years of Financial Investment Data Accumulation, Officially Opening MCP Capabilities
631 posts | 55 followers
FollowAlibaba Cloud Native Community - November 18, 2024
Alibaba Cloud Native Community - April 3, 2025
Alibaba Cloud Native Community - April 4, 2023
Alibaba Cloud Native Community - October 15, 2025
Alibaba Cloud Native Community - October 11, 2025
Alibaba Cloud Native Community - April 11, 2024
631 posts | 55 followers
Follow
Container Service for Kubernetes
Alibaba Cloud Container Service for Kubernetes is a fully managed cloud container management service that supports native Kubernetes and integrates with other Alibaba Cloud products.
Learn More
Function Compute
Alibaba Cloud Function Compute is a fully-managed event-driven compute service. It allows you to focus on writing and uploading code without the need to manage infrastructure such as servers.
Learn More
Managed Service for Prometheus
Multi-source metrics are aggregated to monitor the status of your business and services in real time.
Learn More
ACK One
Provides a control plane to allow users to manage Kubernetes clusters that run based on different infrastructure resources
Learn MoreMore Posts by Alibaba Cloud Native Community