Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 192 additions & 0 deletions examples/kubernetes/gateway-namespace-mode.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: eg
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: team-a-backend
namespace: team-a
---
apiVersion: v1
kind: Service
metadata:
name: team-a-backend
namespace: team-a
labels:
app: team-a-backend
service: team-a-backend
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: team-a-backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: team-a-backend
namespace: team-a
spec:
replicas: 1
selector:
matchLabels:
app: team-a-backend
version: v1
template:
metadata:
labels:
app: team-a-backend
version: v1
spec:
serviceAccountName: team-a-backend
containers:
- image: gcr.io/k8s-staging-gateway-api/echo-basic:v20231214-v1.0.0-140-gf544a46e
imagePullPolicy: IfNotPresent
name: team-a-backend
ports:
- containerPort: 3000
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: team-b-backend
namespace: team-b
---
apiVersion: v1
kind: Service
metadata:
name: team-b-backend
namespace: team-b
labels:
app: team-b-backend
service: team-b-backend
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: team-b-backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: team-b-backend
namespace: team-b
spec:
replicas: 1
selector:
matchLabels:
app: team-b-backend
version: v1
template:
metadata:
labels:
app: team-b-backend
version: v1
spec:
serviceAccountName: team-b-backend
containers:
- image: gcr.io/k8s-staging-gateway-api/echo-basic:v20231214-v1.0.0-140-gf544a46e
imagePullPolicy: IfNotPresent
name: team-b-backend
ports:
- containerPort: 3000
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway-a
namespace: team-a
spec:
gatewayClassName: eg
listeners:
- allowedRoutes:
namespaces:
from: Same
name: http
port: 8080
protocol: HTTP
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway-b
namespace: team-b
spec:
gatewayClassName: eg
listeners:
- allowedRoutes:
namespaces:
from: Same
name: http
port: 8081
protocol: HTTP
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: team-a-route
namespace: team-a
spec:
parentRefs:
- name: gateway-a
hostnames:
- "www.team-a.com"
rules:
- backendRefs:
- group: ""
kind: Service
name: team-a-backend
port: 3000
weight: 1
matches:
- path:
type: PathPrefix
value: /example
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: team-b-route
namespace: team-b
spec:
parentRefs:
- name: gateway-b
hostnames:
- "www.team-b.com"
rules:
- backendRefs:
- group: ""
kind: Service
name: team-b-backend
port: 3000
weight: 1
matches:
- path:
type: PathPrefix
value: /example
16 changes: 14 additions & 2 deletions site/content/en/latest/tasks/operations/deployment-mode.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,22 @@ title: "Deployment Mode"
## Deployment modes

### One GatewayClass per Envoy Gateway Controller

* An Envoy Gateway is associated with a single [GatewayClass][] resource under one controller.
This is the simplest deployment mode and is suitable for scenarios where each Gateway needs to have its own dedicated set of resources and configurations.

### Multiple GatewayClasses per Envoy Gateway Controller

* An Envoy Gateway is associated with multiple [GatewayClass][] resources under one controller.
* Support for accepting multiple GatewayClasses was added [here][issue1231].

### Separate Envoy Gateway Controllers

If you've instantiated multiple GatewayClasses, you can also run separate Envoy Gateway controllers in different namespaces, linking a GatewayClass to each of them for multi-tenancy.
Please follow the example [Multi-tenancy](#multi-tenancy).

### Merged Gateways onto a single EnvoyProxy fleet

By default, each Gateway has its own dedicated set of Envoy Proxy and its configurations.
However, for some deployments, it may be more convenient to merge listeners across multiple Gateways and deploy a single Envoy Proxy fleet.

Expand All @@ -26,6 +30,14 @@ Setting the `mergeGateways` field in the EnvoyProxy resource linked to GatewayCl

Please follow the example [Merged gateways deployment](#merged-gateways-deployment).

### Gateway Namespace Mode

Gateway Namespace Mode is a deployment model for Envoy Gateway that creates Envoy Proxy infrastructure resources like Deployments, Services and ServiceAccounts in the namespace where each Gateway resource is defined, rather than in the Envoy Gateway controller namespace.

* Support for this deployment mode was added [here][issue2629].

Please follow the example [Gateway Namespace Mode][].

### Supported Modes

#### Kubernetes
Expand All @@ -34,7 +46,6 @@ Please follow the example [Merged gateways deployment](#merged-gateways-deployme
and **creates** managed data plane resources such as EnvoyProxy `Deployment` in the **namespace where Envoy Gateway is running**.
* Envoy Gateway also supports [Namespaced deployment mode][], you can watch resources in the specific namespaces by assigning
`EnvoyGateway.provider.kubernetes.watch.namespaces` or `EnvoyGateway.provider.kubernetes.watch.namespaceSelector` and **creates** managed data plane resources in the **namespace where Envoy Gateway is running**.
* Support for alternate deployment modes is being tracked [here][issue1117].

### Multi-tenancy

Expand Down Expand Up @@ -1068,5 +1079,6 @@ curl --header "Host: www.merged3.com" http://$GATEWAY_HOST:8082/example3
[EnvoyProxy]: ../../api/extension_types#envoyproxy
[GatewayClass]: https://gateway-api.sigs.k8s.io/api-types/gatewayclass/
[Namespaced deployment mode]: ../../api/extension_types#kuberneteswatchmode
[Gateway Namespace Mode]: ./gateway-namespace-mode
[issue1231]: https://github.com/envoyproxy/gateway/issues/1231
[issue1117]: https://github.com/envoyproxy/gateway/issues/1117
[issue2629]: https://github.com/envoyproxy/gateway/issues/2629
Loading