pivotal-cf/lts-route-registrar

Name: lts-route-registrar

Owner: Pivotal Cloud Foundry

Description: A standalone executable written in golang that continuously broadcasts a route using NATS to the CF router.

Created: 2018-05-09 20:57:48.0

Updated: 2018-05-09 20:58:25.0

Pushed: 2018-05-10 18:14:14.0

Homepage: null

Size: 984

Language: Go

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

route-registrar

A standalone executable written in golang that continuously broadcasts a routes to the gorouter. This is designed to be a general purpose solution, packaged as a BOSH job to be colocated with components that need to broadcast their routes to the gorouter, so that those components don't need to maintain logic for route registration.

Note: This repository should be imported as code.cloudfoundry.org/route-registrar.

Usage
  1. Clone the routing-release repository

    clone --recursive https://github.com/cloudfoundry/routing-release
    
  2. Build the route-registrar binary

    outing-release
    ce .envrc # or direnv allow
    et code.cloudfoundry.org/route-registrar
    la bin/route-registrar
    
  3. The route-registrar expects a configuration json file like the one below:

    
    sage_bus_servers": [
    
    ost": "NATS_SERVER_HOST:PORT",
    ser": "NATS_SERVER_USERNAME",
    assword": "NATS_SERVER_PASSWORD"
    
    
    t": "HOSTNAME_OR_IP_OF_ROUTE_DESTINATION",
    tes": [
    
    ame": "SOME_ROUTE_NAME",
    ls_port": "TLS_PORT_OF_ROUTE_DESTINATION",
    ags": {
    "optional_tag_field": "some_tag_value",
    "another_tag_field": "some_other_value"
    
    ris": [
    "some_source_uri_for_the_router_to_map_to_the_destination",
    "some_other_source_uri_for_the_router_to_map_to_the_destination"
    
    erver_cert_domain_san": "some.service.internal",
    oute_service_url": "https://route-service.example.com",
    egistration_interval": "REGISTRATION_INTERVAL",
    ealth_check": {
    "name": "HEALTH_CHECK_NAME",
    "script_path": "/path/to/check/executable",
    "timeout": "HEALTH_CHECK_TIMEOUT"
    
    
    
    
    
  4. message_bus_servers is an array of data with location and credentials for the NATS servers; route-registrar currently registers and deregisters routes via NATS messages. message_bus_servers.host must include both hostname and port; e.g. host: 10.0.32.11:4222

  5. host is the destination hostname or IP for the routes being registered. To Gorouter, these are backends.

  6. routes is required and is an array of hashes. For each route collection:

    • name must be provided and be a string
    • port or tls_port are for the destination host (backend). At least one must be provided and must be a positive integer > 1.
    • server_cert_domain_san is the SAN on the destination host's TLS certificate. Required when tls_port is provided.
    • uris are the routes being registered for the destination host. Must be provided and be a non empty array of strings. All URIs in a given route collection will be mapped to the same host and port.
    • registration_interval is the interval for which routes are registered with NATS. Must be provided and be a string with units (e.g. “20s”). It must parse to a positive time duration e.g. “-5s” is not permitted.
    • route_service_url is optional. When provided, Gorouter will proxy requests received for the uris above to this address.
    • health_check is optional and explained in more detail below.
  7. Run route-registrar binaries using the following command

    e-registrar -configPath FILE_PATH_TO_CONFIG_JSON -pidfile PATH_TO_PIDFILE
    
Health check

If the health_check is not configured for a route collection, the routes are continually registered according to the registration_interval.

If the health_check is configured, the executable provided at health_check.script_path is invoked and the following applies:

BOSH release

This program is packaged as a job and a package in the routing-release BOSH release, it can be colocated with the following manifest changes:

ases:
me: routing
me: my-release

:
me: myJob
mplates:
name: my-job
release: my-release
name: route_registrar
release: routing
operties:
route_registrar:
  # ...
  # [ see bosh job spec ]
Development
Dependencies

Dependencies are saved using the routing-release. Just clone the repo and set the GOPATH to the routing release directory.

Running tests
  1. Install the ginkgo binary with go get:

    et github.com/onsi/ginkgo/ginkgo
    
  2. Run tests, by running the following command from root of this repository

    test
    

This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.