
istio.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: example-service-gateway
labels:
name: example-service
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: example-service-nginx
labels:
name: example-service-nginx
spec:
hosts:
- "*"
gateways:
- example-service-gateway
http:
- match:
- uri:
prefix: "/example"
route:
- destination:
host: example-service-nginx
port:
number: 80
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: example-service
spec:
hosts:
- example-service
tcp:
- match:
- port: 9000
route:
- destination:
host: example-service
subset: release
weight: 90
- destination:
host: example-service
subset: canary
weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: example-service
spec:
host: example-service
subsets:
- name: release
labels:
track: release
- name: canary
labels:
track: canary
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: istio-nginx-examle-lb
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-body-size: 0m
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
spec:
rules:
- host: istio-test.mydomain.com
http:
paths:
- backend:
serviceName: example-service-nginx
servicePort: 80
tls:
- hosts:
- istio-test.mydomain.com
secretName: mydomain-com
deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: example-service-v1
labels:
name: example-service
instance: testing
track: release
version: 1.0.0
spec:
selector:
matchLabels:
name: example-service
instance: testing
track: release
version: 1.0.0
template:
metadata:
annotations:
sidecar.istio.io/inject: "true"
labels:
name: example-service
instance: testing
track: release
version: 1.0.0
spec:
containers:
- name: example-service
image: darrencraig/example-php-service:v1
imagePullPolicy: Always
ports:
- containerPort: 9000
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: example-service-v2
labels:
name: example-service
instance: testing
track: canary
version: 2.0.0
spec:
selector:
matchLabels:
name: example-service
instance: testing
track: canary
version: 2.0.0
template:
metadata:
annotations:
sidecar.istio.io/inject: "true"
labels:
name: example-service
instance: testing
track: canary
version: 2.0.0
spec:
containers:
- name: example-service
image: darrencraig/example-php-service:v2
imagePullPolicy: Always
ports:
- containerPort: 9000
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: example-service-nginx
labels:
name: example-service-nginx
instance: testing
spec:
selector:
matchLabels:
name: example-service-nginx
instance: testing
template:
metadata:
labels:
name: example-service-nginx
instance: testing
spec:
containers:
- name: example-service-nginx
image: darrencraig/laravel-nginx:latest
imagePullPolicy: Always
env:
- name: LARAVEL_UPSTREAM
value: example-service
ports:
- name: http
containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /etc/nginx/conf.d
name: example-service-nginx
resources:
volumes:
- name: example-service-nginx
configMap:
name: example-service-nginx
items:
- key: nginx
path: default.conf
service.yaml
apiVersion: v1
kind: Service
metadata:
name: example-service-nginx
labels:
name: example-service-nginx
spec:
type: ClusterIP
ports:
- name: http-nginx
port: 80
selector:
name: example-service-nginx
---
apiVersion: v1
kind: Service
metadata:
name: example-service
labels:
name: example-service
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 9000
selector:
name: example-service
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: example-service-nginx
labels:
name: example-service-nginx
data:
nginx: |
server {
listen 80;
root /var/www/public;
index index.php index.html index.htm;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files $uri $uri/ /index.php$query_string;
}
location ~ \.php$ {
# try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_read_timeout 1000;
fastcgi_pass example-service:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}