Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. https://www.consul.io
Go to file
R.B. Boyer a155423f29 server: config entry replication now correctly uses namespaces in comparisons (#9024)
Previously config entries sharing a kind & name but in different
namespaces could occasionally cause "stuck states" in replication
because the namespace fields were ignored during the differential
comparison phase.

Example:

Two config entries written to the primary:

    kind=A,name=web,namespace=bar
    kind=A,name=web,namespace=foo

Under the covers these both get saved to memdb, so they are sorted by
all 3 components (kind,name,namespace) during natural iteration. This
means that before the replication code does it's own incomplete sort,
the underlying data IS sorted by namespace ascending (bar comes before
foo).

After one pass of replication the primary and secondary datacenters have
the same set of config entries present. If
"kind=A,name=web,namespace=bar" were to be deleted, then things get
weird. Before replication the two sides look like:

primary: [
    kind=A,name=web,namespace=foo
]
secondary: [
    kind=A,name=web,namespace=bar
    kind=A,name=web,namespace=foo
]

The differential comparison phase walks these two lists in sorted order
and first compares "kind=A,name=web,namespace=foo" vs
"kind=A,name=web,namespace=bar" and falsely determines they are the SAME
and are thus cause an update of "kind=A,name=web,namespace=foo". Then it
compares "<nothing>" with "kind=A,name=web,namespace=foo" and falsely
determines that the latter should be DELETED.

During reconciliation the deletes are processed before updates, and so
for a brief moment in the secondary "kind=A,name=web,namespace=foo" is
erroneously deleted and then immediately restored.

Unfortunately after this replication phase the final state is identical
to the initial state, so when it loops around again (rate limited) it
repeats the same set of operations indefinitely.
2020-10-23 18:42:45 +00:00
.changelog server: config entry replication now correctly uses namespaces in comparisons (#9024) 2020-10-23 18:42:45 +00:00
.circleci connect: update supported envoy point releases to 1.14.5, 1.13.6, 1.12.7, 1.11.2 for 1.8.x (#8999) 2020-10-22 13:26:51 -05:00
.github Adding redirect to discuss, moving question to old (#7732) 2020-05-01 13:02:15 -04:00
acl Merge pull request #8035 from hashicorp/feature/auto-config/server-rpc 2020-06-17 20:08:17 +00:00
agent server: config entry replication now correctly uses namespaces in comparisons (#9024) 2020-10-23 18:42:45 +00:00
api api: create fresh http client for unix sockets (#8602) 2020-09-06 16:28:56 +00:00
bench Gets benchmarks running again and does a rough pass for 0.7.1. 2016-11-29 13:02:26 -08:00
build-support ci: bump Go to v1.14.7 (#8449) 2020-08-12 14:43:59 +00:00
command connect: update supported envoy point releases to 1.14.5, 1.13.6, 1.12.7, 1.11.2 for 1.8.x (#8999) 2020-10-22 13:26:51 -05:00
connect Merge pull request #8086 from hashicorp/feature/auto-config/client-config-inject 2020-06-18 14:45:52 +00:00
contributing Add contributing dir with Config file checklist (#7017) 2020-01-14 12:24:03 +00:00
demo demo: Added udp port forwarding 2018-05-30 13:56:56 +09:00
internal/go-sso Merge pull request #8034 from hashicorp/dnephin/add-linter-staticcheck-4 2020-08-05 13:37:35 -04:00
ipaddr Ensure Consul is IPv6 compliant (#5468) 2019-06-04 10:02:38 -04:00
lib Merge pull request #8511 from hashicorp/dnephin/agent-setup 2020-08-26 17:15:12 -04:00
logging Automatically renew the token used by the Vault CA provider 2020-10-07 16:40:27 -04:00
proto Backport: #8523 (#8589) 2020-08-31 16:46:37 -04:00
sdk sdk: also print test agent logs in verbose mode (#8616) 2020-09-04 16:24:57 +00:00
sentinel Allow users to configure either unstructured or JSON logging (#7130) 2020-01-28 17:50:41 -06:00
service_os Changes made : 2018-06-28 21:18:14 -04:00
snapshot ci: Add staticcheck and fix most errors 2020-06-01 10:40:04 -05:00
terraform terraform: remove modules in repo (#5085) 2019-04-04 16:31:43 -07:00
test connect: update supported envoy point releases to 1.14.5, 1.13.6, 1.12.7, 1.11.2 for 1.8.x (#8999) 2020-10-22 13:26:51 -05:00
testrpc acl: remove the deprecated `acl_enforce_version_8` option (#7991) 2020-06-01 10:40:22 -05:00
tlsutil Add support for -ca-path option in the connect envoy command (#8606) 2020-09-08 14:10:21 +00:00
types Move RPC router from Client/Server and into BaseDeps (#8559) 2020-08-27 15:24:25 +00:00
ui-v2 ui: [Bugfix] KV creation from within a 'folder' (#8613) 2020-09-09 08:13:11 +00:00
vendor Update vault CA for latest api client 2020-10-07 16:40:27 -04:00
version Putting source back into Dev Mode 2020-09-11 14:21:16 +00:00
website Update managed-deprecated.mdx (#9016) 2020-10-23 14:55:46 +00:00
.dockerignore Update the scripting 2018-06-14 21:42:47 -04:00
.gitignore .gitignore: cut IDE-specific entries, cleanup (#7083) 2020-01-17 11:06:33 -08:00
.golangci.yml Merge pull request #8034 from hashicorp/dnephin/add-linter-staticcheck-4 2020-08-05 13:37:35 -04:00
.hashibot.hcl hashibot: let hashibot help us more (#7281) 2020-02-19 15:30:27 +01:00
CHANGELOG.md Run make update-vendor after cherry-pick 2020-10-07 16:40:28 -04:00
GNUmakefile Merge pull request #8784 from hashicorp/renew-intermediate-primary 2020-10-09 12:26:49 -07:00
INTERNALS.md Add contributing dir with Config file checklist (#7017) 2020-01-14 12:24:03 +00:00
LICENSE Initial commit 2013-11-04 14:15:27 -08:00
NOTICE.md add copyright notice file 2018-07-09 10:58:26 -07:00
README.md Added docs link to Learn tutorial for Kind. (#8610) 2020-09-14 20:03:52 -04:00
Vagrantfile Adds a basic Linux Vagrant setup, stolen from Nomad. 2017-10-06 08:10:12 -07:00
codecov.yml ui: Test Coverage Reporting (#7027) 2020-05-12 17:13:50 +00:00
go.mod vendor: Update vault api package 2020-10-07 16:40:27 -04:00
go.sum Run make update-vendor after cherry-pick 2020-10-07 16:40:28 -04:00
main.go Add Revision to version CLI output and add JSON support 2020-07-10 10:43:09 -04:00
main_test.go Adding basic CLI infrastructure 2013-12-19 11:22:08 -08:00

README.md

Consul CircleCI Discuss

Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

Consul provides several key features:

  • Multi-Datacenter - Consul is built to be datacenter aware, and can support any number of regions without complex configuration.

  • Service Mesh/Service Segmentation - Consul Connect enables secure service-to-service communication with automatic TLS encryption and identity-based authorization. Applications can use sidecar proxies in a service mesh configuration to establish TLS connections for inbound and outbound connections without being aware of Connect at all.

  • Service Discovery - Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. External services such as SaaS providers can be registered as well.

  • Health Checking - Health Checking enables Consul to quickly alert operators about any issues in a cluster. The integration with service discovery prevents routing traffic to unhealthy hosts and enables service level circuit breakers.

  • Key/Value Storage - A flexible key/value store enables storing dynamic configuration, feature flagging, coordination, leader election and more. The simple HTTP API makes it easy to use anywhere.

Consul runs on Linux, Mac OS X, FreeBSD, Solaris, and Windows. A commercial version called Consul Enterprise is also available.

Please note: We take Consul's security and our users' trust very seriously. If you believe you have found a security issue in Consul, please responsibly disclose by contacting us at security@hashicorp.com.

Quick Start

A few quick start guides are available on the Consul website:

Documentation

Full, comprehensive documentation is available on the Consul website:

https://www.consul.io/docs

Contributing

Thank you for your interest in contributing! Please refer to CONTRIBUTING.md for guidance.