Home

Awesome

<!-- markdownlint-disable MD033 --> <h1> <img src="https://github.com/sighupio/fury-distribution/blob/main/docs/assets/fury-epta-white.png?raw=true" align="left" width="90" style="margin-right: 15px"/> Kubernetes Fury Service Mesh </h1> <!-- markdownlint-enable MD033 -->

Release License Slack

<!-- <KFD-DOCS> -->

Kubernetes Fury Istio add-on module for the Kubernetes Fury Distribution (KFD) allows to transparently add Istio Mesh capabilities to your KFD cluster.

If you are new to KFD please refer to the official documentation on how to get started with KFD.

Overview

Kubernetes Fury Istio add-on module deploys Istio service mesh into a Kubernetes cluster. A service mesh, such as Istio, allows to transparently add capabilities like observability, traffic management, and security to applications, without modifying their source code. These capabilities are of great value when running microservices at scale or under strict security requirements.

Istio

This module features the Istio Project. Istio provides behavioral insights and operational control over the service mesh as a whole, offering a complete solution to satisfy the diverse requirements of microservice applications.

Read more on Istio's documentation site.

Packages

Kubernetes Fury Service Mesh provides the following packages:

PackageVersionDescription
Istio Operatorv1.22.2Istio Service Mesh Operator package. Including the Istio Operator itself, the Jeager Operator, and Kiali. Includes 3 different profiles: minimal, tracing and full.

Compatibility

Kubernetes VersionCompatibilityNotes
1.27.x:white_check_mark:No known issues
1.28.x:white_check_mark:No known issues
1.29.x:white_check_mark:No known issues

Check the compatibility matrix for additional information about previous releases of the modules.

Usage

Prerequisites

ToolVersionDescription
furyctl>=0.6.0The recommended tool to download and manage KFD modules and their packages. To learn more about furyctl read the official documentation.
kustomize>=3.9.1Packages are customized using kustomize. To learn how to create your customization layer with kustomize, please refer to the repository.
KFD Monitoring Module>=1.11.1To have functioning metrics, dashboards and alerts. Prometheus Operator is also required by Kiali.
KFD Logging Module>=1.7.1When using tracing, ElasticSearch / OpenSearch is used as storage.

Istio deployment

  1. To start using Kubernetes Fury Service Mesh, add to your Furyfile.yml the module as a base, you can also specify the single package:
bases:
    - name: istio/istio-operator
      version: v3.1.0

See furyctl documentation for additional details about Furyfile.yml format.

  1. Execute the following command to download the packages to your machine:
furyctl vendor -H
  1. Inspect the downloaded packages under ./vendor/katalog/istio to get familiar with the content.

  2. Define a kustomization.yaml with that includes the ./vendor/katalog/istio directory as a resource:

resources:
    - ./vendor/katalog/istio/istio-operator/profiles/minimal

You can point to one of the predefined profiles (minimal, tracing or full) here.

  1. Finally, to deploy the selected profile to your cluster, execute:
kustomize build . | kubectl apply -f -

For further details please refer to each package's directory in this repository.

Istio Monitoring

The Service Mesh Module not only provides you with Kiali to visualize the status of the service mesh from a UI, but also includes metrics, dashboards and alerts for Istio's components out-of-the-box.

You can monitor the status of Istio, the service-mesh itself and its components from the provided Grafana Dashboards. Here are some screenshots:

<!-- markdownlint-disable MD033 -->

<a href="docs/images/screenshots/kiali.png"><img src="docs/images/screenshots/kiali.png" width="250"/></a> <a href="docs/images/screenshots/istio-control-plane-dashboard.png"><img src="docs/images/screenshots/istio-control-plane-dashboard.png" width="250"/></a> <a href="docs/images/screenshots/istio-mesh-darshboard.png"><img src="docs/images/screenshots/istio-mesh-darshboard.png" width="250"/></a> <a href="docs/images/screenshots/istio-service-dashboard.png"><img src="docs/images/screenshots/istio-service-dashboard.png" width="250"/></a> <a href="docs/images/screenshots/istio-workload-dashboard.png"><img src="docs/images/screenshots/istio-workload-dashboard.png" width="250"/></a>

<!-- markdownlint-enable MD033 -->

click on each screenshot for the full screen version

The following set of alerts is included:

Alert NameSummaryDescription
IstioMetricsMissingIstio Metrics missing[Critical]: Check prometheus deployment or whether the prometheus filters are applied correctly
HTTP5xxRateHigh5xx rate too highThe HTTP 5xx errors rate higher than 0.05 in 5 mins
WorkloadLatencyP99High-The workload request latency P99 > 160ms
IngressLatencyP99High-The ingress latency P99 > 250ms
ProxyContainerCPUUsageHighProxy Container CPU usage (namespace {{ $labels.namespace }}) (pod {{ $labels.pod }}) (container {{ $labels.container }}) VALUE = {{ $value }}.Proxy Container CPU usage is above 80%
ProxyContainerMemoryUsageHighProxy Container Memory usage (namespace {{ $labels.namespace }}) (pod {{ $labels.pod }}) (container {{ $labels.container }}) VALUE = {{ $value }}.Proxy Container Memory usage is above 80%
IngressMemoryUsageIncreaseRateHighIngress proxy Memory change rate, VALUE = {{ $value }}.Ingress proxy Memory Usage increases more than 200 Bytes/sec
IstiodContainerCPUUsageHighIstiod Container CPU usage (namespace {{ $labels.namespace }}) (pod {{ $labels.pod }}) (container {{ $labels.container }}) VALUE = {{ $value }}.Isitod Container CPU usage is above 80%
IstiodMemoryUsageHighIstiod Container Memory usage (namespace {{ $labels.namespace }}) (pod {{ $labels.pod }}) (container {{ $labels.container }}) VALUE = {{ $value }}.Istiod Container Memory usage is above 80%
IstiodMemoryUsageIncreaseRateHighIstiod Container Memory usage increase rate high, VALUE = {{ $value }}.Istiod Container Memory usage increases more than 1k Bytes/sec
IstiodxdsPushErrorsHighistiod push errors is too highistiod push error rate is higher than 0.05
IstiodxdsRejectHighistiod rejects rate is too highistiod rejects rate is higher than 0.05
IstiodContainerNotReadyistiod container not readycontainer: discovery not running
IstiodUnavailableReplicaIstiod unavailable podIstiod unavailable replica > 0
Ingress200RateLowingress gateway 200 rate dropsThe expected rate is 100 per ns, the limit is set based on 15ns
<!-- links --> <!-- </KFD-DOCS> --> <!-- <FOOTER> -->

Contributing

Before contributing, please read first the Contributing Guidelines.

Reporting Issues

In case you experience any problems with the module, please open a new issue.

License

This module is open-source and it's released under the following LICENSE

<!-- </FOOTER> -->