Istio Service Mesh

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: