CKS Istio notes
Notes on installing Istio service mesh with Kiali, Grafana, and Jaeger on a Kubernetes cluster, including Gateway and VirtualService configuration.
Work in progress on Istio
Do not forget to restart CoreDNS after you install Calico since there was already a basic CNI activated.
The following commands set up Istio on the cluster: remove taints from the node, deploy a test nginx pod, install Istio and its addons (Kiali, Prometheus, Grafana, Jaeger), enable sidecar injection, and deploy the Google microservices demo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
k get nodes tf-srv-vibrant-khayyam -o jsonpath='{.spec.taint}'
k taint node tf-srv-zealous-jepsen node-role.kubernetes.io/master-
k run nginx --image=nginx:alpine --port 80 --expose
k edit svc nginx
curl -L https://istio.io/downloadIstio | sh -
cp istio-1.14.3/bin/istioctl /usr/local/bin/
istioctl isntall
kubectl apply -f istio-1.14.3/samples/addons/kiali.yaml
kubectl apply -f istio-1.14.3/samples/addons/prometheus.yaml
k delete pod -n kube-system coredns-64897985d-9 coredns-64897985d-zk2nj
k delete pod -n kube-system coredns-64897985d-9nqlw coredns-64897985d-t7mz9
kubectl label namespace default istio-injection=enabled
k create -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/release/kubernetes-manifests.yaml
k apply -f istio-1.14.3/samples/addons/grafana.yaml
k apply -f istio-1.14.3/samples/addons/jaeger.yaml
k apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/release/istio-manifests.yaml
k get gateways.networking.istio.io -A
k get virtualservices.networking.istio.io
k edit virtualservices.networking.istio.io frontend
k edit virtualservices.networking.istio.io frontend-ingress
k delete virtualservices.networking.istio.io frontend
~
Gateway and Virtual Service
The following manifest defines an Istio Gateway that accepts HTTP and HTTPS traffic, along with multiple VirtualService resources that route traffic to different backend services based on the hostname.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: service-gateway
spec:
selector:
istio: ingressgateway # use Istio default gateway implementation
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- "*"
tls:
mode: PASSTHROUGH
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: kiali-ingress
spec:
hosts:
- "kiali.vl.k8s"
gateways:
- service-gateway
http:
- route:
- destination:
host: kiali.istio-system.svc.cluster.local
port:
number: 20001
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: argocd-ingress
spec:
hosts:
- "argocd.vl.k8s"
gateways:
- service-gateway
tls:
- match:
- sniHosts:
- "argocd.vl.k8s"
route:
- destination:
host: argocd-server.argocd.svc.cluster.local
port:
number: 443
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: frontend-ingress
spec:
hosts:
- "frontend.vl.k8s"
gateways:
- service-gateway
http:
- route:
- destination:
host: frontend.default.svc.cluster.local
port:
number: 80
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: grafana-ingress
spec:
hosts:
- "grafana.vl.k8s"
gateways:
- service-gateway
http:
- route:
- destination:
host: grafana.istio-system.svc.cluster.local
port:
number: 3000
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: nginx-ingress
spec:
hosts:
- "nginx.vl.k8s"
gateways:
- service-gateway
http:
- route:
- destination:
host: nginx.default.svc.cluster.local
port:
number: 80
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: nginx-ingress
spec:
hosts:
- "tracing.vl.k8s"
gateways:
- service-gateway
http:
- route:
- destination:
host: tracing.istio-system.svc.cluster.local
port:
number: 80
This post is licensed under CC BY 4.0 by the author.