README ¶
Istio
An open platform to connect, manage, and secure microservices.
In addition, here are some other documents you may wish to read:
- Istio Community - describes how to get involved and contribute to the Istio project
- Istio Developer's Guide - explains how to set up and use an Istio development environment
- Project Conventions - describes the conventions we use within the code base
- Creating Fast and Lean Code - performance-oriented advice and guidelines for the code base
You'll find many other useful documents on our Wiki.
Introduction
Istio is an open platform for providing a uniform way to integrate microservices, manage traffic flow across microservices, enforce policies and aggregate telemetry data. Istio's control plane provides an abstraction layer over the underlying cluster management platform, such as Kubernetes, Mesos, etc.
Visit istio.io for in-depth information about using Istio.
Istio is composed of these components:
-
Envoy - Sidecar proxies per microservice to handle ingress/egress traffic between services in the cluster and from a service to external services. The proxies form a secure microservice mesh providing a rich set of functions like discovery, rich layer-7 routing, circuit breakers, policy enforcement and telemetry recording/reporting functions.
Note: The service mesh is not an overlay network. It simplifies and enhances how microservices in an application talk to each other over the network provided by the underlying platform.
-
Mixer - Central component that is leveraged by the proxies and microservices to enforce policies such as authorization, rate limits, quotas, authentication, request tracing and telemetry collection.
-
Pilot - A component responsible for configuring the proxies at runtime.
-
Citadel - A centralized component responsible for certificate issuance and rotation.
-
Node Agent - A per-node component responsible for certificate issuance and rotation.
-
Broker - A component implementing the Open Service Broker API for Istio-based services. (Under development)
Istio currently supports Kubernetes, Consul, and Eureka-based environments. We plan support for additional platforms such as Cloud Foundry, and Mesos in the near future.
Repositories
The Istio project is divided across a few GitHub repositories.
-
istio/istio. This is the main repository that you are currently looking at. It hosts Istio's core components and also the sample programs and the various documents that govern the Istio open source project. It includes:
- security. This directory contains security related code, including Citadel (acting as Certificate Authority), node agent, etc.
- pilot. This directory contains platform-specific code to populate the abstract service model, dynamically reconfigure the proxies when the application topology changes, as well as translate routing rules into proxy specific configuration.
- istioctl. This directory contains code for the istioctl command line utility.
- mixer. This directory contains code to enforce various policies for traffic passing through the proxies, and collect telemetry data from proxies and services. There are plugins for interfacing with various cloud platforms, policy management services, and monitoring services.
- broker. This directory contains code for Istio's implementation of the Open Service Broker API.
-
istio/api. This repository defines component-level APIs and common configuration formats for the Istio platform.
-
istio/mixerclient. Client libraries (currently supports C++) for Mixer's API.
-
istio/proxy. The Istio proxy contains extensions to the Envoy proxy (in the form of Envoy filters), that allow the proxy to delegate policy enforcement decisions to Mixer.
Issue management
We use GitHub combined with ZenHub to track all of our bugs and feature requests. Each issue we track has a variety of metadata:
-
Epic. An epic represents a feature area for Istio as a whole. Epics are fairly broad in scope and are basically product-level things. Each issue is ultimately part of an epic.
-
Milestone. Each issue is assigned a milestone. This is 0.1, 0.2, ..., or 'Nebulous Future'. The milestone indicates when we think the issue should get addressed.
-
Priority/Pipeline. Each issue has a priority which is represented by the Pipeline field within GitHub. Priority can be one of P0, P1, P2, or >P2. The priority indicates how important it is to address the issue within the milestone. P0 says that the milestone cannot be considered achieved if the issue isn't resolved.
We don't annotate issues with Releases; Milestones are used instead. We don't use GitHub projects at all, that support is disabled for our organization.
Directories ¶
Path | Synopsis |
---|---|
addons
|
|
servicegraph
Package servicegraph defines the core model for the servicegraph service.
|
Package servicegraph defines the core model for the servicegraph service. |
servicegraph/dot
Package dot provides serialization utilities for a servicegraph using the dot format.
|
Package dot provides serialization utilities for a servicegraph using the dot format. |
servicegraph/promgen
Package promgen generates service graphs from a prometheus backend.
|
Package promgen generates service graphs from a prometheus backend. |
broker
|
|
cmd/shared
Package shared contains types and functions that are used across the full set of broker commands.
|
Package shared contains types and functions that are used across the full set of broker commands. |
pkg/controller
Package controller contains the actual processing of frontend requests.
|
Package controller contains the actual processing of frontend requests. |
pkg/platform/kube/crd
Package crd provides an implementation of the config store and cache using Kubernetes Custom Resources and the informer framework from Kubernetes This implementation is adopted from github.com/istio/pilot/pkg/config/kube/crd/
|
Package crd provides an implementation of the config store and cache using Kubernetes Custom Resources and the informer framework from Kubernetes This implementation is adopted from github.com/istio/pilot/pkg/config/kube/crd/ |
pkg/server
Package server provides HTTP open service broker API server bindings.
|
Package server provides HTTP open service broker API server bindings. |
pkg/testing/mock/proto
Package proto is a generated protocol buffer package.
|
Package proto is a generated protocol buffer package. |
galley
|
|
cmd/shared
Package shared contains types and functions that are used across the full set of galley commands.
|
Package shared contains types and functions that are used across the full set of galley commands. |
pkg/runtime/resource
Package resource contains core abstract types for representing configuration resources.
|
Package resource contains core abstract types for representing configuration resources. |
istioctl
|
|
cmd/istioctl
Command istioctl is a Istio configuration command line utility.
|
Command istioctl is a Istio configuration command line utility. |
mixer
|
|
adapter
Package adapter contains the inventory for all Mixer adapters that are compiled into a specific Mixer binary.
|
Package adapter contains the inventory for all Mixer adapters that are compiled into a specific Mixer binary. |
adapter/bypass/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/circonus/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/cloudwatch/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/denier
Package denier provides an adapter that will return a status code (typically FAILED_PRECONDITION) for all calls.
|
Package denier provides an adapter that will return a status code (typically FAILED_PRECONDITION) for all calls. |
adapter/denier/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/dogstatsd/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/fluentd
Package fluentd adapter for Mixer.
|
Package fluentd adapter for Mixer. |
adapter/fluentd/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/kubernetesenv
Package kubernetesenv provides functionality to adapt mixer behavior to the kubernetes environment.
|
Package kubernetesenv provides functionality to adapt mixer behavior to the kubernetes environment. |
adapter/kubernetesenv/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/kubernetesenv/template
Package adapter_template_kubernetes is a generated protocol buffer package.
|
Package adapter_template_kubernetes is a generated protocol buffer package. |
adapter/list
Package list provides an adapter that implements the listEntry template to enable blacklist / whitelist checking of values.
|
Package list provides an adapter that implements the listEntry template to enable blacklist / whitelist checking of values. |
adapter/list/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/memquota
Package memquota provides a simple in-memory quota implementation.
|
Package memquota provides a simple in-memory quota implementation. |
adapter/memquota/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/opa/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/prometheus
Package prometheus publishes metric values collected by Mixer for ingestion by prometheus.
|
Package prometheus publishes metric values collected by Mixer for ingestion by prometheus. |
adapter/prometheus/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/rbac
Package rbac provides Role Based Access Control (RBAC) for services in Istio mesh.
|
Package rbac provides Role Based Access Control (RBAC) for services in Istio mesh. |
adapter/rbac/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/redisquota
Package redisquota provides a quota implementation with redis as backend.
|
Package redisquota provides a quota implementation with redis as backend. |
adapter/redisquota/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/servicecontrol/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/servicecontrol/template/servicecontrolreport
Package servicecontrolreport is a generated protocol buffer package.
|
Package servicecontrolreport is a generated protocol buffer package. |
adapter/signalfx/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/solarwinds
Package solarwinds publishes metric and log values collected by Mixer to appoptics and papertrail respectively.
|
Package solarwinds publishes metric and log values collected by Mixer to appoptics and papertrail respectively. |
adapter/solarwinds/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/stackdriver
Package stackdriver provides an adapter that implements the logEntry and metrics templates to serialize generated values to Stackdriver.
|
Package stackdriver provides an adapter that implements the logEntry and metrics templates to serialize generated values to Stackdriver. |
adapter/stackdriver/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/stackdriver/contextgraph
Package contextgraph adapter for Stackdriver Context API.
|
Package contextgraph adapter for Stackdriver Context API. |
adapter/stackdriver/trace
Package trace contains a tracespan adapter for Stackdriver trace.
|
Package trace contains a tracespan adapter for Stackdriver trace. |
adapter/statsd
Package statsd provides an adapter that implements the metrics template to serialize generated metric values to a statsd backend.
|
Package statsd provides an adapter that implements the metrics template to serialize generated metric values to a statsd backend. |
adapter/statsd/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
adapter/stdio
Package stdio provides an adapter that implements the logEntry and metrics templates to serialize generated logs and metrics to stdout, stderr, or files.
|
Package stdio provides an adapter that implements the logEntry and metrics templates to serialize generated logs and metrics to stdout, stderr, or files. |
adapter/stdio/config
Package config is a generated protocol buffer package.
|
Package config is a generated protocol buffer package. |
cmd/shared
Package shared contains types and functions that are used across the full set of mixer commands.
|
Package shared contains types and functions that are used across the full set of mixer commands. |
pkg/adapter
Package adapter defines the types consumed by adapter implementations to interface with Mixer.
|
Package adapter defines the types consumed by adapter implementations to interface with Mixer. |
pkg/attribute
Package attribute is focused on enabling efficient handling and tracking of attribute usage within Mixer.
|
Package attribute is focused on enabling efficient handling and tracking of attribute usage within Mixer. |
pkg/checkcache
Package checkcache provides a scalable cache to hold results of Mixer.Check operations.
|
Package checkcache provides a scalable cache to hold results of Mixer.Check operations. |
pkg/config/crd
Package crd provides the store interface to config resources stored as kubernetes custom resource definitions (CRDs).
|
Package crd provides the store interface to config resources stored as kubernetes custom resource definitions (CRDs). |
pkg/config/storetest
Package storetest provides the utility functions of config store for testing.
|
Package storetest provides the utility functions of config store for testing. |
pkg/il
Package il implements the intermediate-language for the config-language interpreter of Mixer.
|
Package il implements the intermediate-language for the config-language interpreter of Mixer. |
pkg/il/interpreter
Package interpreter implements an interpreter based runtime for the Mixer IL.
|
Package interpreter implements an interpreter based runtime for the Mixer IL. |
pkg/lang/compiler
Package compiler implements a compiler that converts Mixer's expression language into a Mixer IL-based program that can be executed via an interpreter.
|
Package compiler implements a compiler that converts Mixer's expression language into a Mixer IL-based program that can be executed via an interpreter. |
pkg/mockapi
Package mockapi supplies a fake Mixer server for use in testing.
|
Package mockapi supplies a fake Mixer server for use in testing. |
pkg/perf
Package perf is a helper library for writing Mixer perf tests.
|
Package perf is a helper library for writing Mixer perf tests. |
pkg/pool
Package pool provides access to a mixer-global pool of buffers, a pool of goroutines, and a string interning table.
|
Package pool provides access to a mixer-global pool of buffers, a pool of goroutines, and a string interning table. |
pkg/runtime/config
Package config is designed to listen to the config changes through the store and create a fully-resolved configuration state that can be used by the rest of the runtime code.
|
Package config is designed to listen to the config changes through the store and create a fully-resolved configuration state that can be used by the rest of the runtime code. |
pkg/runtime/dispatcher
Package dispatcher is used to dispatch incoming requests to one or more handlers.
|
Package dispatcher is used to dispatch incoming requests to one or more handlers. |
pkg/runtime/routing
Package routing implements a routing table for resolving incoming requests to handlers.
|
Package routing implements a routing table for resolving incoming requests to handlers. |
pkg/status
Package status provides utility functions for google_rpc status objects.
|
Package status provides utility functions for google_rpc status objects. |
template
Package template provides runtime descriptors of the templates known to Mixer at compile-time.
|
Package template provides runtime descriptors of the templates known to Mixer at compile-time. |
template/apikey
Package apikey is a generated protocol buffer package.
|
Package apikey is a generated protocol buffer package. |
template/authorization
Package authorization is a generated protocol buffer package.
|
Package authorization is a generated protocol buffer package. |
template/checknothing
Package checknothing is a generated protocol buffer package.
|
Package checknothing is a generated protocol buffer package. |
template/edge
Package edge is a generated protocol buffer package.
|
Package edge is a generated protocol buffer package. |
template/listentry
Package listentry is a generated protocol buffer package.
|
Package listentry is a generated protocol buffer package. |
template/logentry
Package logentry is a generated protocol buffer package.
|
Package logentry is a generated protocol buffer package. |
template/metric
Package metric is a generated protocol buffer package.
|
Package metric is a generated protocol buffer package. |
template/quota
Package quota is a generated protocol buffer package.
|
Package quota is a generated protocol buffer package. |
template/reportnothing
Package reportnothing is a generated protocol buffer package.
|
Package reportnothing is a generated protocol buffer package. |
template/sample
Package sample provides a set of templates for internal testing of Mixer.
|
Package sample provides a set of templates for internal testing of Mixer. |
template/sample/apa
Package istio_mixer_adapter_sample_myapa is a generated protocol buffer package.
|
Package istio_mixer_adapter_sample_myapa is a generated protocol buffer package. |
template/sample/check
Package istio_mixer_adapter_sample_check is a generated protocol buffer package.
|
Package istio_mixer_adapter_sample_check is a generated protocol buffer package. |
template/sample/quota
Package istio_mixer_adapter_sample_quota is a generated protocol buffer package.
|
Package istio_mixer_adapter_sample_quota is a generated protocol buffer package. |
template/sample/report
Package istio_mixer_adapter_sample_report is a generated protocol buffer package.
|
Package istio_mixer_adapter_sample_report is a generated protocol buffer package. |
template/tracespan
Package tracespan is a generated protocol buffer package.
|
Package tracespan is a generated protocol buffer package. |
test/perf/perfclient
Package test supplies a fake Mixer server for use in testing.
|
Package test supplies a fake Mixer server for use in testing. |
test/spyAdapter
Package spyAdapter is intended for Mixer testing *ONLY*.
|
Package spyAdapter is intended for Mixer testing *ONLY*. |
test/spyAdapter/template
Package template contains generated code for the spy adapter testing.
|
Package template contains generated code for the spy adapter testing. |
test/spyAdapter/template/apa
Package sampleapa is a generated protocol buffer package.
|
Package sampleapa is a generated protocol buffer package. |
test/spyAdapter/template/check
Package samplecheck is a generated protocol buffer package.
|
Package samplecheck is a generated protocol buffer package. |
test/spyAdapter/template/quota
Package samplequota is a generated protocol buffer package.
|
Package samplequota is a generated protocol buffer package. |
test/spyAdapter/template/report
Package samplereport is a generated protocol buffer package.
|
Package samplereport is a generated protocol buffer package. |
tools/codegen/pkg/inventory
Package inventory is used to generate the mixer adapter inventory source file.
|
Package inventory is used to generate the mixer adapter inventory source file. |
pilot
|
|
pkg/config/aggregate
Package aggregate implements a read-only aggregator for config stores.
|
Package aggregate implements a read-only aggregator for config stores. |
pkg/config/aggregate/fakes
Code generated by counterfeiter.
|
Code generated by counterfeiter. |
pkg/config/kube/crd
Package crd provides an implementation of the config store and cache using Kubernetes Custom Resources and the informer framework from Kubernetes
|
Package crd provides an implementation of the config store and cache using Kubernetes Custom Resources and the informer framework from Kubernetes |
pkg/config/kube/ingress
Package ingress provides a read-only view of Kubernetes ingress resources as an ingress rule configuration type store
|
Package ingress provides a read-only view of Kubernetes ingress resources as an ingress rule configuration type store |
pkg/config/memory
Package memory provides an in-memory volatile config store implementation
|
Package memory provides an in-memory volatile config store implementation |
pkg/config/monitor/fakes
Code generated by counterfeiter.
|
Code generated by counterfeiter. |
pkg/model/test
Package test is a generated protocol buffer package.
|
Package test is a generated protocol buffer package. |
pkg/networking/core/v1alpha3/fakes
Code generated by counterfeiter.
|
Code generated by counterfeiter. |
pkg/networking/plugin/authz
Package authz converts Istio RBAC (role-based-access-control) policies (ServiceRole and ServiceRoleBinding) to corresponding filter config that is used by the envoy RBAC filter to enforce access control to the service co-located with envoy.
|
Package authz converts Istio RBAC (role-based-access-control) policies (ServiceRole and ServiceRoleBinding) to corresponding filter config that is used by the envoy RBAC filter to enforce access control to the service co-located with envoy. |
pkg/networking/plugin/registry
Package registry represents a registry of plugins that can be used by a config generator.
|
Package registry represents a registry of plugins that can be used by a config generator. |
pkg/serviceregistry/cloudfoundry/fakes
Code generated by counterfeiter.
|
Code generated by counterfeiter. |
pkg/serviceregistry/kube
Package kube implements the shared and reusable library for Kubernetes
|
Package kube implements the shared and reusable library for Kubernetes |
test/grpcecho
Package grpecho is a generated protocol buffer package.
|
Package grpecho is a generated protocol buffer package. |
tools
Tool to generate pilot/pkg/config/kube/types.go Example run command: go run pilot/tools/generate_config_crd_types.go --template pilot/tools/types.go.tmpl --output pilot/pkg/config/kube/crd/types.go
|
Tool to generate pilot/pkg/config/kube/types.go Example run command: go run pilot/tools/generate_config_crd_types.go --template pilot/tools/types.go.tmpl --output pilot/pkg/config/kube/crd/types.go |
pkg
|
|
cache
Package cache provides general-purpose in-memory caches.
|
Package cache provides general-purpose in-memory caches. |
ctrlz
Package ctrlz implements Istio's introspection facility.
|
Package ctrlz implements Istio's introspection facility. |
ctrlz/topics
Package topics defines several canonical ControlZ topics.
|
Package topics defines several canonical ControlZ topics. |
log
Package log provides the canonical logging functionality used by Go-based Istio components.
|
Package log provides the canonical logging functionality used by Go-based Istio components. |
probe
Package probe provides liveness / readiness probe.
|
Package probe provides liveness / readiness probe. |
test/fakes/policy
Package pb is a generated protocol buffer package.
|
Package pb is a generated protocol buffer package. |
tracing
Package tracing provides the canonical tracing functionality used by Go-based Istio components.
|
Package tracing provides the canonical tracing functionality used by Go-based Istio components. |
version
Package version provides build version information.
|
Package version provides build version information. |
samples
|
|
security
|
|
pkg/adapter/vault
Package vault provides adapter to connect to vault server.
|
Package vault provides adapter to connect to vault server. |
pkg/caclient/protocol
Package protocol defines the interface of CA client protocol.
|
Package protocol defines the interface of CA client protocol. |
proto
Package istio_v1_auth is a generated protocol buffer package.
|
Package istio_v1_auth is a generated protocol buffer package. |
tests
|
|
k8s
Package k8s provides helpers for testing k8s
|
Package k8s provides helpers for testing k8s |
tools
|
|