Giter Club home page Giter Club logo

old_auth_repo'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.

old_auth_repo's People

Contributors

ajessup avatar alexeykazakov avatar chxchx avatar costinm avatar crazytan avatar devopsbrett avatar geeknoid avatar ldemailly avatar lookuptable avatar mangchiandjjoe avatar myidpt avatar rvkubiak avatar sakshigoel12 avatar sarvaniv avatar sebastienvas avatar smawson avatar vbatts avatar wattli avatar wenchenglu avatar wlu2016 avatar yutongz 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

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

old_auth_repo's Issues

Figure out the proper destination address to use

Currently the listeners are based on destination address (IP + port). Both IP and port may change by k8s. Which means we need to figure out the proper destination to use.

According to @kyessenov, we have all necessary IP (service IP, pod IP) and port (target port and pod port) info. So we can list all possible combinations in the listeners. In that case, it should work.

But in the long run, we may add some change at envoy side to let listener take a list of address instead of just one.

Re-structure directories in this repo

Previously this repo only generate one executable istio-ca and the directory structure is relatively simple and flat. However, with the addition of node-agent, we should re-factor this repo to make code better organized.

There are currently two proposals

  1. Follow the one used in kubernetes project, where binaries are placed into a top-level cmd/ directory. See here. The main files/methods in the cmd/ dir mainly deal with CLI parsing while the actually logic is implemented in related packages under pkg/. The overall structures would look like
istio.io/auth/
  cmd/
    istio_ca/
    node_agent/
    ....
  pkg/
    controller/
    .....

  1. Use the one suggested by cobra. For example the directory structure would have:
istio.io/auth/
  istio_ca
    cmd/
    ... any other dirs...
    BUILD
    main.go
  node_agent/
    ...

cc @sarvaniv @myidpt @wattli

Move presubmit to Jenkins

Manager, proxy and other repos even the postsubmit of auth use Jenkins, it would be nice if we can move presubmit of auth into Jenkins. It makes sharing scripts and tools more easily.

Certificate Issuance

Istio auth needs a component for certificate issuance. Basic functionalities should include:

  • If a signing key & certificate are provided (via command line), use them as CA root key and cert. Otherwise, generate a key & certificate automatically
  • Has an interface to create key & certificate when provided with a Kubernetes service account (name + namespace)

Change go prefix to istio.io/auth

Currently we're using "github.com/istio/auth" as the go prefix. However we should switch to "istio.io/auth" to stay consistent other repos under Istio organization.

Create e2e for istio-ca

We should add basic e2e tests for istio-ca. The tests should cover

  • When deployed to a Kubernetes cluster, secrets are correctly created for existing service account
  • Creating a new service account leads to the creation of corresponding secret
  • Cert in created secret can be successfully verified
  • Istio-ca re-creates secret when one is deleted.

Run GoMetaLinter on Travis

Currently we only use go fmt to check basic source code formatting. We should switch to GoMetaLinter to have more comprehensive checks.

Secure naming service

Istio auth uses Kubernetes service account as Istio identity. To enable this, we need a secure naming service that maps a Kubernetes service into a set of service accounts whose pods are part of the service. This could be done by watching the kube-apiserver for creation/update/deletion of both pods and services.

Create Istio cert and key for Kubernetes' service account

Per the design of Istio auth, we should monitor the creation of Kubernetes service account and automatically create a key and certificate pair by calling into the certificate issuance API ( #1 ). The key and certificate are used to establish secure connection/channel between two Istio proxies.

Improve Envoy listener to take a list of address

Currently an Envoy listener is bound to an address (ip:port pair). Due to k8s address translation, we may need to have multiple addresses bound to the same listener.

Not a blocking issue since we can just duplicate the listener content for now. Will consult with Matt soon.

Istio v0.2 Auth: CA support

Integrate with existing CA in K8s, and provide gRPC interface to take CSR. Maintain a config file for istio identity assignment.

Sub tasks:

  • Allow Istio CA to run as a GRPC server (#213, #216)
  • Handle client authentication (e.g. GCP ID token, certificate)

Add `KeySize` option in CertOptions

Currently we are hard-coding rsaBits to 2048 in generate_cert.go. Instead we should make the key size configurable in CertOptions such that we can use a large key for CA cert and a smaller key for leaf cert.

Investigate on the deployment flow

There are basically 3 scenarios in the deployment of Istio Auth:

  1. There are no apps/proxies, we want to deploy apps and proxies (with Auth enabled).

  2. Apps running without proxies, we want to deploy proxies (with Auth enabled)

  3. Apps running with proxies (but without Auth enabled), we want to deploy proxies (with Auth enabled)

Need to investiagation the deployment flow of each of the scenario.

mTLS between ingress-proxy and product-page not working?

Setup: browser->ingress-envoy->productpage->[details|review(s)]->rating

  1. productpage -> details mTLS is working fine. Verified using: https://istio.io/docs/tasks/ingress.html
  2. TLS between browser->ingress proxy working.
  3. mTLS between ingress proxy -> productpage is NOT working.
    Version: 0.1.5
    I have configured all the pod's with the same service accounts. If the service account of ingress-proxy and the productpage is not same then ingress proxy does NOT try to setup a mTLS session at all.
    But even with the service account being same (which is what the logs here have) the ssl session does NOT establish between ingress and productpage.

clusters-ingress-envoy.txt
ingress-envoy-json.txt

istio-auth-yaml.txt
istio-bookinfo-yaml.txt

Investigate how Envoy handles the rotation of SSL keys and certs

When we rotate key/cert, we have 2 options 1) keep the same name 2) use a different name.

The first option is simpler since we don't need to update envoy config in this case. But it may have problems:

If envoy directly reads cert/key from file every time when they need them, then we are fine. However, if they keep the cert/key in memory or use some cache, the new key/cert with the same file name will not be able to populate. In that case, we need to go with the second option.

I am investigating on this.

Differentiate "allow-all" and "allow-none" in ssl_context:verify_subject_alt_name

"allow-all": No secure naming is checked.
"all-none": Secure naming is checked against an empty list of service accounts. So it always fails.

We need to verify whether Envoy supports the two cases through config. Ideally, an undefined verify_subject_alt_name field should mean "allow-all" and a defined but empty verify_subject_alt_name field should mean "allow-none".

Use bazel as the build system

We should use bazel instead of glide as the build/dependency-management system as it provides a rich set of functionalities.

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.