Git Product home page Git Product logo

istio.io's Introduction

Istio

CII Best Practices Go Report Card GoDoc

Istio logo

Istio is an open source service mesh that layers transparently onto existing distributed applications. Istio’s powerful features provide a uniform and more efficient way to secure, connect, and monitor services. Istio is the path to load balancing, service-to-service authentication, and monitoring – with few or no service code changes.

  • For in-depth information about how to use Istio, visit istio.io
  • To ask questions and get assistance from our community, visit Github Discussions
  • To learn how to participate in our overall community, visit our community page

In this README:

In addition, here are some other documents you may wish to read:

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.

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.

  • Istiod - The Istio control plane. It provides service discovery, configuration and certificate management. It consists of the following sub-components:

    • Pilot - Responsible for configuring the proxies at runtime.

    • Citadel - Responsible for certificate issuance and rotation.

    • Galley - Responsible for validating, ingesting, aggregating, transforming and distributing config within Istio.

  • Operator - The component provides user friendly options to operate the Istio service mesh.

Repositories

The Istio project is divided across a few GitHub repositories:

  • istio/api. This repository defines component-level APIs and common configuration formats for the Istio platform.

  • istio/community. This repository contains information on the Istio community, including the various documents that govern the Istio open source project.

  • istio/istio. This is the main code repository. It hosts Istio's core components, install artifacts, and sample programs. It includes:

    • istioctl. This directory contains code for the istioctl command line utility.

    • operator. This directory contains code for the Istio Operator.

    • 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.

    • security. This directory contains security related code, including Citadel (acting as Certificate Authority), citadel agent, etc.

  • istio/proxy. The Istio proxy contains extensions to the Envoy proxy (in the form of Envoy filters) that support authentication, authorization, and telemetry collection.

  • istio/ztunnel. The repository contains the Rust implementation of the ztunnel component of Ambient mesh.

Issue management

We use GitHub 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. Each issue has a priority which is represented by the column in the Prioritization project. 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.


Cloud Native Computing Foundation logo

Istio is a Cloud Native Computing Foundation project.

istio.io's People

Contributors

3ks avatar arhell avatar ayj avatar bianpengyuan avatar douglas-reid avatar frankbu avatar geeknoid avatar gyliu513 avatar howardjohn avatar imgbot[bot] avatar istio-testing avatar jacob-delgado avatar kfaseela avatar kyessenov avatar ldemailly avatar lei-tang avatar linsun avatar loverto avatar my-git9 avatar orangegzx avatar rootsongjc avatar rshriram avatar sataqiu avatar vadimeisenbergibm avatar wattli avatar wilsonwu avatar windsonsea avatar yangminzhu avatar yanrongshi avatar youhonglian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

istio.io's Issues

BookInfo sample docs need update RE: GATEWAY_URL

Our instructions ask users to issue the following two commands to set GATEWAY_URL:

$ kubectl get ingress -o wide
NAME      HOSTS     ADDRESS                 PORTS     AGE
gateway   *         130.211.10.121          80        1d
$ export GATEWAY_URL=130.211.10.121:80

However, when running on GKE, I see something like:

$ kubectl get ingress -o wide
NAME      HOSTS     ADDRESS                                                                       PORTS     AGE
gateway   *         104.198.111.254,35.185.199.167,35.185.202.147,35.185.204.199,35.185.219.195   80        17m

Setting the GATEWAY_URL to any of the addresses listed (with port 80) fails, as follows:

$ curl -o /dev/null -s -w "%{http_code}\n" http://$GATEWAY_URL/productpage
000

If I do the following, however, it works:

$ kubectl get svc istio-ingress -o wide
NAME            CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE       SELECTOR
istio-ingress   10.75.243.197   35.185.192.82   80:30872/TCP   37m       istio=ingress
$ export GATEWAY_URL=35.185.192.82:80
$ curl -o /dev/null -s -w "%{http_code}\n" http://$GATEWAY_URL/productpage
200

bookinfo.md contains unclear instructions on setting up Grafana

The current instructions are too difficult. They expect the user to know the grafana-svc-external-IP. They expect the user to understand how to change the Service from type LoadBalancer to type NodePort and under what circumstances that is needed. They expect the user to know how to run kubectl proxy and how to edit Grafana's Istio-dashboard.

Issue with _docs/samples/bookinfo.md

jsonpath fails when i run this -
export GATEWAY_URL=$(kubectl get po -l istio=ingress -o jsonpath={.items[0].status.hostIP}):$(kubectl get svc istio-ingress -o jsonpath={.spec.ports[0].nodePort})

is this istio=ingress correct?

Footer doesn't look right on small displays

When the screen is narrow, the footer collapses into a stack of section titles. There's no visual indication that these are now drop down menus and the mouse pointer is an i-beam when hovering over these instead of a pointer.

Quickstart Guide

CUJ breakdown: installation; enabling &auth; routing & policy changes

Few aesthetic things about the web site

  • We should support specifying whether a section entry should default to expanded or collapsed in the left nav.

  • The color scheme for the tooltip for the Edit this Page button doesn't match the rest of the site very well.

  • The magnifying glass next to the search box probably should highlight orange upon hovering. It could probably also use a tooltip.

  • The Copy button on PRE sections is rendered inconsistenty. For example, on this page https://istio.io/docs/tasks/integrating-services-into-istio.html it is not as tall as on other pages.

  • We should consider adopting the left-nav tab design from amalgam8.io. The left nav can be displayed or hidden, making more room available for the document content.

  • We should consider implementing the TOC as a pull down menu at the top of the page. This would look visually cleaner overall.

Update docs to support 3 separate user journeys

There are too many if-else in the documents, which require too much thinking from first- time users.

Restructure into 3 user journeys and create 3 workflows:

  • want to try istio (no auth or complicated things), with the book info to show features
  • want to understand how it works and try some advanced features but I am not committed - with a simpler echo server with which people are familiar
  • production level workflow with advanced features

This requires re-introducing something similar to the echo app for the second workflow.

Improve layout of landing page

The layout of the landing page is way too tall. It takes a fair bit of scrolling to see all the major features of the product. Someone in a hurry wouldn't even notice it doesn't more than L7 load balancing. We need to reorganize the landing page to bring key info above the fold.

BookInfo Sample docs need update re: ISTIO_MANAGER_ADDRESS

Running through a fresh install, attempting to recreate the sample app. Get the following:

$ kubectl apply -f <(istioctl kube-inject -f bookinfo.yaml)
Error: manager address environment variable is not set, please set ISTIO_MANAGER_ADDRESS to the location and port of you Istio manager
error: no objects passed to apply
  1. We need to add the setting of environment variables to the Task
  2. The error message should read "port of your Istio manager" (instead of "port of you Istio manager").

Add a copy button to <code> sections

Many of our docs' <code> sections are commands we expect the user to copy from the page and paste into their terminal. It'd be nice if we had a small "copy code section to clipboard" button on all of our <code> sections. Similar to GitHub's "Clone or download" dialogue:

image

Finish setting up Istio's custom search engine

There are three outstanding tasks around Istio's use of Google's Custom Search Engine:

  • We need to register our search engine as being for a non-profit. This will let us remove ads from the returned search results.

  • We need to enable search engine analytics so we can understand what people are looking for on the Istio site.

  • We need to configure the search engine with various options such as auto-complete text, which improves the end-user's experience.

I've added you (Varun) as an admin of the search engine. Visit google.com/cse for the control panel.

Make the web site look good on mobile devices

We need the site to be usable on mobile devices. Shrinking down the browser width doesn't currently produce good outcomes. We need to choose whether we want to target iPads, iPad-mini, and/or phones. Basically we need to revisit where breakpoints in CSS are and whether responsive design pieces in Bootstrap were left out.

Sound bytes on the frontpage

The current frontpage in istio.io has 4 placeholder titles/descriptions for routing, resilience, policies and monitoring. These need to be filled in properly, with pointers to appropriate docs.

Edits for the new color scheme

Refer to the staged site (http://istio-staging.surge.sh/):

  1. When you scroll the home page, the old banner image becomes visible

screen shot 2017-04-19 at 1 53 19 pm

  1. The downward pointing arrow should be blue to match the overall color scheme

screen shot 2017-04-19 at 1 53 36 pm

  1. When you hover over the button, it switches to teal (should we change it to a different shade of blue?)

screen shot 2017-04-19 at 1 53 51 pm

Merge istioctl and mixer-cli doc generation scripts

Merge scripts for auto-generating command line markdown. This will also consolidate the istioctl docs into a single markdown file.

$ ls -1 ./scripts/auto-generate-*
./scripts/auto-generate-istioctl.sh
./scripts/auto-generate-mixer-cli.sh

retry-injection task

I have created documentation for a retry task. It is very similar to the fault injection task in structure. However, to get it to demonstrate a successful recovery using retry I had to create a custom image.

The reason I created a custom image was to have a repeatable sequence of HTTP failures followed by success so that I could show HTTP retries leading to success. With my custom server I can demonstrate the same URL returning 500, then another 500, then a 200, like this:

docker run -d -p 127.0.0.1:8080:8080 toxique
$ curl -i localhost:8080/hostname?codes=500,500,200
HTTP/1.1 500 Internal Server Error
92a8f2ebe4e7
$ curl -i localhost:8080/hostname?codes=500,500,200
HTTP/1.1 500 Internal Server Error
92a8f2ebe4e7
$ curl -i localhost:8080/hostname?codes=500,500,200
HTTP/1.1 200 OK
92a8f2ebe4e7

I am not sure if the Istio project wants this code (it's 100 lines of Go) and what I need to do to contribute it. Without a server that can return failure then success on the same URL I can still document the steps to adding HTTP retries with Istio but I can't demonstrate to the user that Istio is correctly performing the retries.

Change highlighting of selected page in left-hand nav

We'd like to change a couple in the lefthand nav bar:

  • Instead of the > to indicate the selected page, we'd like to use something more like http://linkerd.io, which is a subtle highlight bar through the whole name.

  • The title of a section (Home, Concepts, Tasks, Tutorials, Reference) is not currently selectable. We'd like to make these titles selectable and have them bring you to the entry page to the section, just like if you clicked on the link of the same name in the top nav bar.

  • We'd like the title of a section to be highlighted when the entry page of the section is displayed.

Use inline scripts to fetch external IPs in tasks

See the screenshot below:

  • if I'm using NodePort, it provides me a handy script
  • if I'm using external IP, it tells me to copy paste.

Why is there such a difference? I believe the latter can be achieved with a handy inline script too.

image

BookInfo: command not working on ZSH

https://istio.io/docs/samples/bookinfo.html

export GATEWAY_URL=$(kubectl get po -l istio=ingress -o jsonpath={.items[0].status.hostIP}):$(kubectl get svc istio-ingress -o jsonpath={.spec.ports[0].nodePort})

this commands work on Bash but errors out on ZSH:

zsh: no matches found: jsonpath={.items[0].status.hostIP}
zsh: no matches found: jsonpath={.spec.ports[0].nodePort}

Webpage load issue (chrome reports unsafe scripts)

Mixed Content: The page at 'https://istio.io/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://istio.io/js/jquery.collapsible.js?_=1491483091322'. This request has been blocked; the content must be served over HTTPS.

Trademarks

Trademarks (kubernetes, mess) should be consistently capitalized. Cloud Foundry is, I believe, two words. I saw inconsistency in docs/concepts/model.md.

Task: "Enabling Ingress Traffic", secure ingress times out

https://istio.io/docs/tasks/ingress.html#configuring-secure-ingress-https

Steps followed:

  • installed httpbin sample, it worked
  • applied Configuring ingress (HTTP), worked
  • applied Configuring secure ingress

Now curl http://$INGRESS_URL/headers works but curl -k https://$INGRESS_URL/html is giving timeout on curl:

$ kubectl describe ingress

Name:			istio-ingress
Namespace:		default
Address:		35.185.252.35
Default backend:	default-http-backend:80 (10.4.3.2:8080)
Rules:
  Host	Path	Backends
  ----	----	--------
  *
    	/headers 	httpbin:8000 (<none>)
    	/delay/.* 	httpbin:8000 (<none>)
Annotations:
Events:	<none>

----------------------------------------------------
Name:			secured-ingress
Namespace:		default
Address:		35.185.252.35
Default backend:	default-http-backend:80 (10.4.3.2:8080)
TLS:
  ingress-secret terminates
Rules:
  Host	Path	Backends
  ----	----	--------
  *
    	/html 	httpbin:8000 (<none>)
Annotations:
Events:	<none>

Installing Istio: 'Verifying the installation' missing service

image

My output has istio-egress. It's missing from the docs output.

➜  kubernetes git:(master) kg svc
NAME            CLUSTER-IP     EXTERNAL-IP      PORT(S)                       AGE
istio-egress    10.3.245.113   <none>           80/TCP                        6m
istio-ingress   10.3.241.55    104.199.102.48   80:30945/TCP                  6m
istio-manager   10.3.243.12    <none>           8080/TCP,8081/TCP             6m
istio-mixer     10.3.252.130   <none>           9091/TCP,9094/TCP,42422/TCP   6m

bookinfo install instruction should use -o wide

See istio/old_pilot_repo#635

# per doc:
ldemailly-macbookpro:bookinfo ldemailly$  kubectl get ingress 
NAME      HOSTS     ADDRESS            PORTS     AGE
gateway   *         104.196.224.1...   80        41m
# should be:
ldemailly-macbookpro:bookinfo ldemailly$  kubectl get ingress -o wide
NAME      HOSTS     ADDRESS                                         PORTS     AGE
gateway   *         104.196.224.151,35.185.193.212,35.185.196.158   80        41m

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.