-
Notifications
You must be signed in to change notification settings - Fork 794
Specifying multiple HTTP match uri in Istio Canary deployment via Flagger #434
Copy link
Copy link
Closed
Description
I am gonna use automatic Canary deployment so I tried to follow the process via Flagger.
Here was my VirtualService file for routing:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: {{ .Values.project }}
namespace: {{ .Values.service.namespace }}
spec:
hosts:
- {{ .Values.subdomain }}
gateways:
- mygateway.istio-system.svc.cluster.local
http:
{{- range $key, $value := .Values.routing.http }}
- name: {{ $key }}
{{ toYaml $value | indent 6 }}
{{- end }}Which the routing part looks like this:
http:
r1:
match:
- uri:
prefix: /myservice/monitor
route:
- destination:
host: myservice
port:
number: 9090
r2:
match:
- uri:
prefix: /myservice
route:
- destination:
host: myservice
port:
number: 8080
corsPolicy:
allowCredentials: false
allowHeaders:
- X-Tenant-Identifier
- Content-Type
- Authorization
allowMethods:
- GET
- POST
- PATCH
allowOrigin:
- "*"
maxAge: 24h `However as I found the Flagger overwites the virtualservice, I have removed this file and modified the canary.yaml file based on my requirements but I get yaml error:
{{- if .Values.canary.enabled }}
apiVersion: flagger.app/v1alpha3
kind: Canary
metadata:
name: {{ .Values.project }}
namespace: {{ .Values.service.namespace }}
labels:
app: {{ .Values.project }}
chart: {{ template "myservice-chart.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ .Values.project }}
progressDeadlineSeconds: 60
autoscalerRef:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
name: {{ .Values.project }}
service:
port: 8080
portDiscovery: true
{{- if .Values.canary.istioIngress.enabled }}
gateways:
- {{ .Values.canary.istioIngress.gateway }}
hosts:
- {{ .Values.canary.istioIngress.host }}
{{- end }}
trafficPolicy:
tls:
# use ISTIO_MUTUAL when mTLS is enabled
mode: DISABLE
# HTTP match conditions (optional)
match:
- uri:
prefix: /myservice
# cross-origin resource sharing policy (optional)
corsPolicy:
allowOrigin:
- "*"
allowMethods:
- GET
- POST
- PATCH
allowCredentials: false
allowHeaders:
- X-Tenant-Identifier
- Content-Type
- Authorization
maxAge: 24h
- uri:
prefix: /myservice/monitor
canaryAnalysis:
interval: {{ .Values.canary.analysis.interval }}
threshold: {{ .Values.canary.analysis.threshold }}
maxWeight: {{ .Values.canary.analysis.maxWeight }}
stepWeight: {{ .Values.canary.analysis.stepWeight }}
metrics:
- name: request-success-rate
threshold: {{ .Values.canary.thresholds.successRate }}
interval: 1m
- name: request-duration
threshold: {{ .Values.canary.thresholds.latency }}
interval: 1m
webhooks:
{{- if .Values.canary.loadtest.enabled }}
- name: load-test-get
url: {{ .Values.canary.loadtest.url }}
timeout: 5s
metadata:
cmd: "hey -z 1m -q 5 -c 2 http://myservice.default:8080"
- name: load-test-post
url: {{ .Values.canary.loadtest.url }}
timeout: 5s
metadata:
cmd: "hey -z 1m -q 5 -c 2 -m POST -d '{\"test\": true}' http://myservice.default:8080/echo"
{{- end }}
{{- end }}Can anyone help with this issue?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels