Skip to content

Prerequisites

Skew protection requires a Kubernetes Gateway API controller in the cluster. This page covers the setup requirements.

Skew protection is disabled by default. Enable it via the PLT_FEATURE_SKEW_PROTECTION environment variable or the Helm value services.icc.features.skew_protection.enable:

Terminal window
PLT_FEATURE_SKEW_PROTECTION=true

When disabled, ICC does not interact with the Gateway API at all. No Gateway controller is required and ICC behaves exactly as it does today.

The Gateway API is not built into Kubernetes. The Custom Resource Definitions (CRDs) must be installed separately:

Terminal window
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml

This installs the CRDs only (GatewayClass, Gateway, HTTPRoute) — no controller is deployed.

A Gateway API-compliant controller must be deployed in the cluster to process Gateway and HTTPRoute resources.

The controller must support the following features:

FeatureConformance LevelRequired For
HTTPRoute with backendRefsCoreRouting to versioned Services
headers match with Exact typeCorex-deployment-id header matching
ResponseHeaderModifier filterCoreSetting Set-Cookie on responses
headers match with RegularExpression typeExtendedCookie-based version pinning

Skew protection has been verified with Envoy Gateway. Any Gateway API controller that supports RegularExpression header matching will work. The following controllers are known to support it:

ControllerLicenseRegex Header MatchNotes
Envoy GatewayApache 2.0SupportedCNCF project, Envoy-based. Lightweight, purpose-built for Gateway API.
IstioApache 2.0SupportedFull service mesh with Gateway API support.
ContourApache 2.0Supported since v1.25.0Envoy-based ingress controller.
CiliumApache 2.0SupportedeBPF-based networking with Envoy data plane.
TraefikMITSupportedCloud-native reverse proxy.
kgatewayApache 2.0SupportedEnvoy-based, CNCF project (formerly Gloo Gateway OSS).
KongApache 2.0SupportedKong-based ingress controller.
NGINX Gateway FabricApache 2.0Supported since v2.0.0NGINX-based.

The cluster operator must create a GatewayClass and Gateway resource before ICC can manage HTTPRoute resources. This is standard Gateway API setup:

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: platformatic
spec:
# controllerName varies by controller — this example uses Envoy Gateway
controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: platform-gateway
namespace: platformatic
spec:
gatewayClassName: platformatic
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- name: platform-tls
- name: http
protocol: HTTP
port: 80

ICC references this Gateway in the parentRefs of each managed HTTPRoute. The Gateway resource is auto-discovered — no additional configuration is needed unless your cluster has multiple Gateways.

Machinist’s Kubernetes service account must have permissions to manage HTTPRoute resources. If you are using the Platformatic Helm chart, these permissions are included automatically. For manual installations, add the following to Machinist’s ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: machinist-gateway-api
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["httproutes"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["gateways"]
verbs: ["get", "list"]

Each Gateway API release supports the 5 most recent Kubernetes minor versions. For the current Gateway API v1.4.1 release, this means Kubernetes 1.27 or later.