Closes #403. When the Destination service does not return a result for a service, the proxy connection for that service will hang indefinitely waiting for a result from Destination. If, for example, the requested name doesn't exist, this means that the proxy will wait forever, rather than responding with an error. I've added a timeout wrapping the service returned from `<Outbound as Recognize>::bind_service`. The timeout can be configured by setting the `CONDUIT_PROXY_BIND_TIMEOUT` environment variable, and defaults to 10 seconds (because that's the default value for [a similar configuration in Linkerd](https://linkerd.io/config/1.3.5/linkerd/index.html#router-parameters)). Testing with @klingerf's reproduction from #403: ``` curl -sIH 'Host: httpbin.org' $(minikube service proxy-http --url)/get | head -n1 HTTP/1.1 500 Internal Server Error ``` proxy logs: ```rust proxy-5698f79b66-8rczl conduit-proxy INFO conduit_proxy using controller at HostAndPort { host: Domain("proxy-api.conduit.svc.cluster.local"), port: 8086 } proxy-5698f79b66-8rczl conduit-proxy INFO conduit_proxy routing on V4(127.0.0.1:4140) proxy-5698f79b66-8rczl conduit-proxy INFO conduit_proxy proxying on V4(0.0.0.0:4143) to None proxy-5698f79b66-8rczl conduit-proxy INFO conduit_proxy::transport::connect "controller-client", DNS resolved proxy-api.conduit.svc.cluster.local to 10.0.0.240 proxy-5698f79b66-8rczl conduit-proxy ERR! conduit_proxy::map_err turning service error into 500: Inner(Timeout(Duration { secs: 10, nanos: 0 })) ``` |
||
---|---|---|
.github | ||
bin | ||
cli | ||
controller | ||
pkg | ||
proto | ||
proxy | ||
proxy-init | ||
web | ||
.dockerignore | ||
.editorconfig | ||
.gcp.json.enc | ||
.gitattributes | ||
.gitignore | ||
.prometheus.dev.yml | ||
.travis.yml | ||
BUILD.md | ||
CHANGES.md | ||
CONTRIBUTING.md | ||
Cargo.lock | ||
Cargo.toml | ||
DCO | ||
Dockerfile-base | ||
Dockerfile-go-deps | ||
Gopkg.lock | ||
Gopkg.toml | ||
LICENSE | ||
README.md | ||
docker-compose.yml |
README.md
🎈 Welcome to Conduit! 👋
Conduit is an ultralight service mesh for Kubernetes. It features a minimalist control plane written in Go, and a native proxy data plane written in Rust that boasts the performance of C without the heartbleed.
Conduit is alpha. It is capable of proxying all TCP traffic, and reporting
top-line metrics (success rates, latencies, etc) for all HTTP, HTTP/2, and gRPC traffic.
It currently does not work with websockets or with HTTP tunneling--see the
--skip-outbound-ports
flag for how to exclude these types of traffic.
Get involved
- conduit-users mailing list: Conduit user discussion mailing list.
- conduit-dev mailing list: Conduit development discussion mailing list.
- conduit-announce mailing list: Conduit announcements only (low volume).
- Follow @RunConduit on Twitter.
- Join the #conduit channel on the Linkerd Slack.
Documentation
View Conduit docs for more a more comprehensive guide to getting started, or view the full Conduit roadmap.
Getting started with Conduit
-
Install the Conduit CLI with
curl https://run.conduit.io/install | sh
. -
Add
$HOME/.conduit/bin
to yourPATH
. -
Install Conduit into your Kubernetes cluster with:
conduit install | kubectl apply -f -
. -
Verify that the installation succeeded with
conduit check
. -
Explore the Conduit controller with
conduit dashboard
. -
Optionally, install a demo application to run with Conduit.
-
Add your own service to the Conduit mesh!
Working in this repo
BUILD.md
includes general information on how to work in this repo.
Code of conduct
This project is for everyone. We ask that our users and contributors take a few minutes to review our code of conduct.
License
Conduit is copyright 2018 Buoyant, Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use these files except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.