mirror of https://github.com/fluxcd/flagger.git
Add HTTP match and rewrite docs
This commit is contained in:
parent
56cb888cbf
commit
6750f10ffa
|
@ -97,6 +97,13 @@ spec:
|
||||||
# Istio virtual service host names (optional)
|
# Istio virtual service host names (optional)
|
||||||
hosts:
|
hosts:
|
||||||
- podinfo.example.com
|
- podinfo.example.com
|
||||||
|
# Istio virtual service HTTP match conditions (optional)
|
||||||
|
match:
|
||||||
|
- uri:
|
||||||
|
prefix: /
|
||||||
|
# Istio virtual service HTTP rewrite (optional)
|
||||||
|
rewrite:
|
||||||
|
uri: /
|
||||||
# for emergency cases when you want to ship changes
|
# for emergency cases when you want to ship changes
|
||||||
# in production without analysing the canary
|
# in production without analysing the canary
|
||||||
skipAnalysis: false
|
skipAnalysis: false
|
||||||
|
|
|
@ -26,6 +26,13 @@ spec:
|
||||||
# Istio virtual service host names (optional)
|
# Istio virtual service host names (optional)
|
||||||
hosts:
|
hosts:
|
||||||
- app.istio.weavedx.com
|
- app.istio.weavedx.com
|
||||||
|
# Istio virtual service HTTP match conditions (optional)
|
||||||
|
match:
|
||||||
|
- uri:
|
||||||
|
prefix: /
|
||||||
|
# Istio virtual service HTTP rewrite (optional)
|
||||||
|
rewrite:
|
||||||
|
uri: /
|
||||||
# for emergency cases when you want to ship changes
|
# for emergency cases when you want to ship changes
|
||||||
# in production without analysing the canary
|
# in production without analysing the canary
|
||||||
skipAnalysis: false
|
skipAnalysis: false
|
||||||
|
|
|
@ -39,6 +39,13 @@ spec:
|
||||||
# Istio virtual service host names (optional)
|
# Istio virtual service host names (optional)
|
||||||
hosts:
|
hosts:
|
||||||
- podinfo.example.com
|
- podinfo.example.com
|
||||||
|
# Istio virtual service HTTP match conditions (optional)
|
||||||
|
match:
|
||||||
|
- uri:
|
||||||
|
prefix: /
|
||||||
|
# Istio virtual service HTTP rewrite (optional)
|
||||||
|
rewrite:
|
||||||
|
uri: /
|
||||||
# for emergency cases when you want to ship changes
|
# for emergency cases when you want to ship changes
|
||||||
# in production without analysing the canary
|
# in production without analysing the canary
|
||||||
skipAnalysis: false
|
skipAnalysis: false
|
||||||
|
@ -96,7 +103,124 @@ spec:
|
||||||
The target deployment should expose a TCP port that will be used by Flagger to create the ClusterIP Service and
|
The target deployment should expose a TCP port that will be used by Flagger to create the ClusterIP Service and
|
||||||
the Istio Virtual Service. The container port from the target deployment should match the `service.port` value.
|
the Istio Virtual Service. The container port from the target deployment should match the `service.port` value.
|
||||||
|
|
||||||
### Canary Deployment
|
### Virtual Service
|
||||||
|
|
||||||
|
Flagger creates an Istio Virtual Service based on the Canary service spec.
|
||||||
|
|
||||||
|
The following spec exposes the `frontend` workload inside the mesh on `frontend.test.svc.cluster.local:9898`
|
||||||
|
and outside the mesh on `frontend.example.com`. You'll have to specify an Istio ingress gateway for external hosts.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: flagger.app/v1alpha3
|
||||||
|
kind: Canary
|
||||||
|
metadata:
|
||||||
|
name: frontend
|
||||||
|
namespace: test
|
||||||
|
service:
|
||||||
|
# container port
|
||||||
|
port: 9898
|
||||||
|
# Istio gateways (optional)
|
||||||
|
gateways:
|
||||||
|
- public-gateway.istio-system.svc.cluster.local
|
||||||
|
# Istio virtual service host names (optional)
|
||||||
|
hosts:
|
||||||
|
- frontend.example.com
|
||||||
|
# Istio virtual service HTTP match conditions (optional)
|
||||||
|
match:
|
||||||
|
- uri:
|
||||||
|
prefix: /
|
||||||
|
# Istio virtual service HTTP rewrite (optional)
|
||||||
|
rewrite:
|
||||||
|
uri: /
|
||||||
|
```
|
||||||
|
|
||||||
|
For the above spec Flagger will generate the following virtual service:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.istio.io/v1alpha3
|
||||||
|
kind: VirtualService
|
||||||
|
metadata:
|
||||||
|
name: frontend
|
||||||
|
namespace: test
|
||||||
|
ownerReferences:
|
||||||
|
- apiVersion: flagger.app/v1alpha3
|
||||||
|
blockOwnerDeletion: true
|
||||||
|
controller: true
|
||||||
|
kind: Canary
|
||||||
|
name: podinfo
|
||||||
|
uid: 3a4a40dd-3875-11e9-8e1d-42010a9c0fd1
|
||||||
|
spec:
|
||||||
|
gateways:
|
||||||
|
- public-gateway.istio-system.svc.cluster.local
|
||||||
|
- mesh
|
||||||
|
hosts:
|
||||||
|
- frontend.example.com
|
||||||
|
- frontend
|
||||||
|
http:
|
||||||
|
- match:
|
||||||
|
- uri:
|
||||||
|
prefix: /
|
||||||
|
rewrite:
|
||||||
|
uri: /
|
||||||
|
route:
|
||||||
|
- destination:
|
||||||
|
host: frontend-primary
|
||||||
|
port:
|
||||||
|
number: 9898
|
||||||
|
weight: 100
|
||||||
|
- destination:
|
||||||
|
host: frontend-canary
|
||||||
|
port:
|
||||||
|
number: 9898
|
||||||
|
weight: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Flagger keeps in sync the virtual service with the canary service spec. Any direct modification of the virtual
|
||||||
|
service spec will be overwritten.
|
||||||
|
|
||||||
|
To expose a workload inside the mesh on `http://backend.test.svc.cluster.local:9898`,
|
||||||
|
the service spec can contain only the container port:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: flagger.app/v1alpha3
|
||||||
|
kind: Canary
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: test
|
||||||
|
spec:
|
||||||
|
service:
|
||||||
|
port: 9898
|
||||||
|
```
|
||||||
|
|
||||||
|
Based on the above spec, Flagger will create several ClusterIP services like:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: backend-primary
|
||||||
|
ownerReferences:
|
||||||
|
- apiVersion: flagger.app/v1alpha3
|
||||||
|
blockOwnerDeletion: true
|
||||||
|
controller: true
|
||||||
|
kind: Canary
|
||||||
|
name: backend
|
||||||
|
uid: 2ca1a9c7-2ef6-11e9-bd01-42010a9c0145
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 9898
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9898
|
||||||
|
selector:
|
||||||
|
app: backend-primary
|
||||||
|
```
|
||||||
|
|
||||||
|
Flagger works for user facing apps exposed outside the cluster via an ingress gateway
|
||||||
|
and for backend HTTP APIs that are accessible only from inside the mesh.
|
||||||
|
|
||||||
|
### Canary Stages
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -155,6 +279,9 @@ Spec:
|
||||||
# canary increment step
|
# canary increment step
|
||||||
# percentage (0-100)
|
# percentage (0-100)
|
||||||
stepWeight: 2
|
stepWeight: 2
|
||||||
|
# deploy straight to production without
|
||||||
|
# the metrics and webhook checks
|
||||||
|
skipAnalysis: false
|
||||||
```
|
```
|
||||||
|
|
||||||
The above analysis, if it succeeds, will run for 25 minutes while validating the HTTP metrics and webhooks every minute.
|
The above analysis, if it succeeds, will run for 25 minutes while validating the HTTP metrics and webhooks every minute.
|
||||||
|
|
Loading…
Reference in New Issue