Istio is een open-source tool om op een vrij eenvoudige manier inzicht te geven in het netwerkverkeer tussen micro-services (‘network mesh‘) in een Kubernetes cluster. Naast inzicht, kan Istio ook gebruikt worden om data-verkeer te sturen en te beveiligen. Het voordeel van Istio is dat er geen wijzigingen gemaakt hoeven te worden in de deployments/pods.
Installatie
Via Rancher Apps
Zoals de meeste apps in Rancher 2.x toegevoegd worden gaat dat ook op voor Istio via de ‘Apps & Marketplace‘.
De ‘Components‘ geeft de mogelijkheid om aan te vinken welke components er wel/niet meegnomen dienen te worden
eventuele wijzigingen kunnen in de overlay file geplaatst worden, en Helm deploy options kunnen nog gewijzigd worden. Rest de ‘Install‘ button…
Via Helm
helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace helm install istiod istio/istiod -n istio-system --wait
Via Kubectl (Getting Started)
Een andere methode om Istio te installeren is via de ‘Getting Started-pagina van Istio.
Eenmaal geïnstalleerd is er de namespace ‘istio-system‘ met hierin de deployments voor Istio. In het menu van de ‘Rancher Operator’ is nu de optie ‘Istio’ bijgekomen met Kiali en evt. Jaeger:`
Auto-injection sidecar
Een label dient toegevoegd te worden aan de namespaces waar de Istio Proxy sidecars toegevoegd worden om de datastromen tussen micro-services afgevangen wordt en doorgegeven aan de Istio Controle Plane.
Door het toevoegen van het label istio-injection=enabled
zal voor elke nieuwe pod de proxy sidecar automatisch toegevoegd worden. Bestaande pods dienen opnieuw ge-deployed te worden hiervoor.
$ kubectl label namespace default istio-injection=enabled
of via de GUI van Rancher wordt de mogelijkheid gegeven om via een button in het namespaces overzicht de namespaces te selecteren en dan de button ‘Enable Istio Auto Injection‘ te gebruiken.
In de details van een POD zal duidelijk zijn dat de proxy-sidecar ‘injected’ is.
Demo applicatie BookInfo
In de BookInfo pagina van Istio wordt uitgelegd hoe je een sample applicatie kan aanmaken in het cluster.
Istio Gateways
Gateways zijn de Istio manier voor Ingress dataverkeer om data dat binnenkomt van buiten het cluster door te sturen naar de ‘network mesh’.
Een Gateway maakt gebruik van Envoy proxies voor inkomend (ingress) of uitgaand (egress) dataverkeer. In de specificatie worden de port, protocol en hostname aangegeven.
Gateways voor Istio worden aangemaakt via het menu van Rancher Explorer -> Istio -> Gateways
Bijvoorbeeld:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: go-app-gateway namespace: go-app spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - app.digitalinfo.nl
VirtualServices
VirtualServices worden gebruikt om de Istio Gateways te koppelen aan services in de bewuste namespace. VirtualServices worden aangemaakt via het menu van Rancher Explorer -> Istio -> VirualServices
Bijvoorbeeld:
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: go-app-route namespace: go-app spec: gateways: - go-app-gateway hosts: - app.digitalinfo.nl http: - name: go-app route: - destination: host: go-app-svc
De host-verwijzing ‘go-app-svc’ gebruikt standaard de namespace gevolgd door ‘svc.cluster.local’ dus dat wordt ‘go-app-svc.go-app.svc.cluster.local‘
Deze service dient dus reeds aanwezig te zijn in de namespace go-app.
Kiali
Kiali is bereikbaar via het menu van Rancher Explorer -> Istio -> Overview
Met behulp van Kiali kunnen de datastromen inzichtelijk gemaakt worden. Bijvoorbeeld de bookinfo demo-app: