toc/projects/istio/istio-incubation-proposal.md

43 KiB
Raw Permalink Blame History

Name of the project

Istio

Description

Istio is an open source service mesh that transparently provides a uniform and efficient way to secure, connect, and monitor services in cloud native applications. It provides zero-trust networking, policy enforcement, traffic management, load balancing, and monitoring, without requiring applications to be rewritten.

Features include:

  • Secure service-to-service communication based on zero-trust principles, using TLS encryption and strong identity-based authentication and authorization
  • Automatic load balancing for HTTP, gRPC, WebSocket, and TCP traffic
  • Fine-grained control of traffic behavior with rich routing rules, retries, failovers, and fault injection
  • A policy API supporting access controls, rate limits and quotas, that can be connected to external authorization systems
  • Automatic generation of metrics, logs, and traces for all traffic within a cluster, including cluster ingress and egress
  • A data plane platform allowing for extension and customization of proxy behavior

Istio is designed for extensibility, and can handle a diverse range of deployment needs. Istios control plane runs on Kubernetes, and is capable of managing workloads running in the same Kubernetes cluster, other Kubernetes clusters, and even workloads running outside Kubernetes on VMs.

Sponsor / Advisor from TOC

Dave Zolotusky, with help from Erin Boyd (TOC) and Lee Calcote (TAG Network)

License

Istio is licensed under the Apache 2.0 license.

Source control repositories

External dependencies

Istio has external dependencies licensed under the following CNCF-approved licenses:

  • Apache 2.0
  • BSD License
  • ISC License
  • MIT License

Five modules are licensed under the Mozilla Public License, and all have been granted exceptions by the CNCF governing board.

Licenses for most Istio dependencies are automatically included at https://github.com/istio/istio/tree/master/licenses. A snapshot of modules and their corresponding licenses can be found below.

Projects in istio-ecosystem will be brought in line with CNCF guidelines before submission.

Issue tracker

https://github.com/istio/istio/issues

Committers

Commits to Istio, no matter how small, are welcome from anyone in the community.

Istio uses "maintainer" as the noun for a member allowed to approve code contributions. See https://github.com/istio/community/blob/master/ROLES.md#maintainer for more information.

A dashboard of Istio maintainers can be seen at https://eng.istio.io/maintainers.

Infrastructure requirements (CI / CNCF Cluster)

The project uses Prow infrastructure run by Google Cloud. Artifacts are stored in Google Cloud Storage, and containers published to registries including Docker Hub and Google Container Registry.

Google will migrate ownership of this infrastructure to the CNCF and, along with other community members, sponsor it going forward.

Statement on alignment with CNCF mission

Istio aims to provide security, observability and policy for traffic on top of Kubernetes. If the goal of the CNCF is to make cloud native computing ubiquitous, then a goal of Istio could be expressed as making that ubiquity safe and easy to manage.

Istio is a service mesh, and service meshes are called out in the CNCF charter as exemplifying the Cloud Native approach.

Istio stands on the shoulders of several CNCF projects, such as Kubernetes, Envoy, gRPC, Prometheus and SPIFFE. It can be installed with Helm, and integrations exist for projects including Knative, Flagger, Jaeger, Open Policy Agent, and OpenTelemetry.

Communication channels

Website

https://istio.io/

Release methodology and mechanics

We produce new builds of Istio for each commit. Around once per quarter, we build a minor release and run through several additional tests as well as release qualification. We release patch versions for issues found in minor releases.

Detailed information on Istio's release management can be found in its documentation and its developer wiki.

Security processes

Istio has a responsible and mature vulnerability submission and disclosure program, managed by the Product Security Working Group. The processes are documented at https://istio.io/latest/docs/releases/security-vulnerabilities/.

Vendors meeting certain published criteria receive advance notice of security vulnerabilities through Istio's early disclosure list, which is documented at https://github.com/istio/community/blob/master/EARLY-DISCLOSURE.md.

Roadmap

Our 2022 roadmap highlights the following goals:

  • Stabilizing Istio's API surface
  • Improving upgrades and troubleshooting
  • Enhancing extensibility
  • Expanding reach
  • Further security hardening

Social media account

Community size

Istio has had over 8000 individual contributors on the projects GitHub repositories.

The project has over 32,000 GitHub stars across its repositories.

Over 70 companies have submitted at least 8 Pull Requests to Istio.

Contribution

Istio's proud parents are Google and IBM, alongside the Lyft team who built the Envoy proxy.

Significant contributions come from:

  • US technology companies, including Red Hat, Cisco, VMware, and Intel
  • Chinese cloud providers and vendors, including Huawei, Tencent, Alibaba, and DaoCloud
  • Companies founded to bring Istio solutions to market, including Tetrate, Aspen Mesh, and Solo.io
  • Istio's end users, including Auto Trader UK, Salesforce, SAP, and Yahoo!

End users

According to the CNCF annual survey, Istio is the most widely adopted service mesh. A list of public reference customers can be found on the istio website, including a number of case studies in text or video format.

The first annual IstioCon event, held online in 2021, had over 4,000 attendees. The project also hosts monthly community meetups.

Licenses

At the time of project submission, the following modules were used with the following licenses. For an up-to-date list, please refer to the go.mod file and licenses directory in each repository.

Module Apache BSD ISC MIT Mozilla
cloud.google.com/go Apache 2.0
cloud.google.com/go/compute Apache 2.0
cloud.google.com/go/logging Apache 2.0
cloud.google.com/go/security Apache 2.0
contrib.go.opencensus.io/exporter/prometheus Apache 2.0
github.com/AdaLogics/go-fuzz-headers Apache 2.0
github.com/antlr/antlr4/runtime/Go/antlr BSD
github.com/asaskevich/govalidator MIT
github.com/Azure/go-ansiterm MIT
github.com/Azure/go-autorest Apache 2.0
github.com/Azure/go-autorest/autorest Apache 2.0
github.com/Azure/go-autorest/autorest/adal Apache 2.0
github.com/Azure/go-autorest/autorest/date Apache 2.0
github.com/Azure/go-autorest/logger Apache 2.0
github.com/Azure/go-autorest/tracing Apache 2.0
github.com/beorn7/perks MIT
github.com/BurntSushi/toml MIT
github.com/cenkalti/backoff/v4 MIT
github.com/census-instrumentation/opencensus-proto Apache 2.0
github.com/cespare/xxhash MIT
github.com/cespare/xxhash/v2 MIT
github.com/chai2010/gettext-go BSD
github.com/cheekybits/genny MIT
github.com/cheggaaa/pb/v3 BSD
github.com/cncf/udpa/go Apache 2.0
github.com/cncf/xds/go Apache 2.0
github.com/containerd/stargz-snapshotter/estargz Apache 2.0
github.com/containerd/typeurl Apache 2.0
github.com/containernetworking/cni Apache 2.0
github.com/containernetworking/plugins Apache 2.0
github.com/coreos/go-oidc/v3 Apache 2.0
github.com/cpuguy83/go-md2man/v2 MIT
github.com/cyphar/filepath-securejoin BSD
github.com/davecgh/go-spew ISC
github.com/decred/dcrd/dcrec/secp256k1/v4 ISC
github.com/docker/cli Apache 2.0
github.com/docker/distribution Apache 2.0
github.com/docker/docker Apache 2.0
github.com/docker/docker-credential-helpers MIT
github.com/envoyproxy/go-control-plane Apache 2.0
github.com/envoyproxy/protoc-gen-validate Apache 2.0
github.com/evanphx/json-patch BSD
github.com/evanphx/json-patch/v5 BSD
github.com/exponent-io/jsonpath MIT
github.com/fatih/camelcase MIT
github.com/fatih/color MIT
github.com/felixge/fgprof MIT
github.com/florianl/go-nflog/v2 MIT
github.com/fsnotify/fsnotify BSD
github.com/fvbommel/sortorder MIT
github.com/go-errors/errors MIT
github.com/go-kit/log MIT
github.com/go-logfmt/logfmt MIT
github.com/go-logr/logr Apache 2.0
github.com/go-openapi/jsonpointer Apache 2.0
github.com/go-openapi/jsonreference Apache 2.0
github.com/go-openapi/swag Apache 2.0
github.com/go-task/slim-sprig MIT
github.com/gobwas/glob MIT
github.com/goccy/go-json MIT
github.com/gogo/protobuf BSD
github.com/golang-jwt/jwt/v4 MIT
github.com/golang/groupcache Apache 2.0
github.com/golang/protobuf BSD
github.com/google/btree Apache 2.0
github.com/google/cel-go Apache 2.0 BSD
github.com/google/go-cmp BSD
github.com/google/go-containerregistry Apache 2.0
github.com/google/gofuzz Apache 2.0
github.com/google/pprof Apache 2.0
github.com/google/shlex Apache 2.0
github.com/google/uuid BSD
github.com/googleapis/gax-go/v2 BSD
github.com/googleapis/gnostic Apache 2.0
github.com/gorilla/mux BSD
github.com/gorilla/websocket BSD
github.com/gregjones/httpcache MIT
github.com/grpc-ecosystem/go-grpc-middleware Apache 2.0
github.com/grpc-ecosystem/go-grpc-prometheus Apache 2.0
github.com/hashicorp/errwrap MPL
github.com/hashicorp/go-multierror MPL
github.com/hashicorp/go-version MPL
github.com/hashicorp/golang-lru MPL
github.com/hashicorp/hcl MPL
github.com/huandu/xstrings MIT
github.com/imdario/mergo BSD
github.com/inconshreveable/mousetrap Apache 2.0
github.com/jonboulle/clockwork Apache 2.0
github.com/josharian/intern MIT
github.com/josharian/native MIT
github.com/json-iterator/go MIT
github.com/klauspost/compress Apache 2.0 BSD MIT
github.com/kr/pretty MIT
github.com/kr/text MIT
github.com/kylelemons/godebug Apache 2.0
github.com/lestrrat-go/backoff/v2 MIT
github.com/lestrrat-go/blackmagic MIT
github.com/lestrrat-go/httpcc MIT
github.com/lestrrat-go/iter MIT
github.com/lestrrat-go/jwx MIT
github.com/lestrrat-go/option MIT
github.com/liggitt/tabwriter BSD
github.com/lucas-clemente/quic-go MIT
github.com/magiconair/properties BSD
github.com/mailru/easyjson MIT
github.com/MakeNowJust/heredoc MIT
github.com/marten-seemann/qpack MIT
github.com/marten-seemann/qtls-go1-16 BSD
github.com/marten-seemann/qtls-go1-17 BSD
github.com/marten-seemann/qtls-go1-18 BSD
github.com/Masterminds/goutils Apache 2.0
github.com/Masterminds/semver/v3 MIT
github.com/Masterminds/sprig/v3 MIT
github.com/mattn/go-colorable MIT
github.com/mattn/go-isatty MIT
github.com/mattn/go-runewidth MIT
github.com/matttproud/golang_protobuf_extensions Apache 2.0
github.com/mdlayher/netlink MIT
github.com/mdlayher/socket MIT
github.com/miekg/dns BSD
github.com/mitchellh/copystructure MIT
github.com/mitchellh/go-homedir MIT
github.com/mitchellh/go-wordwrap MIT
github.com/mitchellh/mapstructure MIT
github.com/mitchellh/reflectwalk MIT
github.com/moby/buildkit Apache 2.0
github.com/moby/spdystream Apache 2.0
github.com/moby/term Apache 2.0
github.com/modern-go/concurrent Apache 2.0
github.com/modern-go/reflect2 Apache 2.0
github.com/monochromegane/go-gitignore MIT
github.com/natefinch/lumberjack MIT
github.com/nxadm/tail MIT
github.com/onsi/ginkgo MIT
github.com/onsi/gomega MIT
github.com/opencontainers/go-digest Apache 2.0
github.com/opencontainers/image-spec Apache 2.0
github.com/openshift/api Apache 2.0
github.com/pelletier/go-toml Apache 2.0 MIT
github.com/peterbourgon/diskv MIT
github.com/pkg/errors BSD
github.com/pmezard/go-difflib BSD
github.com/prometheus/client_golang Apache 2.0
github.com/prometheus/client_model Apache 2.0
github.com/prometheus/common Apache 2.0
github.com/prometheus/procfs Apache 2.0
github.com/prometheus/prom2json Apache 2.0
github.com/prometheus/prometheus Apache 2.0
github.com/prometheus/statsd_exporter Apache 2.0
github.com/PuerkitoBio/purell BSD
github.com/PuerkitoBio/urlesc BSD
github.com/rivo/uniseg MIT
github.com/rogpeppe/go-internal BSD
github.com/russross/blackfriday BSD
github.com/russross/blackfriday/v2 BSD
github.com/ryanuber/go-glob MIT
github.com/shopspring/decimal MIT
github.com/sirupsen/logrus MIT
github.com/spaolacci/murmur3 BSD
github.com/spf13/afero Apache 2.0
github.com/spf13/cast MIT
github.com/spf13/cobra Apache 2.0
github.com/spf13/jwalterweatherman MIT
github.com/spf13/pflag BSD
github.com/spf13/viper MIT
github.com/stoewer/go-strcase MIT
github.com/stretchr/testify MIT
github.com/subosito/gotenv MIT
github.com/vbatts/tar-split BSD
github.com/vishvananda/netlink Apache 2.0
github.com/vishvananda/netns Apache 2.0
github.com/VividCortex/ewma MIT
github.com/xeipuuv/gojsonpointer Apache 2.0
github.com/xeipuuv/gojsonreference Apache 2.0
github.com/xeipuuv/gojsonschema Apache 2.0
github.com/xlab/treeprint MIT
github.com/yl2chen/cidranger MIT
go.opencensus.io Apache 2.0
go.opentelemetry.io/proto/otlp Apache 2.0
go.starlark.net BSD
go.uber.org/atomic MIT
go.uber.org/multierr MIT
go.uber.org/zap MIT
golang.org/x/crypto BSD
golang.org/x/mod BSD
golang.org/x/net BSD
golang.org/x/oauth2 BSD
golang.org/x/sync BSD
golang.org/x/sys BSD
golang.org/x/term BSD
golang.org/x/text BSD
golang.org/x/time BSD
golang.org/x/tools BSD
golang.org/x/xerrors BSD
gomodules.xyz/jsonpatch/v2 Apache 2.0
gomodules.xyz/jsonpatch/v3 Apache 2.0
gomodules.xyz/orderedmap MIT
google.golang.org/api BSD
google.golang.org/appengine Apache 2.0
google.golang.org/genproto Apache 2.0
google.golang.org/grpc Apache 2.0
google.golang.org/protobuf BSD
gopkg.in/inf.v0 BSD
gopkg.in/ini.v1 Apache 2.0
gopkg.in/square/go-jose.v2 Apache 2.0
gopkg.in/tomb.v1 BSD
gopkg.in/yaml.v2 Apache 2.0
gopkg.in/yaml.v3 MIT
helm.sh/helm/v3 Apache 2.0
istio.io/api Apache 2.0
istio.io/client-go Apache 2.0
istio.io/gogo-genproto Apache 2.0
istio.io/pkg Apache 2.0
k8s.io/api Apache 2.0
k8s.io/apiextensions-apiserver Apache 2.0
k8s.io/apimachinery Apache 2.0
k8s.io/cli-runtime Apache 2.0
k8s.io/client-go Apache 2.0
k8s.io/component-base Apache 2.0
k8s.io/klog/v2 Apache 2.0
k8s.io/kube-openapi Apache 2.0
k8s.io/kubectl Apache 2.0
k8s.io/utils Apache 2.0
sigs.k8s.io/controller-runtime Apache 2.0
sigs.k8s.io/gateway-api Apache 2.0
sigs.k8s.io/json Apache 2.0 BSD
sigs.k8s.io/kustomize/api Apache 2.0
sigs.k8s.io/kustomize/kyaml Apache 2.0
sigs.k8s.io/mcs-api Apache 2.0
sigs.k8s.io/structured-merge-diff/v4 Apache 2.0
sigs.k8s.io/yaml BSD MIT