Istio · Schema

Istio WasmPlugin

A WasmPlugin provides a mechanism to extend the functionality provided by the Istio proxy through WebAssembly filters. It enables custom authentication, authorization, metrics, logging, and traffic transformation at the proxy level.

CNCFKubernetesMicroservicesOpen SourceService Mesh

Properties

Name Type Description
selector object Workload selector to apply the plugin to specific workloads.
targetRefs array Target references to apply the plugin to specific resources.
url string URL of a Wasm module or OCI container image. Supports oci://, http://, https://, and file:// schemes.
sha256 string SHA256 checksum that will be used to verify the Wasm module or OCI container.
imagePullPolicy string The pull behavior to be applied when fetching Wasm module images.
imagePullSecret string Credentials to use for OCI image pulling. Name of a Kubernetes Secret.
pluginConfig object The configuration that will be passed on to the plugin. Encoded as JSON and passed to the Wasm module.
pluginName string The plugin name to be used in the Envoy configuration. Allows distinguishing between multiple uses of the same Wasm module.
phase string Determines where in the filter chain this WasmPlugin is to be injected.
priority integer Determines ordering of WasmPlugins in the same phase. Higher priority is evaluated first.
failStrategy string Specifies the failure behavior for the plugin. FAIL_CLOSE rejects traffic, FAIL_OPEN skips the plugin.
vmConfig object Configuration for the Wasm VM.
match array Specifies the criteria to determine which traffic is passed to WasmPlugin.
type string Specifies the type of Wasm Extension to be used.
View JSON Schema on GitHub

JSON Schema

wasm-plugin.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/api-evangelist/istio/blob/main/json-schema/wasm-plugin.json",
  "title": "Istio WasmPlugin",
  "description": "A WasmPlugin provides a mechanism to extend the functionality provided by the Istio proxy through WebAssembly filters. It enables custom authentication, authorization, metrics, logging, and traffic transformation at the proxy level.",
  "type": "object",
  "properties": {
    "selector": {
      "type": "object",
      "properties": {
        "matchLabels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "One or more labels that indicate a specific set of pods/VMs on which the plugin should be applied."
        }
      },
      "description": "Workload selector to apply the plugin to specific workloads."
    },
    "targetRefs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "group": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "description": "Target references to apply the plugin to specific resources."
    },
    "url": {
      "type": "string",
      "description": "URL of a Wasm module or OCI container image. Supports oci://, http://, https://, and file:// schemes."
    },
    "sha256": {
      "type": "string",
      "description": "SHA256 checksum that will be used to verify the Wasm module or OCI container."
    },
    "imagePullPolicy": {
      "type": "string",
      "enum": ["UNSPECIFIED_POLICY", "IfNotPresent", "Always"],
      "description": "The pull behavior to be applied when fetching Wasm module images."
    },
    "imagePullSecret": {
      "type": "string",
      "description": "Credentials to use for OCI image pulling. Name of a Kubernetes Secret."
    },
    "pluginConfig": {
      "type": "object",
      "description": "The configuration that will be passed on to the plugin. Encoded as JSON and passed to the Wasm module."
    },
    "pluginName": {
      "type": "string",
      "description": "The plugin name to be used in the Envoy configuration. Allows distinguishing between multiple uses of the same Wasm module."
    },
    "phase": {
      "type": "string",
      "enum": ["UNSPECIFIED_PHASE", "AUTHN", "AUTHZ", "STATS"],
      "description": "Determines where in the filter chain this WasmPlugin is to be injected."
    },
    "priority": {
      "type": "integer",
      "description": "Determines ordering of WasmPlugins in the same phase. Higher priority is evaluated first."
    },
    "failStrategy": {
      "type": "string",
      "enum": ["FAIL_CLOSE", "FAIL_OPEN"],
      "description": "Specifies the failure behavior for the plugin. FAIL_CLOSE rejects traffic, FAIL_OPEN skips the plugin."
    },
    "vmConfig": {
      "type": "object",
      "description": "Configuration for the Wasm VM.",
      "properties": {
        "env": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Name of the environment variable."
              },
              "valueFrom": {
                "type": "string",
                "enum": ["INLINE", "HOST"],
                "description": "Source for the environment variable's value."
              },
              "value": {
                "type": "string",
                "description": "Value for the environment variable when valueFrom is INLINE."
              }
            },
            "required": ["name"]
          },
          "description": "Environment variables to pass to the VM."
        }
      }
    },
    "match": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": ["UNDEFINED", "CLIENT", "SERVER", "CLIENT_AND_SERVER"],
            "description": "Criteria for selecting traffic by their direction."
          },
          "ports": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "integer"
                }
              }
            },
            "description": "Criteria for selecting traffic by port."
          }
        }
      },
      "description": "Specifies the criteria to determine which traffic is passed to WasmPlugin."
    },
    "type": {
      "type": "string",
      "enum": ["UNSPECIFIED_PLUGIN_TYPE", "HTTP", "NETWORK"],
      "description": "Specifies the type of Wasm Extension to be used."
    }
  },
  "required": ["url"]
}