open-nomad/api
Seth Hoenig 14c7cebdea connect: enable automatic expose paths for individual group service checks
Part of #6120

Building on the support for enabling connect proxy paths in #7323, this change
adds the ability to configure the 'service.check.expose' flag on group-level
service check definitions for services that are connect-enabled. This is a slight
deviation from the "magic" that Consul provides. With Consul, the 'expose' flag
exists on the connect.proxy stanza, which will then auto-generate expose paths
for every HTTP and gRPC service check associated with that connect-enabled
service.

A first attempt at providing similar magic for Nomad's Consul Connect integration
followed that pattern exactly, as seen in #7396. However, on reviewing the PR
we realized having the `expose` flag on the proxy stanza inseperably ties together
the automatic path generation with every HTTP/gRPC defined on the service. This
makes sense in Consul's context, because a service definition is reasonably
associated with a single "task". With Nomad's group level service definitions
however, there is a reasonable expectation that a service definition is more
abstractly representative of multiple services within the task group. In this
case, one would want to define checks of that service which concretely make HTTP
or gRPC requests to different underlying tasks. Such a model is not possible
with the course `proxy.expose` flag.

Instead, we now have the flag made available within the check definitions themselves.
By making the expose feature resolute to each check, it is possible to have
some HTTP/gRPC checks which make use of the envoy exposed paths, as well as
some HTTP/gRPC checks which make use of some orthongonal port-mapping to do
checks on some other task (or even some other bound port of the same task)
within the task group.

Given this example,

group "server-group" {
  network {
    mode = "bridge"
    port "forchecks" {
      to = -1
    }
  }

  service {
    name = "myserver"
    port = 2000

    connect {
      sidecar_service {
      }
    }

    check {
      name     = "mycheck-myserver"
      type     = "http"
      port     = "forchecks"
      interval = "3s"
      timeout  = "2s"
      method   = "GET"
      path     = "/classic/responder/health"
      expose   = true
    }
  }
}

Nomad will automatically inject (via job endpoint mutator) the
extrapolated expose path configuration, i.e.

expose {
  path {
    path            = "/classic/responder/health"
    protocol        = "http"
    local_path_port = 2000
    listener_port   = "forchecks"
  }
}

Documentation is coming in #7440 (needs updating, doing next)

Modifications to the `countdash` examples in https://github.com/hashicorp/demo-consul-101/pull/6
which will make the examples in the documentation actually runnable.

Will add some e2e tests based on the above when it becomes available.
2020-03-31 17:15:50 -06:00
..
contexts csi: CLI for volume status, registration/deregistration and plugin status (#7193) 2020-03-23 13:58:30 -04:00
internal/testutil Divest api/ package of deps elsewhere in the nomad repo. (#5488) 2019-03-29 14:47:40 -04:00
acl.go Self token lookup 2017-10-13 13:12:20 -07:00
acl_test.go Self token lookup 2017-10-13 13:12:20 -07:00
agent.go refactor api profile methods 2020-01-09 15:15:12 -05:00
agent_test.go fix tests, update changelog 2020-01-29 13:55:39 -05:00
allocations.go csi: volumes listed in nomad node status (#7318) 2020-03-23 13:58:30 -04:00
allocations_test.go api: avoid depending on helper internal package 2019-11-12 11:02:33 -05:00
api.go api: check response content length before decoding. 2020-02-20 10:07:44 +01:00
api_test.go api: avoid depending on helper internal package 2019-11-12 11:02:33 -05:00
compose_test.go fix tests from introducing new struct fields 2019-07-31 01:03:16 -04:00
constraint.go core: add semver constraint 2019-11-19 08:40:19 -08:00
constraint_test.go Parallel 2017-07-21 16:33:04 -07:00
csi.go api: prevent panic if volume has nil allocs (#7486) 2020-03-25 09:45:51 -04:00
csi_test.go csi add allocation context to fingerprinting results (#7133) 2020-03-23 13:58:30 -04:00
deployments.go code review fixes 2018-05-31 10:57:08 -07:00
evaluations.go add create and modify timestamps to evaluations (#5881) 2019-08-07 09:50:35 -07:00
evaluations_test.go non-Existent -> nonexistent 2018-03-12 11:59:33 -07:00
fs.go cli: recover from client ACL lookup failures 2019-10-04 11:23:59 -04:00
fs_test.go Divest api/ package of deps elsewhere in the nomad repo. (#5488) 2019-03-29 14:47:40 -04:00
go.mod Update go mod 2019-12-16 12:47:10 +01:00
go.sum Update go mod 2019-12-16 12:47:10 +01:00
jobs.go added new int64ToPtr method to api/util to avoid pulling in other packages 2020-03-24 14:39:05 +00:00
jobs_test.go per-task restart policy 2020-03-24 17:00:41 -04:00
namespace.go sync 2017-10-13 14:36:02 -07:00
namespace_test.go sync 2017-09-19 10:08:23 -05:00
nodes.go csi: change the API paths to match CLI command layout (#7325) 2020-03-23 13:58:30 -04:00
nodes_test.go Divest api/ package of deps elsewhere in the nomad repo. (#5488) 2019-03-29 14:47:40 -04:00
operator.go Rename to match system scheduler config. 2019-05-03 14:06:12 -05:00
operator_autopilot.go implement MinQuorum 2020-02-16 16:04:59 -06:00
operator_test.go Divest api/ package of deps elsewhere in the nomad repo. (#5488) 2019-03-29 14:47:40 -04:00
quota.go sync 2017-10-13 14:36:02 -07:00
quota_test.go sync 2017-10-13 14:36:02 -07:00
raw.go Making the client use tls if the node from which migration has to be made has enabled tls 2016-10-31 10:20:04 -07:00
regions.go fix a copy/paste error on api.Regions() comment 2017-01-17 22:48:01 -08:00
regions_test.go Divest api/ package of deps elsewhere in the nomad repo. (#5488) 2019-03-29 14:47:40 -04:00
resources.go cli: display group ports and address in alloc status command output (#6189) 2019-08-27 23:59:36 -04:00
scaling.go more testing for ScalingPolicy, mainly around parsing and canonicalization for Min/Max 2020-03-24 19:43:50 +00:00
scaling_test.go bad conversion between api.ScalingPolicy and structs.ScalingPolicy meant 2020-03-24 14:39:06 +00:00
search.go Search respects QueryOptions and returns QueryMeta 2017-08-27 22:17:51 -07:00
search_test.go Add new reschedule options to API layer and unit tests 2018-03-14 16:10:32 -05:00
sentinel.go sync 2017-09-19 10:08:23 -05:00
sentinel_test.go sync 2017-09-19 10:08:23 -05:00
services.go connect: enable automatic expose paths for individual group service checks 2020-03-31 17:15:50 -06:00
services_test.go client: enable configuring enable_tag_override for services 2020-02-10 08:00:55 -06:00
status.go display server leaders per region 2016-03-17 16:04:09 -07:00
status_test.go Parallel 2017-07-21 16:33:04 -07:00
system.go Add missing ReconcileSummaries API method 2017-08-24 11:55:10 +02:00
system_test.go Parallel 2017-07-21 16:33:04 -07:00
tasks.go per-task restart policy 2020-03-24 17:00:41 -04:00
tasks_test.go more testing for ScalingPolicy, mainly around parsing and canonicalization for Min/Max 2020-03-24 19:43:50 +00:00
util_test.go added new int64ToPtr method to api/util to avoid pulling in other packages 2020-03-24 14:39:05 +00:00
utils.go more testing for ScalingPolicy, mainly around parsing and canonicalization for Min/Max 2020-03-24 19:43:50 +00:00
utils_test.go api: move formatFloat function 2019-01-18 15:31:31 -05:00