Commit Graph

123 Commits

Author SHA1 Message Date
Risha Mars 80ecdc13c2
Copy over /pkg to container (#110)
Signed-off-by: Risha Mars <mars@buoyant.io>
2018-01-05 10:12:29 -08:00
Eliza Weisman 67d4b56253
Remove `AsciiExt` import (#104)
Since the methods on this trait were moved to direct implementations on the
implementing types, this produces an unused import warning with the latest
(1.23) Rust standard library. As we set `deny(warnings)`, this breaks the build.

Signed-off-by: Eliza Weisman <eliza@buoyant.io>
2018-01-04 10:49:13 -08:00
Phil Calçado 709de5a7b0
Moves k8s and conduit client code to /pkg (#103)
* Rename constructor functions from MakeXyz to NewXyz

As it is more commonly used in the codebase

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make Conduit client depend on KubernetesAPI

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Move Conduit client and k8s logic to standard go package dir for internal libs

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Move dependencies to /pkg

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make conduit client more testable

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Remove unused config object

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Add more test cases for marhsalling

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Move client back to controller

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Sort imports

Signed-off-by: Phil Calcado <phil@buoyant.io>
2018-01-04 10:10:10 -08:00
Risha Mars fa49de6ff4
Make TabbedMetricsTable in charge of fetching timeseries (#89)
* Make TabbedMetricsTable in charge of fetching timeseries

All of the parent components in charge of fetching timeseries data
don't actually use them, but pass them to this table. It would simplify
a lot of the parents if this component handled the ts fetching too.

This introduces a urlsForResource helper in ApiHelpers to allow
us to consolidate url generating in the app to one place. It also
associates the appropriate groupBy for various fetches.

Signed-off-by: Risha Mars <mars@buoyant.io>
2018-01-03 16:55:56 -08:00
Franziska von der Goltz a7306113d2
increase test coverage for ServiceMesh component (#85)
* increased test coverage for ServiceMesh component

Signed-off-by: Franziska von der Goltz <franziska@vdgoltz.eu>
2018-01-03 09:50:29 -08:00
Andrew Seigner 449f306aeb
Implement client-side version checking (#79)
Previously Conduit would render an iframe, received from
versioncheck.conduit.io.

Modify the client to retrieve the latest released version, via CORS.

Signed-off-by: Andrew Seigner <andrew@sig.gy>
2018-01-02 16:07:50 -08:00
Christopher Schmidt ce69c2e534 returns rs name in case of there's no deployment runconduit/conduit#80 (#81)
Signed-off-by: Christopher Schmidt <fakod666@googlemail.com>
2018-01-02 11:24:09 -08:00
Brian Smith 02176d8d16
Remove default controller URL from proxy. (#48)
Previously there was a default controller URL in the proxy. This
default was never used for any proxy injected by `conduit inject` and
it was the wrong default when using the proxy outside of Kubernetes.
Also more generally this is such an important setting in terms of
correctness and security that it was dangerous to let it be implied in
any context.

Remove the default, requiring that it be set in order for the proxy to
start.
2018-01-02 08:44:27 -10:00
Sky Ao 238c54414b correct typo: Enviroment -> Environment (#100)
Signed-off-by: Sky Ao <aoxiaojian@gmail.com>
2017-12-29 10:14:48 -08:00
Andrew Seigner 7edea726e6
Add shell completion command to cli (#97)
Cobra supports bash and zsh completion code generation, but our cli
project was not leveraging it.

Add a 'completion' command to the conduit cli, which outputs bash and
zsh completion code.

Signed-off-by: Andrew Seigner <andrew@sig.gy>
2017-12-28 14:24:06 -08:00
Phil Calçado c76b705fce
first iteration of status subcommand: check Kubectl #92 (#96)
* Add framework for healthcheck in CLI

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Add self-checked for kubectl

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Clear formatting code

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Removed ununsed objects from status

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Removed ununsed parameter

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Ignore errored self checkers

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make the check error by default

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Log error, format changes

Signed-off-by: Phil Calcado <phil@buoyant.io>
2017-12-28 14:03:18 -05:00
Andrew Seigner 9ce12ee15c
Add local development section to README.md (#93)
README.md currently documents how to get started with a released version
of Conduit, but not how to build and deploy from source.

This change adds a section to enable building and deploying from source,
it assumes working Go and Minikube environments.

Signed-off-by: Andrew Seigner <andrew@sig.gy>
2017-12-27 11:42:46 -08:00
Phil Calçado c0ccdfabfc
Skip tests known to be flaky when they fail (#95)
We need to address the flaky checks, but for now it is better to have these skipped than a build with false negatives.

Signed-off-by: Phil Calcado <phil@buoyant.io>
2017-12-27 14:42:36 -05:00
Andrew Seigner 365d0eec36
Add instructions for running Web against K8s (#94)
The README.md in the Web project describes building and running the Web
service locally, against a public API server in Docker.

Add instructions for running the Web Service locally against a public
API Server in Kubernetes.

Signed-off-by: Andrew Seigner <andrew@sig.gy>
2017-12-27 11:42:23 -08:00
Phil Calçado 31e9846f62
Make several CLI commands testable (#86)
* Add func to rsolve kubectl-like names to canonical names

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Refactor API instantiation

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make version command testable

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make get command testable

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Add tests for api utils

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make stat command testable

Signed-off-by: Phil Calcado <phil@buoyant.io>

* Make tap command testablë

Signed-off-by: Phil Calcado <phil@buoyant.io>
2017-12-27 14:10:41 -05:00
Kevin Lingerfelt 41e6edfbfb
Add contributing doc and DCO file (#88)
* Add contributing doc and DCO file

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>

* Fix small typos

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2017-12-22 14:54:27 -08:00
Risha Mars 4389a1e312
Bind this.handleApiError in PodDetail (#84) 2017-12-22 13:54:34 -08:00
Christopher Schmidt bcf61e1bfb adding RBAC stuff for Prometheus (#83)
* adding RBAC stuff for Prometheus, fixes runconduit/conduit#82
Signed-off-by: Christopher Schmidt fakod666@gmail.com

* fixed ident
Signed-off-by: Christopher Schmidt fakod666@gmail.com
2017-12-22 13:45:56 -08:00
Risha Mars 8cf1bdbee3
Consolidate api calling from the UI; Start surfacing API errors (#65)
* Adds an ApiHelpers module that wraps our api calls to the server

* Adds ability to display error messages from the server
2017-12-21 15:18:35 -08:00
Phil Calçado 78d7b22e1c
Add more information to async test failures (#73) 2017-12-22 10:01:34 +11:00
Sean McArthur 8e2dd66bfa
disable push promises in proxy (#70) 2017-12-21 14:41:17 -08:00
Franziska von der Goltz 405db65a18
refactored incomplete-mesh messaging to be stored in CopyUtils.jsx (#78) 2017-12-21 10:51:54 -08:00
Brian Smith 2729fa02bc
Stop using "default" as default service namespace (#61)
Previously the destinations service would look for services in the
"default" namespace if the service name didn't have at least two
labels. However, the "default" namespace is almost always the wrong
namespace. The only reasonable default namespace is the namespace of
the client service, which isn't given to the destinations service.
Therefore it shouldn't try to default the namespace.

Accordingly, stop defaulting the namespace to "default".

Validated by manually testing the emojivoto service before and after
the proxy implemented namespace defaulting itself.
2017-12-20 10:44:24 -10:00
Kevin Lingerfelt a8e75115ab
Prepare the repo for the v0.1.1 release (#75)
* Prepare the repo for the v0.1.1 release

* Add changelog

* Changelog updates, wrap at 100 characters
2017-12-20 10:51:53 -08:00
Risha Mars 13a62cb21b
Add message to indicate /routes is not implemented (#77)
If someone clicks on Routes in the sidebar, the page appears to fail to load, 
but this endpoint is unimplemented. Add a message to indicate that.
2017-12-20 10:25:10 -08:00
Kevin Lingerfelt 9fca7e8b36
Modify inject to stop passing malformed arguments (#74) 2017-12-19 22:03:56 -08:00
Dennis Adjei-Baah 63e2fbb97b Refactor each CLI command to silently exit on uncaught errors (#54)
* add silent exits on all conduit commands

* Revert "add silent exits on all conduit commands"

This reverts commit 07488ca

* adds back a change that was accidentally removed on revert

* Stop printing errors to stderr
2017-12-19 17:24:38 -08:00
Risha Mars 46ee763e8e
Have better empty states in Deployment Detail and Pod Detail (#71)
* Have better empty states in Deployment Detail and Pod Detail

* Fix call to action on deployment detail page

Adds various checks to hide sections of pages that don't have data:

* Removes the timeseries graphs and latency overview from Deployment/Pod 
detail if there are no metrics for it

* Removes the Upstreams/Downstreams if num upstreams / downstreams is 0

* Removes the pod barcharts from the Deployment detail if there are no pods

* If there are no pod metrics, populate the list of pods from /pods
These changes strip the pod detail view down a lot if there's no pod data, but that might be fine
2017-12-19 17:02:03 -08:00
Phil Calçado 0a6a9edaee
Respect $KUBECONFIG env var (#68)
* Move kubectl logis to k8s package

* Made kubectl return *url.URL, just like API

* Make k8s API code respect /Users/pcalcado/.kube/config (closes #17)

* Fix style mistakes and typos
2017-12-20 11:50:25 +11:00
Kevin Lingerfelt 42e9a94e45
Make tap output line-oriented (#66)
* Make tap output line-oriented

* Use grpc response code constants, add tests
2017-12-19 15:58:46 -08:00
Dennis Adjei-Baah 42d942c0bf
Add links to each deployment name in the Conduit dashboard (#44)
* add links for each deployment name and add a message for unadded deployments
2017-12-19 15:40:24 -08:00
Franziska von der Goltz 3591936de3
fix inconsistent deployment count on servicemesh page (#69)
* fix inconsistent deployment count on servicemesh page.
* tests added for deploy count messaging on servicemesh page
* refactored code for Call To Action component to use 'instructions' in util
* refactored correlating css
2017-12-19 14:53:47 -08:00
Phil Calçado 683b5c0dd6 Fix unit test runner and failing tests (#67)
* Remove integration test clause from travis file

* Use correct channel for asyn process error reporting

* Fix test for sorting stat keys

* Make integration tests only run if CONDUIT_INTEGRATION_TESTS_ENABLED is set

* Fix timeouts in tests

* Fix handler test check for version

* Removes smoke test that required kubectl as not present on travis

* Replace tail with sleep to avoid leaking subprocesses during tests

* Fix typo & extract constant
2017-12-19 14:21:56 -08:00
Brian Smith 208723b44d
conduit inject: Enable auto name completion in proxy (#60)
Previously `conduit inject` did not enable automatic name completion in
the proxy. As a result services couldn't connect to services outside
the "default" namespace without qualifying the service name with (at
least) the namespace. This is arguably safer but it isn't compatible
with the way things work in Kubernetes when the proxy isn't used.

Enable name auto-completion in the proxy so that the proxy will add
the current pod's namespace to any unqualified service name. This
depends on the feature being added to the proxy (PR #59).

Due to some issues with how zones are dealt with in the project, the
zone component isn't provided; it turns out that it doesn't matter
whether we provide the zone in the current implementation. Dealing
with the zone better will be added later.

Validated by deploying the emojivoto service with its configuration
updated to use unqualified names (`sed "s/\\.emojivoto//g"`). Before
this change this modified configuration would fail; now it succeeds.

Fixes #9.
2017-12-19 12:07:54 -10:00
Brian Smith 8385a7a8c1
Proxy: Map unqualified/partially-qualified names to FQDN (#59)
* Proxy: Map unqualified/partially-qualified names to FQDN

Previously we required the service to fully qualify all service names
for outbound traffic. Many services are written assuming that
Kubernetes will complete names using its DNS search path, and those
services weren't working with Conduit.

Now add an option, used by default, to fully-qualify the domain names.
Currently only Kubernetes-like name completion for services is
supported, but the configuration syntax is open-ended to allow for
alternatives in the future. Also, the auto-completion can be disabled
for applications that prefer to ensure they're always using unambiguous
names. Once routing is implemented then it is likely that (default)
routing rules will replace these hard-coded rules.

Unit tests for the name completion logic are included.

Part of the solution for #9. The changes to `conduit inject` to
actually use this facility will be in another PR.
2017-12-19 11:59:26 -10:00
Phil Calçado 6f9e8be2ee
Check kubectl versions before attempting dashboard (#53)
* Introduce objects to manage kubectl and shell

* Make dashboard command use new shell & kubectl objects

* Make compatible with version numbers like v1.9.0-beta.1

* Add version check for kubectl

* Refactor error to use proper method from fmt pa ckage

* Make channel and error handling more idiomatic and safe

* Make version require 1.8.0
2017-12-19 11:41:15 +11:00
Alex Leong 772b43fefa Add inject flag for skipping outbound ports (#38)
* Add inject flag for skipping outbound ports

* Fix usage of proxy-init ignore flags (closes #541)
2017-12-19 11:17:11 +11:00
Sterling White ff519fc855 Swhite/css updates (#55)
* fix sidebar highlighting when dashboard is opened via cli:
- took path prefix into account

* addressed review feedback: using pathprefix

* addressed review feedback:
- revert to using this.props.location

* updates sidebar, initial progress indicator

* Update web README
2017-12-18 15:03:49 -08:00
Brian Smith d025bf4c0f
conduit inject: Configure proxy to log at "info" level (#58)
Previously `conduit inject` was configuring the proxy to log a lot of
detail, most of which is probably shouldn't be relevant to Conduit
users.

Configure the proxy to log at the "info" level instead for the proxy
itself, and the "warn" level for internal components of the proxy.

Validated by manually doing a `conduit inject`, triggering some
traffic, and inspecting the logs.

Fixes #57
2017-12-18 08:37:27 -10:00
Brian Smith 4fa4891694
Use `connection::Connection` for outbound connections (#51)
Previously `connection::Connection` was only being used for inbound
connections, not outbound connections. This led to some duplicate
logic and also made it difficult to adapt that code to enable TLS.

Now outbound connections use `connection::Connection` too. This will
allow the upcoming TLS logic to guarantee that `TCP_NODELAY` is
enabled at the right time, and the TLS logic also control access to
the underlying plaintext socket for security reasons.
2017-12-15 12:44:25 -10:00
Risha Mars 55de336325
Add a couple more eslint rules (#50)
* Add a couple more eslint rules

* Add keyword-spacing
2017-12-15 12:24:42 -08:00
Alex Leong 8a7579ef4a
Add RBAC support (#40)
Adds a ServiceAccount, ClusterRole, and ClusterRoleBinding to the conduit install output that allows the Conduit controller read access to the k8s API.

I have tested this on RBAC-enabled minikube and minikube without RBAC.
2017-12-14 16:57:52 -08:00
Brian Smith 40d50f0f4a
Encapsulate listening port connection acceptance logic (#46)
Previously every use of `BoundPort` repeated a bunch of logic.

Move the repeated logic to `BoundPort` itself. Just remove the no-op
handshaking logic; new handshaking logic will be added to `BoundPort`
when TLS is added.
2017-12-14 13:19:05 -10:00
Risha Mars d11115d241
Add javascript tests (#45)
* Add JS testing infra: karma, mocha, sinon, chai, enzyme

* Grab styleNum tests from kl
2017-12-14 15:12:26 -08:00
Risha Mars 27b6a9bc1f
Readability improvements on Bar Chart (#35) 2017-12-14 14:52:03 -08:00
Brian Smith 81fb0fea5f
Move default private connect timeout to `Config` (#42)
Previously the default value of this setting was in lib.rs instead of
being automatically set in `Config` like all the other defaults, which
was inconsistent and confusing.

Fix this by moving the defaulting logic to `Config`.

Validated by running the test suite.
2017-12-13 21:15:21 -06:00
Brian Smith 0c2aa0e185
Centralize and clarify TCP port binding (#43)
Previously the logic related to listening for incoming TCP connections
was duplicated in several places.

Begin centralizing this logic. Future commits will centralize it
further.

No validation was done other than running the test suite.
2017-12-13 19:45:15 -06:00
Brian Smith 0185522821
Proxy: Parse environment variables in one place (#26)
Previously `Process` did its own environment variable parsing and did
not benefit from the improved error handling that `config` now has.
Additionally, future changes will need access to these same environment
variables in other parts of the proxy.

Move `Process`'s environment variable parsing to `config` to address
both of these issues. Now there are no uses of `env::var` outside of
`config` except for logging, which is the final desired state.

I validated this manually.
2017-12-13 19:33:37 -06:00
Brian Smith 559f4a76fb
Proxy: Use production config parsing in tests (#25)
* Proxy: Use production config parsing in tests

Previosuly the testing code for the proxy was sensitive to the values
of environment variables unintentionally, because `Config` looked at
the environment variables. Also, the tests were largely avoiding
testing the production configuration parsing code since they were
doing their own parsing.

Now the tests avoid looking at environment variables other than
`ENV_LOG`, which makes them more resilient. Also the tests now parse
the settings using the same code as production use uses.

I validated this manually.
2017-12-13 19:27:50 -06:00
Brian Smith 0ebc20c013
Proxy: Parse all environment variables before aborting (#24)
Previously, as soon as we would encounter one environment variable with
an invalid value we would exit. This is frustrating behavior when
deploying to Kubernetes and there are multiple problems because the
edit-compile-test cycle is so slow.

Fix this by parsing all the environment variables and logging error
messages before exiting.

I validated this manually.
2017-12-13 18:56:14 -06:00