Giter Club home page Giter Club logo

openservicemesh / osm Goto Github PK

View Code? Open in Web Editor NEW
2.6K 59.0 277.0 45.58 MB

Open Service Mesh (OSM) is a lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.

Home Page: https://openservicemesh.io/

License: Apache License 2.0

Go 98.19% Shell 0.90% Makefile 0.41% Dockerfile 0.01% Smarty 0.14% C++ 0.20% Starlark 0.16%
service-mesh kubernetes

osm's Issues

add labels

add size labels we'll use manually for now and perhaps add in a bot at some point in the future.

Introduce Integration / Functional tests

In AGIC we introduced a few levels of tests:

  1. Unit tests
  2. Functional tests
  3. Integration tests (not in the repo yet)

Creating this issues for us to track progress on creating Functional and Integration tests for the SMC.

Note on the AGIC tests: What is now called functional tests, runs a bunch of components together to ensure that they all mesh together as expected. This we run with go test -v $(go list ./functional_tests/... | grep -v /vendor/); echo $?. This is not quite an integration test because it does not use a k8s cluster or an actual App Gway / ARM API.

A good pointer on writing good tests is the following suite in AGIC
Here are examples of starting the Kubernetes informers.

A good starting point for this task would be to perhaps tackle the pkg/smi module, which is very similar to AGIC.

These examples use the Ginkgo test framework.

add docs around how to run TrafficSplit

@asridharan had some great suggestions in this PR comment.

  • Minor NIT, can we capitalize the beginning of each of the sentence.
  • An overview section would be really helpful. Users will have to build a lot of context to actually run the demo at this point, and most would be lost without explicitly talking to us. I believe the objective is to show traffic split? Would be good to state the goals and than get into the instructions.

Move integration tests behind an API in lieu of kubectl from Github

The current Integration Test is invoked with kubectl + creds baked into Github secrets + some bash.
The Go + Bash code needs to be moved behind some sort of a Test infrastructure, so that we don't expose k8s credentials in Github secrets. Github should be making API calls to the test infrastructure to request for a certain commit to be tested. Logs and results will be streamed back.

add contributing doc

outlines lgtm policy, commit messages, and general working agreement between maintainers discussed in person

refactor xDS components to not require kubeconfig

Currently, we're passing the kube config file to generate a kubernetes client within each xDS component that it can communicate with the Kubernetes api server. There are ways of generating a client without passing in a kube config file. We'll need to mount a service account to each xDS pod so that it can authenticate inside the cluster like shown here.

gradual mTLS rollout

When service mesh is rolled out to a brownfield a service may need to be mTLS-optional.
If two existing services A-B are enabled for mTLS, there will be before and after mTLS is enabled. Not all pods will be mTLS ready at the same time. This will result in some old pods connecting to new mTLS pods and most likely 503 errors.
To prevent that we need mTLS-optional for a period of time, where if mTLS does not work we switch to non-mTLS.

What about traffic split, where one group is mTLS the other is not?

how to retrieve certs to onboard VM

The options so far are (and they need to be fleshed out a bit more)

  • web service that we expose
  • smc cli command (see #84)
  • rely on kubectl (link to AzureResource CRD) -- @draychev if you wouldn't mind filling in this workflow
  • integrate with azure Key Vault

TrafficTarget does not work as expected sometimes

Some of us have observed that traffic target does not work as expected.

Here, only "/counter" is allowed based on the TrafficTarget spec but the demo is allowing
"/incrementcounter" as well.

---[ 29 ]-----------------------------------------
Fetching http://bookstore.mesh/counter
Identity: bookstore-1--25412f8
Counter: 12
Server: envoy
Date: Tue, 03 Mar 2020 17:53:24 GMT
Status: 200 OK

Fetching http://bookstore.mesh/incrementcounter
Identity: bookstore-1--25412f8
Counter: 13
Server: envoy
Date: Tue, 03 Mar 2020 17:53:24 GMT
Status: 200 OK


kind: TrafficTarget
apiVersion: access.smi-spec.io/v1alpha1
metadata:
name: bookstore-service
namespace: "$K8S_NAMESPACE"
destination:

(todo): use service account

kind: ServiceAccount
name: bookstore-1-serviceaccount
namespace: "$K8S_NAMESPACE"
specs:

  • kind: HTTPRouteGroup
    name: bookstore-service-routes
    matches:
    • counter
      sources:

(todo): use service account

  • kind: ServiceAccount
    name: bookbuyer-serviceaccount
    namespace: "$K8S_NAMESPACE"

program envoys to generate metrics

stream metrics configuration messages to envoy proxies. need to still flesh out this story. making sure not to DDoS / throttle / buffer.

add branch protection policy

require at least 1 review/lgtm
larger PRs must have two reviews but that is at the discretion of the author of the PR for now.

rename repo

open service mesh is the only suggestion as of now. Does anyone else have any suggestions?

Document workflow using osm and helm/kubectl

Demo outline

  • install control plane on k8s via osm install
  • install demo application v1 using kubectl apply -f
  • Follow SMI workflow for TrafficSplit using demo outlined here

Document steps in cmd/smc/README.md for now

bad certificate error from demo

After running ./demo/run-demo.sh, this is what I'm getting:

$ k logs bookstore-7c7c8f78c4-mh7r7 -n smc envoyproxy
[2020-02-27 22:37:08.327][1][debug][http] [source/common/http/async_client_impl.cc:96] async http request response headers (end_stream=true):
':status', '200'
'content-type', 'application/grpc'
'grpc-status', '14'
'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection termination'

[2020-02-27 22:37:08.327][1][warning][config] [bazel-out/k8-opt/bin/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:92] StreamAggregatedResources gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection termination
[2020-02-27 22:37:08.327][1][debug][config] [source/common/config/grpc_subscription_impl.cc:85] gRPC update for type.googleapis.com/envoy.api.v2.Listener failed
[2020-02-27 22:37:08.327][1][debug][config] [source/common/config/grpc_subscription_impl.cc:85] gRPC update for type.googleapis.com/envoy.api.v2.Cluster failed
[2020-02-27 22:37:08.327][1][debug][pool] [source/common/http/conn_pool_base.cc:265] [C12] client disconnected, failure reason: TLS error: 268436498:SSL routines:OPENSSL_internal:SSLV3_ALERT_BAD_CERTIFICATE

From the bookbuyer:

---[ 159 ]-----------------------------------------
Fetching http://bookstore.mesh/counter
Error fetching http://bookstore.mesh/counter: Get http://bookstore.mesh/counter: dial tcp 127.0.0.1:80: connect: connection refused

Fetching http://bookstore.mesh/incrementcounter
Error fetching http://bookstore.mesh/incrementcounter: Get http://bookstore.mesh/incrementcounter: dial tcp 127.0.0.1:80: connect: connection refused

Introduce message broker to broadcast announcements from informers to proxies

Currently a single 'announcement' channel is used across the code to announce topology changes to envoy proxies. Since a Go channel is between 2 endpoints only, it is not possible to announce changes from informers to multiple proxies as is.
Introduce a message broker to distribute announcements from informers to subscribed proxies.

fix CI

update azure pipelines file with the test scripts

ingress story

How to integrate service mesh with external traffic if everything is mTLS enabled

bug with issuing root cert

something is wrong when we issue root cert with CA

to debug:
generate with openssl and our tool and compare

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.