In this lab, you will use the sample application Image Hub. This version of the Image Hub filter has been simplified for your lab. To self-study deeper functionality, try the other version of the Image Hub filter that is available in the Image Hub repo.
Using Meshery, select Istio from the Management
menu.
In the Istio management page:
- Type
default
into the namespace field. - Click the (+) icon on the
Manage Sample Application Lifecycle
card and selectImage Hub Application
to install the latest version of Image Hub
Next, load the custom Envoy filter. This filter is written in Rust and is compiled against WebAssembly as it's target runtime.
Using Meshery, select Istio from the Management
menu.
In the Istio management page:
- Type
default
into the namespace field. - Click the (+) icon on the
Apply Service Mesh Configuration
card and selectEnvoy Filter for Image Hub
to deploy the custom filter.
Alternative, manual installation steps are provided for reference below. No need to execute these if you have performed the steps above.
Manually deploy the Image Hub filter.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: custom-filter
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_OUTBOUND # will match outbound listeners in all sidecars
listener:
portNumber: 9080
filterChain:
name: envoy.http_connection_manager
filter:
name: "envoy.tcp_proxy"
patch:
operation: INSERT_BEFORE
value:
# This is the full filter config including the name and config or typed_config section.
name: "envoy.filters.http.wasm"
config:
config:
name: custom-filter
rootId: my_root_id
vmConfig:
code:
local:
filename: /var/lib/imagehub/filter.wasm
runtime: envoy.wasm.runtime.v8
vmId: custom-filter
allow_precompiled: true
workloadSelector:
labels:
app: api-v1
version: v1
Manually patch the Image Hub Deployment.
---(
// kubectl patch deployment/api-v1 -p '
{
"spec": {
"template": {
"metadata": {
"annotations": {
"sidecar.istio.io/userVolumeMount": "[{\"mountPath\":\"/var/lib/imagehub\",\"name\":\"wasm-filter\"}]"
}
},
"spec": {
"initContainers": [
{
"command": [
"curl",
"-L",
"-o",
"/var/lib/imagehub/filter.wasm",
"https://github.com/layer5io/advanced-istio-service-mesh-workshop/raw/master/lab-7/ratelimiter/ratelimit-filter.wasm"
],
"image": "curlimages/curl",
"imagePullPolicy": "Always",
"name": "add-wasm",
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"volumeMounts": [
{
"mountPath": "/var/lib/imagehub",
"name": "wasm-filter"
}
]
}
],
"volumes": [
{
"emptyDir": {},
"name": "wasm-filter"
}
]
}
}
}
}
)
// '
A future version of Meshery will allow you to deploy any filter from the wasm-filters repo. PR the repo to upload your custom filter and have Meshery deploy it.
Star this repository and watch for updates.