diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d5fdf49f..ce7fa46f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,28 +2,20 @@ ## Breaking Changes -* `encryptionRequired` for `POST/PUT /services` is now a required field - ## What's New - -* fix - [edge#338 configurable IP range for DNS services](https://github.com/openziti/edge/issues/338) - The IP range for hostname-configured services defaults to 100.64/10, - and can be changed with the `-d` command-line option. -* fix - [edge#336 Startup Race Condition](https://github.com/openziti/edge/issues/336) -* fix api-session and session deletes from ziti CLI -* update ziti-fabric-test loop3 -* allow specifying policy semantic from CLI when creating policies -* new eventing features -* Posture Check Configuration API + * fix [edge#338 configurable IP range for DNS services](https://github.com/openziti/edge/issues/338) + The IP range for hostname-configured services defaults to 100.64/10, and can be changed with the + `-d` command-line option. + * fix [edge#336 Startup Race Condition](https://github.com/openziti/edge/issues/336) + * fix api-session and session deletes from ziti CLI + * update ziti-fabric-test loop3 + * allow specifying policy semantic from CLI when creating policies + * new eventing features + * Posture Check Configuration API ## Event Changes - ### Event Configuration - -Handlers can now be configured for events via the config file. Here is -an example configuration: +Handlers can now be configured for events via the config file. Here is an example configuration: events: jsonLogger: @@ -43,8 +35,7 @@ an example configuration: format: json path: /tmp/ziti-events.log -Each section can include any number of event subscriptions and a single -handler. The supported event types are: +Each section can include any number of event subscriptions and a single handler. The supported event types are: * metrics * fabric.sessions @@ -52,36 +43,27 @@ handler. The supported event types are: * edge.sessions ### Event Handlers - There are two new handlers which can be used to output events. #### File Handler - Sends events to disk. Supported options: * type: file * format: json|plain * path: Path to the target file -* bufferSize: size of event queue. When this fills up, processes - submitting events will block +* bufferSize: size of event queue. When this fills up, processes submitting events will block * maxsizemb: max size of the file before it gets rolled. default is 10MB -* maxbackups: max number of rolling files to keep. default is 0 (keeps - all) +* maxbackups: max number of rolling files to keep. default is 0 (keeps all) #### Stdout Handler - Sends events to stdout. Supported options: * type: stdout * format: json|plain -* bufferSize: size of event queue. When this fills up, processes - submitting events will block +* bufferSize: size of event queue. When this fills up, processes submitting events will block ### Usage Events - -There is a new Usage event type which has been derived from the metrics -events. This allows handlers to see discrete usage events, rather than a -collection of them. +There is a new Usage event type which has been derived from the metrics events. This allows handlers to see discrete usage events, rather than a collection of them. The Usage event looks like: @@ -96,11 +78,7 @@ The Usage event looks like: } ### Metrics Events - -Metrics events can now be filtered. Metrics events processed through the -new event framework no longer sending metrics messages directly. Rather, -a flattened (and more easily filterable) event type is provided. The new -event type looks like: +Metrics events can now be filtered. Metrics events processed through the new event framework no longer sending metrics messages directly. Rather, a flattened (and more easily filterable) event type is provided. The new event type looks like: type MetricsEvent struct { Namespace string @@ -143,121 +121,69 @@ This section contains an overview of the new endpoints. See the OpenAPI # Release 0.16.4 ## Breaking CLI Change - -* The `ziti edge enroll` and `ziti-tunnel enroll` subcommands no longer - require a --jwt argument. Instead the JWT can be supplied as the first - argument. So `ziti edge enroll --jwt /path/to/my.jwt` would become - `ziti edge enroll /path/to/my.jwt`. For now the --jwt flag is still - accepted as well. + * The `ziti edge enroll` and `ziti-tunnel enroll` subcommands no longer require a --jwt argument. Instead the JWT can be supplied as the first argument. So `ziti edge enroll --jwt /path/to/my.jwt` would become `ziti edge enroll /path/to/my.jwt`. For now the --jwt flag is still accepted as well. ## Deprecations - -* The `ziti-enroller` command is deprecated and will be removed in a - future release. It will now display a DEPRECATION warning when it is - run + * The `ziti-enroller` command is deprecated and will be removed in a future release. It will now display a DEPRECATION warning when it is run ## What's New - -* [ziti#192 CAs default to 10yr expiration](https://github.com/openziti/ziti/issues/192) -* Allow specifying edge config file when using ziti-fabric-test loop2 -* Add grouping data to streaming metrics, so values can be associated - with their source metric -* New WSS underlay to support Edge Router connections from Browser-based - webapps using the ziti-sdk-js -* [ziti#151 enroll subcommand w/out args should print help](https://github.com/openziti/ziti/issues/192) -* Fix processing of `--configTypes all` in `ziti edge list services` -* Addressable Terminators and the eXtensible Terminator Validation - framework -* GO Edge SDK now respects Service.EncryptionRequired setting -* [fabric#133 Add Version Information To Hellos](https://github.com/openziti/fabric/issues/133) -* [edge#326 Nested Transaction Deadlock](https://github.com/openziti/edge/issues/326) + * [ziti#192 CAs default to 10yr expiration](https://github.com/openziti/ziti/issues/192) + * Allow specifying edge config file when using ziti-fabric-test loop2 + * Add grouping data to streaming metrics, so values can be associated with their source metric + * New WSS underlay to support Edge Router connections from Browser-based webapps using the ziti-sdk-js + * [ziti#151 enroll subcommand w/out args should print help](https://github.com/openziti/ziti/issues/192) + * Fix processing of `--configTypes all` in `ziti edge list services` + * Addressable Terminators and the eXtensible Terminator Validation framework + * GO Edge SDK now respects Service.EncryptionRequired setting + * [fabric#133 Add Version Information To Hellos](https://github.com/openziti/fabric/issues/133) + * [edge#326 Nested Transaction Deadlock](https://github.com/openziti/edge/issues/326) # Config File Changes - -The following should be added to controller configuration files when -using the Edge components: +The following should be added to controller configuration files when using the Edge components: terminator: validators: edge: edge -This config stanza enables validating edge terminators. If this stanza -is not added, everything will continue to work, but different Edge -identities will be allowed to bind to the same terminator identity, -which is generally not a valid state. +This config stanza enables validating edge terminators. If this stanza is not added, everything will continue to work, but different Edge identities will be allowed to bind to the same terminator identity, which is generally not a valid state. # SDK API changes +The `Context.ListenWithOptions` method now takes a `ListenOptions` which are defined in the `ziti` package, instead of the `edge` package. -The `Context.ListenWithOptions` method now takes a `ListenOptions` which -are defined in the `ziti` package, instead of the `edge` package. - -There's a new `Context.DialWithOptions` method which takes a -`DialOptions` struct. +There's a new `Context.DialWithOptions` method which takes a `DialOptions` struct. ## Addressable Terminators and Terminator Validation - -This release contains two new features related to terminators. The first -allows you to connect to a subset of terminators for a service. The -second allows developers to plugin validation for terminators with -different validation logic per binding type. +This release contains two new features related to terminators. The first allows you to connect to a subset of terminators for a service. The second allows developers to plugin validation for terminators with different validation logic per binding type. ### Addressable Terminators +Terminators define how network traffic for Ziti services exits the fabric and makes its way to the application providing/hosting the service. Each terminator for a service specifies the following: -Terminators define how network traffic for Ziti services exits the -fabric and makes its way to the application providing/hosting the -service. Each terminator for a service specifies the following: + 1. The router at which traffic terminates + 2. The binding, which specifies the Xgress component responsible for providing the connection to the hosting application + 3. The address, which the Xgress component can use to create or lookup the connection -1. The router at which traffic terminates -2. The binding, which specifies the Xgress component responsible for - providing the connection to the hosting application -3. The address, which the Xgress component can use to create or lookup - the connection + There are currently two kinds of termination. Router terminated services make outbound connections to the hosting applications. SDK hosted servers make inbound connections from the SDK to the router. -There are currently two kinds of termination. Router terminated services -make outbound connections to the hosting applications. SDK hosted -servers make inbound connections from the SDK to the router. +Now that Ziti supports multiple terminators we may want to be able to connect to a specific hosting application. This can be used to allow a service to cover many endpoints, each of which can be connected to individually. Some common use cases for this might be a peer-to-peer application, like a voip service, or a service like SSH covering multiple machines. -Now that Ziti supports multiple terminators we may want to be able to -connect to a specific hosting application. This can be used to allow a -service to cover many endpoints, each of which can be connected to -individually. Some common use cases for this might be a peer-to-peer -application, like a voip service, or a service like SSH covering -multiple machines. - -What we don't want in these cases is to have to create a new service for -each voip client or each new machine that we want to ssh to. We also -want to make sure that if an application is making multiple connections -(and thus multiple terminators) for redundancy or load balancing -purposes, that we can address the application, rather than an individual -terminator. +What we don't want in these cases is to have to create a new service for each voip client or each new machine that we want to ssh to. +We also want to make sure that if an application is making multiple connections (and thus multiple terminators) for redundancy or load balancing purposes, that we can address the application, rather than an individual terminator. To this end, terminators now have two new fields: -1. Identity - defines the name by which a terminator can be addressed - (along with other terminators using the same identity) -2. IdentitySecret - allows verifying that terminators using the same - identity are from the same application. +1. Identity - defines the name by which a terminator can be addressed (along with other terminators using the same identity) +1. IdentitySecret - allows verifying that terminators using the same identity are from the same application. Notes -1. Identity here may be related to the concept of the Edge Identity, but - is not required to be. -2. How IdentitySecret is used to validate a terminator is up to the - terminator valiator for the binding. The edge has a terminator - validator which uses the client's certs to ensure that all - terminators for a given terminator identity belong to the same edge - identity. +1. Identity here may be related to the concept of the Edge Identity, but is not required to be. +2. How IdentitySecret is used to validate a terminator is up to the terminator valiator for the binding. The edge has a terminator validator which uses the client's certs to ensure that all terminators for a given terminator identity belong to the same edge identity. The identity allows the service to be addressed with that identity. -This can now be used in the fabric by prefixing the service name with -the identity, separated by the `@` symbol. For example, if a service -`ssh` has a terminator with identity `web-server`, it could be dialed -using `web-server@ssh`. +This can now be used in the fabric by prefixing the service name with the identity, separated by the `@` symbol. For example, if a service `ssh` has a terminator with identity `web-server`, it could be dialed using `web-server@ssh`. -The Edge SDK also supports dialing and binding using identity -addressing. The `Context` type now supports a new `DialWithOptions` -method, which can be used to specify an identity. +The Edge SDK also supports dialing and binding using identity addressing. The `Context` type now supports a new `DialWithOptions` method, which can be used to specify an identity. dialOptions := &ziti.DialOptions{ Identity: "555-555-5555", @@ -265,11 +191,7 @@ method, which can be used to specify an identity. } conn, err := app.context.DialWithOptions(app.service, dialOptions) -`Context` already has a ListenWithOptions, and the `ListenOptions` now -support providing an Identity. Users may also set a flag to -automatically set the Identity to the edge identity's name. If an -identity is provided, the IdentitySecret will automatically be -calculated and passed in as well. +`Context` already has a ListenWithOptions, and the `ListenOptions` now support providing an Identity. Users may also set a flag to automatically set the Identity to the edge identity's name. If an identity is provided, the IdentitySecret will automatically be calculated and passed in as well. host.listener, err = host.context.ListenWithOptions(service.Name, &ziti.ListenOptions{ Identity: "555-555-5555", @@ -281,28 +203,21 @@ or BindUsingEdgeIdentity: true, }) -For non-Edge SDK terminators the identity can be provided on the command -line when creating the terminator. +For non-Edge SDK terminators the identity can be provided on the command line when creating the terminator. #### Example - -There is a simple application in the sdk-golang repository -`example/call` which shows how identity addressing can be used to -implement something like a VoIP service. +There is a simple application in the sdk-golang repository `example/call` which shows how identity addressing can be used to implement something like a VoIP service. ### xvt (eXtensible Termrinator Validation) - -The fabric now supports pluggable validators for terminators. Validators -implement the following interface: +The fabric now supports pluggable validators for terminators. Validators implement the following interface: type Validator interface { Validate(tx *bbolt.Tx, terminator Terminator, create bool) error } -Validators can be registered with the controller on startup. For -example, here is how the edge terminator validator is registered: +Validators can be registered with the controller on startup. For example, here is how the edge terminator validator is registered: - xtv.RegisterValidator("edge", env.NewEdgeTerminatorValidator(c.AppEnv)) + xtv.RegisterValidator("edge", env.NewEdgeTerminatorValidator(c.AppEnv)) Validators can then be tied to a binding in the config file: @@ -310,50 +225,42 @@ Validators can then be tied to a binding in the config file: validators: edge: edge -In the example above, terminators with the binding `edge` will use the -validator which was registered under the name `edge`. The binding is the -key and the validator name is the value. +In the example above, terminators with the binding `edge` will use the validator which was registered under the name `edge`. The binding is the key and the validator name is the value. # Release 0.16.2 * What's New * Smart routing fixes - * [Persist Terminator Precedence](https://github.com/openziti/fabric/issues/112) - * [Terminators and Fixed Link Cost, Incorrect Path Selection](https://github.com/openziti/fabric/issues/121) - * [If link vanishes during reroute, controller can panic](https://github.com/openziti/fabric/issues/122) - * [Scale latency metric when used for path costing](https://github.com/openziti/fabric/issues/123) - * [Services not always getting cleared from cache when terminators are updated](https://github.com/openziti/fabric/issues/124) + * [Persist Terminator Precedence](https://github.com/openziti/fabric/issues/112) + * [Terminators and Fixed Link Cost, Incorrect Path Selection](https://github.com/openziti/fabric/issues/121) + * [If link vanishes during reroute, controller can panic](https://github.com/openziti/fabric/issues/122) + * [Scale latency metric when used for path costing](https://github.com/openziti/fabric/issues/123) + * [Services not always getting cleared from cache when terminators are updated](https://github.com/openziti/fabric/issues/124) * [Fix service policy denormalization migration](https://github.com/openziti/edge/issues/291) - * [sdk-golang#84](https://github.com/openziti/sdk-golang/issues/84) - Fixes go routine leak that would slowly kill SDK application (i.e. - ziti-probe) + * [sdk-golang#84](https://github.com/openziti/sdk-golang/issues/84) Fixes go routine leak that would slowly kill SDK application (i.e. ziti-probe) * REST API doc via ReDoc available at `https://:/docs` # Release 0.16.1 * What's New * Metrics Refactoring - * [Support timers in metrics events](https://github.com/openziti/foundation/issues/121) - * [Convert json file reporter to generic reporter supporting multiple formatters, including json and plain](https://github.com/openziti/foundation/issues/122) + * [Support timers in metrics events](https://github.com/openziti/foundation/issues/121) + * [Convert json file reporter to generic reporter supporting multiple formatters, including json and plain](https://github.com/openziti/foundation/issues/122) * Session Performance Fixes - * [Supported unindexed FK constraints in bbolt](https://github.com/openziti/foundation/issues/119) - * [Improve API Session and Session creation performance](https://github.com/openziti/edge/issues/281) + * [Supported unindexed FK constraints in bbolt](https://github.com/openziti/foundation/issues/119) + * [Improve API Session and Session creation performance](https://github.com/openziti/edge/issues/281) * [Make enrollment available from the ziti CLI](https://github.com/openziti/ziti/issues/182) - * Docker image for `ziti-tunnel` - Embellish examples and fix - entrypoint script to wait for clean up of iptables rules on exit + * Docker image for `ziti-tunnel` - Embellish examples and fix entrypoint script to wait for clean up of iptables rules on exit * Various Internal Stability & Scale Fixes * Edge Controller: - * Use bbolt batch operations where possible (heartbeat updates, - sdk/env info) + * Use bbolt batch operations where possible (heartbeat updates, sdk/env info) * Stream API Sessions & Session during Edge Router Sync * Removal of `Panic()` calls * Edge Router: - * Support heartbeat interval configuration, default raised from 5s - to 60s + * Support heartbeat interval configuration, default raised from 5s to 60s * Ziti-Probe * Attempts to retain and reuse API Sessions - * Attempts to reconnect on disconnection, API Session removal, - session removal + * Attempts to reconnect on disconnection, API Session removal, session removal * Improve reconnection strategy * Adds `version` command to `ziti-probe` * Go SDK @@ -364,8 +271,7 @@ key and the validator name is the value. ## Overview: -**Important Note:** This release contains backwards incompatible -changes. See below for details. +**Important Note:** This release contains backwards incompatible changes. See below for details. * End-To-End Encryption Enhancements * [e2e Service Configuration & Router Termination](https://github.com/openziti/edge/issues/173) @@ -378,48 +284,31 @@ changes. See below for details. * [edge#258](https://github.com/openziti/edge/issues/258) * [#163](https://github.com/openziti/ziti/issues/163) * Events Framework - * [foundation#116](https://github.com/openziti/foundation/issues/116) - \- Add generic event framework and use it for metrics - * [fabric#106](https://github.com/openziti/fabric/issues/106) - Event - Streaming - * [edge#229](https://github.com/openziti/edge/issues/229) - Stream - Session Events + * [foundation#116](https://github.com/openziti/foundation/issues/116) - Add generic event framework and use it for metrics + * [fabric#106](https://github.com/openziti/fabric/issues/106) - Event Streaming + * [edge#229](https://github.com/openziti/edge/issues/229) - Stream Session Events * Bug Fixes: - * [#152](https://github.com/openziti/ziti/issues/152) - Fix - ziti-router enroll exit code on failure - * [#156](https://github.com/openziti/ziti/issues/156) - Fix display of - policies with empty roles lists - * [#169](https://github.com/openziti/ziti/issues/169) - Fix delete by - ID in Ziti CLI - * [edge#269](https://github.com/openziti/edge/issues/269) - Service - Policy types in the bbolt should be 1 and 2, rather than 4 and 5 - * [edge#273](https://github.com/openziti/edge/issues/273) - Avoid tun - "not pollable" read failures - * [fabric#114](https://github.com/openziti/fabric/issues/114) - When - egress connect fails, router does not return failure to controller - * [fabric#117](https://github.com/openziti/fabric/issues/117) - Xgress - setup has a race condition + * [#152](https://github.com/openziti/ziti/issues/152) - Fix ziti-router enroll exit code on failure + * [#156](https://github.com/openziti/ziti/issues/156) - Fix display of policies with empty roles lists + * [#169](https://github.com/openziti/ziti/issues/169) - Fix delete by ID in Ziti CLI + * [edge#269](https://github.com/openziti/edge/issues/269) - Service Policy types in the bbolt should be 1 and 2, rather than 4 and 5 + * [edge#273](https://github.com/openziti/edge/issues/273) - Avoid tun "not pollable" read failures + * [fabric#114](https://github.com/openziti/fabric/issues/114) - When egress connect fails, router does not return failure to controller + * [fabric#117](https://github.com/openziti/fabric/issues/117) - Xgress setup has a race condition * Backwards Compatibility * The `ziti edge snapshot-db` command is now `ziti edge db snapshot` - * In order to fix - [fabric#117](https://github.com/openziti/fabric/issues/117), the - xgress protocol flow had to be updated. This means 0.16+ controllers - and routers will not work with older controllers and routers + * In order to fix [fabric#117](https://github.com/openziti/fabric/issues/117), the xgress protocol flow had to be updated. This means 0.16+ controllers and routers will not work with older controllers and routers ## End-To-End Encryption Enhancements - ### E2E Encryption Router Termination - -A new xgress module has been added specifically for handling Ziti Edge -e2e to handle SDK to Router Termination scenarios. Previously, only -SDK-to-SDK end-to-end encryption was supported. When e2e encryption is -desired for a router terminated service, use the bind value -`edge_transport` when defining the terminator for the service. This -value is now the default when using the CLI to create a terminator. If -the `binding` value is omitted when using the REST API directly, it will -default to `transport` - which does not support e2e encryption. +A new xgress module has been added specifically for handling Ziti Edge e2e to handle SDK to Router Termination scenarios. +Previously, only SDK-to-SDK end-to-end encryption was supported. When e2e encryption is desired +for a router terminated service, use the bind value `edge_transport` when defining +the terminator for the service. This value is now the default when using the CLI to create +a terminator. If the `binding` value is omitted when using the REST API directly, it will default +to `transport` - which does not support e2e encryption. ##### CLI Example (explicit binding): @@ -444,11 +333,10 @@ POST /terminators Edge Services can now be set to require e2e encryption. All Edge Services defined before this version will default to requiring e2e encryption. Existing services will need to have their terminators -updated to use `edge_transport` or update the service to not require e2e -encryption. +updated to use `edge_transport` or update the service to not +require e2e encryption. ##### Create Service Example (encryption required) - ``` POST /services { @@ -456,11 +344,8 @@ POST /services "encryptionRequired": true } ``` - ##### Patch Service Example (encryption required) - Can also be set via PUT. - ``` PATCH /services/ { @@ -469,7 +354,6 @@ PATCH /services/ ``` #### Create Service CLI (encryption required) - End-to-end encryption defaults to required, no flag needed. ``` @@ -477,19 +361,16 @@ ziti edge create service myservice ``` #### Create Service CLI (encryption optional) - ``` ziti edge create service myservice -o ``` #### Update Service CLI (set encryption required) - ``` ziti edge update service myservice -e ``` #### Update Service CLI (set encryption optional) - ``` ziti edge update service myservice -o ``` @@ -504,10 +385,10 @@ links. This would be especially noticeable when starting multiple routers at the same time or when a Ziti Controller was restarted with multiple routers already connected. -To alleviate control channel congestion, worker queues and pools have -been added to xgress and link dial processing. New options are exposed -in the `forwarder` section of router configuration files to control the -queue and worker pool. +To alleviate control channel congestion, worker queues and pools +have been added to xgress and link dial processing. New options are +exposed in the `forwarder` section of router configuration files to +control the queue and worker pool. The new settings are: @@ -519,7 +400,6 @@ The new settings are: ...and are explained in the following example. ##### Example Router Configuration Section: - ``` forwarder: # How frequently does the forwarder probe the link latency. This will ultimately determine the resolution of the @@ -544,13 +424,7 @@ forwarder: ``` ## Model Performance Improvements - -Policy relationships are now stored in a denormalized fashion. This -means that checking if an entity is tied to another entity via a policy -is now a direct lookup, and much faster. This means that the Ziti -controller should scale very well in cases where we have many -identities, services and/or edge routers. Performance was tested against -the APIs used by the SDKs. +Policy relationships are now stored in a denormalized fashion. This means that checking if an entity is tied to another entity via a policy is now a direct lookup, and much faster. This means that the Ziti controller should scale very well in cases where we have many identities, services and/or edge routers. Performance was tested against the APIs used by the SDKs. See for more detail: @@ -558,56 +432,37 @@ See for more detail: * [Characterization (Pure Model Tests)](https://github.com/openziti/ziti/wiki/Characterization#pure-model-tests) ## Data Integrity Checking Framework - -The bbolt datastore used by Ziti provides simple key/value storage with -nesting. Ziti has implemented some basic relational constructs on top of -bbolt, such as indexed values, foreign key indexes, many to many -collections and reference counted collections (for policy -denormalization). This release adds a data integrity checking framework -which allows us to verify that constraint assumptions are valid, and -allows fixing issues when they are found (if possible). This work was -done in part to validate that the policy denormalization code is working -correctly, and to provide a rememdy if issues are found. +The bbolt datastore used by Ziti provides simple key/value storage with nesting. Ziti has implemented some basic relational constructs on top of bbolt, such as indexed values, foreign key indexes, many to many collections and reference counted collections (for policy denormalization). This release adds a data integrity checking framework which allows us to verify that constraint assumptions are valid, and allows fixing issues when they are found (if possible). This work was done in part to validate that the policy denormalization code is working correctly, and to provide a rememdy if issues are found. There are two new REST APIs available * GET `/database/check-data-integrity` - * https://github.com/openziti/edge/blob/master/specs/swagger.yml#L2916 + * https://github.com/openziti/edge/blob/master/specs/swagger.yml#L2916 * POST `/database/fix-data-integrity` - * https://github.com/openziti/edge/blob/master/specs/swagger.yml#L2930 + * https://github.com/openziti/edge/blob/master/specs/swagger.yml#L2930 These APIs can be used from the ziti CLI. * `ziti edge db check-integrity` - to report on data integrity issues -* `ziti edge db check-integrity -f` - to report on data integrity issues - and attempt to fix any that are found +* `ziti edge db check-integrity -f` - to report on data integrity issues and attempt to fix any that are found ## Events Framework +Ziti now has a shared events framework used across projects. Events are used internally and can be used by users to write components which plug into Ziti and react to events (or make them available externally). -Ziti now has a shared events framework used across projects. Events are -used internally and can be used by users to write components which plug -into Ziti and react to events (or make them available externally). - -Each project which exposes events will have a top-level events package -where you can find registration hooks for all exposed events in the -project +Each project which exposes events will have a top-level events package where you can find registration hooks for all exposed events in the project ### Current Event Types - * foundation - * metrics events + * metrics events * fabric - * fabric session events (session created, session deleted, session - path changed) - * trace events + * fabric session events (session created, session deleted, session path changed) + * trace events * edge - * **NEW** edge session events (session created, session deleted) - * the session event created includes sessionId, session token, API - sessionId and identity id - * the session deleted event includes sessionId and session token + * **NEW** edge session events (session created, session deleted) + * the session event created includes sessionId, session token, API sessionId and identity id + * the session deleted event includes sessionId and session token -NOTE: The clientId on fabric session events is the edge session token -for fabric sessions created from the edge +NOTE: The clientId on fabric session events is the edge session token for fabric sessions created from the edge # Release 0.15.3 @@ -617,56 +472,35 @@ for fabric sessions created from the edge # Release 0.15.2 * What's New: - * [#140](https://github.com/openziti/ziti/issues/140) - Allow logging - JSON request for Ziti CLI - * [#148](https://github.com/openziti/ziti/issues/148) - Show isOnline - in ziti edge list edge-routers - * [#144](https://github.com/openziti/ziti/issues/144) - Allow - ziti-fabric list to use queries. Default to `true limit none` + * [#140](https://github.com/openziti/ziti/issues/140) - Allow logging JSON request for Ziti CLI + * [#148](https://github.com/openziti/ziti/issues/148) - Show isOnline in ziti edge list edge-routers + * [#144](https://github.com/openziti/ziti/issues/144) - Allow ziti-fabric list to use queries. Default to `true limit none` * Bug Fixes: - * [#142](https://github.com/openziti/ziti/issues/142) - fix CLI ca - create not defaulting identity roles - * [#146](https://github.com/openziti/ziti/issues/146) - Export edge - router JWT fails sometimes when there are more than 10 edge routers - * [#147](https://github.com/openziti/ziti/issues/147) - Fix paging - output when using 'limit none' - * [edge#243](https://github.com/openziti/edge/issue/243) - Session - creation only returns 10 edge routers - * [edge#245](https://github.com/openziti/edge/issue/245) - fingerprint - calculation changed from 0.14 to 0.15. Ensure 0.15 routers can work - with 0.14 controllers - * [edge#248](https://github.com/openziti/edge/issue/248) - Edge Router - Hello can time out on slow networks with many links to establish - * [foundation#103](https://github.com/openziti/foundation/issues/103) - \- Fix config file env injection for lists + * [#142](https://github.com/openziti/ziti/issues/142) - fix CLI ca create not defaulting identity roles + * [#146](https://github.com/openziti/ziti/issues/146) - Export edge router JWT fails sometimes when there are more than 10 edge routers + * [#147](https://github.com/openziti/ziti/issues/147) - Fix paging output when using 'limit none' + * [edge#243](https://github.com/openziti/edge/issue/243) - Session creation only returns 10 edge routers + * [edge#245](https://github.com/openziti/edge/issue/245) - fingerprint calculation changed from 0.14 to 0.15. Ensure 0.15 routers can work with 0.14 controllers + * [edge#248](https://github.com/openziti/edge/issue/248) - Edge Router Hello can time out on slow networks with many links to establish + * [foundation#103](https://github.com/openziti/foundation/issues/103) - Fix config file env injection for lists # Release 0.15.1 -* What's New: No new functionality introduced. +* What's New: +No new functionality introduced. * Bug fixes - * [#129](https://github.com/openziti/ziti/issues/129) - minor issue - with `ziti-tunnel enroll` outputting the success message at ERROR - level - * [#131](https://github.com/openziti/ziti/issues/131) - issues w/ - creating identities, CAs and validating CAs - * [#133](https://github.com/openziti/ziti/issues/133) - fix service - lookup by name when creating service edge router policies - * [edge#191](https://github.com/openziti/edge/issues/191) - updating - self password via CLI would error with 404 not found - * [edge#231](https://github.com/openziti/edge/issues/231) - identities - missing enrollment expiresAt property - * [edge#237](https://github.com/openziti/edge/issues/237) - Policy - Advisor CLI is failing because common routers IsOnline value is - missing - * [edge#233](https://github.com/openziti/edge/issues/233) - REST API - Errors should be application/json if possible - * [edge#240](https://github.com/openziti/edge/issues/240) - listing - specs results in a 404 + * [#129](https://github.com/openziti/ziti/issues/129) - minor issue with `ziti-tunnel enroll` outputting the success message at ERROR level + * [#131](https://github.com/openziti/ziti/issues/131) - issues w/ creating identities, CAs and validating CAs + * [#133](https://github.com/openziti/ziti/issues/133) - fix service lookup by name when creating service edge router policies + * [edge#191](https://github.com/openziti/edge/issues/191) - updating self password via CLI would error with 404 not found + * [edge#231](https://github.com/openziti/edge/issues/231) - identities missing enrollment expiresAt property + * [edge#237](https://github.com/openziti/edge/issues/237) - Policy Advisor CLI is failing because common routers IsOnline value is missing + * [edge#233](https://github.com/openziti/edge/issues/233) - REST API Errors should be application/json if possible + * [edge#240](https://github.com/openziti/edge/issues/240) - listing specs results in a 404 # Release 0.15.0 - Ziti 0.15.0 includes the following: * The ability to invoke a database snapshot/backup @@ -674,68 +508,40 @@ Ziti 0.15.0 includes the following: * [Add snapshot db REST API](https://github.com/openziti/edge/issues/206) * Removal of deprecated code/migrations * [Remove postgres store code including migrations](https://github.com/openziti/edge/issues/195) - * Remove deprecated AppWan and Clusters - These have been replaced by - service policies and service edge router policies respectively + * Remove deprecated AppWan and Clusters - These have been replaced by service policies and service edge router policies respectively * Edge Routers are now a subtype of Fabric Routers - * see - [Unverified Edge Routers Cannot Be Used For Terminators](https://github.com/openziti/edge/issues/144) + * see [Unverified Edge Routers Cannot Be Used For Terminators](https://github.com/openziti/edge/issues/144) * Fabric services and routers now have names - * see - [Add name to service and router](https://github.com/openziti/fabric/issues/101) + * see [Add name to service and router](https://github.com/openziti/fabric/issues/101) * cosmetic changes to the ziti-enroller binary -* cosmetic changes to the ziti-tunnel binary when running the enroll - subcommand -* Memory leak remediation in the `PayloadBuffer` subsystem. Corrects - unbounded memory growth in `ziti-router`. +* cosmetic changes to the ziti-tunnel binary when running the enroll subcommand +* Memory leak remediation in the `PayloadBuffer` subsystem. Corrects unbounded memory growth in `ziti-router`. * Edge REST API Enhancements * [OpenApi 2.0/Swagger](https://github.com/openziti/edge/issues/108) * [Changes to support Fabric REST API](https://github.com/openziti/edge/issues/101) ## Removal of deprecated code - -The code to migrate a Ziti instance from pre-0.9 releases has been -removed. If you want to migrate from a pre-0.9 version you should first -update to 0.14.12, then to new versions. +The code to migrate a Ziti instance from pre-0.9 releases has been removed. If you want to migrate from a pre-0.9 version you should first update to 0.14.12, then to new versions. ## Database Snapshots - -Database snapshots can now be triggered in a variety of ways to cause -the creation of a dabase backup/snapshot. This can be done from the -ziti-fabric CLI, the ziti CLI and the REST API +Database snapshots can now be triggered in a variety of ways to cause the creation of a dabase backup/snapshot. This can be done from the ziti-fabric CLI, the ziti CLI and the REST API $ ziti-fabric snapshot-db $ ziti edge snapshot-db -The REST API is available by POSTing to `/edge/v1/database/snapshot`. -This ability is only available to administrators. +The REST API is available by POSTing to `/edge/v1/database/snapshot`. This ability is only available to administrators. -The snapshot will be a copy of the database file created within a bolt -transaction. The file name will have the data and time appended to it. -Snapshotting can be done at most once per minute. +The snapshot will be a copy of the database file created within a bolt transaction. The file name will have the data and time appended to it. Snapshotting can be done at most once per minute. ## Edge Routers/Fabric Router subtyping +Previously edge routers and fabric routers were closely related, but weren't actually the same entity. When an edge router was created, there was no corresponding fabric router until the edge router had been succesfully enrolled. -Previously edge routers and fabric routers were closely related, but -weren't actually the same entity. When an edge router was created, there -was no corresponding fabric router until the edge router had been -succesfully enrolled. +Now, edge routers are a type of fabric router. When an edge router is created, it will be visible as a fabric router with no fingerprint. This means that the corresponding router application won't be able to connect until enrollment is complete. -Now, edge routers are a type of fabric router. When an edge router is -created, it will be visible as a fabric router with no fingerprint. This -means that the corresponding router application won't be able to connect -until enrollment is complete. - -This simplifies some things, including allowing adding terminators to an -edge router before enrollment is complete. +This simplifies some things, including allowing adding terminators to an edge router before enrollment is complete. ## Fabric Router and Service Names - -Previously fabric routers and services only had ids, which were assumed -to be something user friendly. Now they also have a name. If no name is -provided, the id will be used for the name as well. This was done -primarily so that we have consistency between the fabric and the edge. -Now when viewing a service or router you can be sure to find the label -in the same place. +Previously fabric routers and services only had ids, which were assumed to be something user friendly. Now they also have a name. If no name is provided, the id will be used for the name as well. This was done primarily so that we have consistency between the fabric and the edge. Now when viewing a service or router you can be sure to find the label in the same place. ### Edge REST API Enhancements @@ -753,12 +559,12 @@ currently at version 0.24.0. The generated code introduces a few changes that may impact clients: -* `content-type` and `accept` headers are now meaningful and important -* enrollment endpoints can return JSON if JSON is explicitly set in - `accept` headers -* API input validation errors -* various entity ref bugs -* standardization of id properties +* `content-type` and `accept` headers are now meaningful and important +* enrollment endpoints can return JSON if JSON is explicitly set in +`accept` headers +* API input validation errors +* various entity ref bugs +* standardization of id properties #### Content Type / Accept Headers @@ -776,9 +582,9 @@ stating the that the content types are not acceptable. API input validation is now handled by the Open API libraries and go-swagger generated code. The error formats returned are largely the -same. However validations errors now all return the same outer error and -set the cause error properly. Prior to this change errors were handled -in an inconsistent manner. +same. However validations errors now all return the same outer +error and set the cause error properly. Prior to this change +errors were handled in an inconsistent manner. #### Entity Ref Bugs @@ -878,28 +684,25 @@ The Edge REST API has used UUID and its associated UUID text format for all ids. In 0.15 and forward, `shortIds` will be used and their associated format. -* make ids more human human friendly (logs, visual comparison) -* consolidate on ids that look similar between Fabric and Edge entities -* maintain a high degree of uniqueness comparable to UUIDs + * make ids more human human friendly (logs, visual comparison) + * consolidate on ids that look similar between Fabric and Edge entities + * maintain a high degree of uniqueness comparable to UUIDs All Ziti REST APIs will specify their ids as `strings`. If clients treat ids as opaque strings, then no comparability issues are expected. It is highly highly suggested that all clients follow this pattern. # Release 0.14.13 - Ziti 0.14.13 includes the following: * Ensure version information gets updated on non linux-amd64 builds # Release 0.14.12 - Ziti 0.14.12 includes the following: * Fix the logging prefix to be github.com/openziti # Release 0.14.11 - Ziti 0.14.11 includes the following: * [Ziti-Tunnel - Bind terminators are only created during startup](https://github.com/openziti/sdk-golang/issues/56) @@ -907,82 +710,61 @@ Ziti 0.14.11 includes the following: * [Simplify sequencer close logic](https://github.com/openziti/foundation/issues/81) * Misc Fixes * PEM decoding returns error when not able to decode - * Ziti enrolment capabilities now supports `plain/text`, - `application/x-pem-file`, and `application/json` response `accept` - and `content-types` + * Ziti enrolment capabilities now supports `plain/text`, `application/x-pem-file`, and `application/json` response `accept` and `content-types` * CLI Change - * ziti-tunnel has learned a new subcommand `enroll`. Usage is - identical to the existing `ziti-enroller` + * ziti-tunnel has learned a new subcommand `enroll`. Usage is identical to the existing `ziti-enroller` # Release 0.14.10 - Ziti 0.14.10 includes the following: * Doc updates # Release 0.14.9 - Ziti 0.14.9 includes the following: * [Move ziti edge controller commands to ziti edge](https://github.com/openziti/ziti/issues/108) - * Note: for now `ziti edge` and `ziti edge controller` will both have - edge controller related commands. `ziti edge controller` is - deprecated and will be removed in a future release. Please update - your scripts. + * Note: for now `ziti edge` and `ziti edge controller` will both have edge controller related commands. `ziti edge controller` is deprecated and will be removed in a future release. Please update your scripts. # Release 0.14.8 - Ziti 0.14.8 includes the following: * Doc updates # Release 0.14.7 - Ziti 0.14.7 includes the following: * [Add CLI support for updating terminators](https://github.com/openziti/ziti/issues/106) * [Add CLI support for managing identity service config overrides](https://github.com/openziti/ziti/issues/105) -NOTE: 0.14.6 was released with the same code as 0.14.5 due to CI -re-running +NOTE: 0.14.6 was released with the same code as 0.14.5 due to CI re-running # Release 0.14.5 - ## Theme - Ziti 0.14.5 includes the following: ### Features -* Ziti Edge API - * [CA Identity Name Format](https://github.com/openziti/edge/issues/147) -* [Remove sourceType from metrics](https://github.com/openziti/foundation/issues/68) -* Fix name of metric from `egress.tx.Msgrate` to `egress.tx.msgrate` + * Ziti Edge API + * [CA Identity Name Format](https://github.com/openziti/edge/issues/147) + * [Remove sourceType from metrics](https://github.com/openziti/foundation/issues/68) + * Fix name of metric from `egress.tx.Msgrate` to `egress.tx.msgrate` ## Ziti Edge API - ### CA Identity Name Format -A new field, `identityNameFormat`,has been added to all certificate -authority elements (`GET /cas`) that is available for all CRUD -operations. This field is optional and defaults to `[caName] - -[commonName]`. All existing CAs will also default to `[caName] - -[commonName]`. +A new field, `identityNameFormat`,has been added to all certificate authority elements (`GET /cas`) that is available for all CRUD operations. +This field is optional and defaults to `[caName] - [commonName]`. All existing CAs will also default to `[caName] - [commonName]`. -The field, `identityNameFormat`, may contain any text and optionally -include the following strings that are replaced with described values: +The field, `identityNameFormat`, may contain any text and optionally include the following strings that are +replaced with described values: * `[caId]` - the id of the CA used for auto enrollment * `[caName]` - the name of the CA used for auto enrollment * `[commonName]` - the common name supplied by the enrolling cert -* `[identityName]` - the name supplied during enrollment (if any, - defaults to `[identityId]` if the `name` field is blank during - enrollment) +* `[identityName]` - the name supplied during enrollment (if any, defaults to `[identityId]` if the `name` field is blank during enrollment) * `[identityId]` - id of the resulting identity -The default, `[caName] - [commonName]`, would result in the following -for a CA named "myCa" with an enrolling certificate with the common name -"laptop01": +The default, `[caName] - [commonName]`, would result in the following for a CA named "myCa" with an enrolling certificate with the common name "laptop01": ``` myCa - laptop01 @@ -990,63 +772,43 @@ myCa - laptop01 #### Identity Name Collisions -If an `identityNameFormat` results in a name collision during -enrollment, an incrementing number will be appended to the resulting -identity name. If this is not desired, define an `identityNameFormat` -that does not collide by using the above replacement strings and -ensuring the resulting values (i.e. from`commonName`) are unique. +If an `identityNameFormat` results in a name collision during enrollment, an incrementing number will be appended to the resulting identity name. If this is not desired, +define an `identityNameFormat` that does not collide by using the above replacement strings and ensuring the resulting values (i.e. from`commonName`) are unique. # Release 0.14.4 - ## Theme - Ziti 0.14.4 includes the following: ### Misc -* Migration to github.com/openziti + * Migration to github.com/openziti # Release 0.14.3 - ## Theme - Ziti 0.14.3 includes the following: ### Fixes - -* [orphaned enrollments/authenticators post identity PUT](https://github.com/openziti/edge/issues/158) + * [orphaned enrollments/authenticators post identity PUT](https://github.com/openziti/edge/issues/158) ## Orphaned Enrollments/Authenticators - -When updating an identity via PUT it was possible to clear the -authenticators and enrollments associated with the identity making it -impossible to authenticate as that identity or complete enrollment. This -release removes failed enrollments, associates orphaned authenticators -with their target identities, addresses the root cause, and adds -regression tests. +When updating an identity via PUT it was possible to clear the authenticators and enrollments associated with the identity making +it impossible to authenticate as that identity or complete enrollment. This release removes failed enrollments, associates orphaned +authenticators with their target identities, addresses the root cause, and adds regression tests. # Release 0.14.2 - ## Theme - Ziti 0.14.2 includes the following: -* CLI enhancements - * [can't create service policy with @ identity name](https://github.com/openziti/ziti/issues/93) - * [Add CLI commands to allow updating policies and role attributes](https://github.com/openziti/ziti/issues/94) - * [CLI: read config/config-type JSON from file](https://github.com/openziti/ziti/issues/90) -* [Not found errors for assigned/related ids do not say which resource was not found](https://github.com/openziti/edge/issues/148) -* Fixes to connection setup timing + * CLI enhancements + * [can't create service policy with @ identity name](https://github.com/openziti/ziti/issues/93) + * [Add CLI commands to allow updating policies and role attributes](https://github.com/openziti/ziti/issues/94) + * [CLI: read config/config-type JSON from file](https://github.com/openziti/ziti/issues/90) + * [Not found errors for assigned/related ids do not say which resource was not found](https://github.com/openziti/edge/issues/148) + * Fixes to connection setup timing ## CLI Updates - ### Names in Policy Roles - -Polices can now be created from the CLI using @name. This was previously -supported natively in the REST APIs, however it was stripped out for -consistency. The CLI now supports this by looking up names and replacing -them with IDS when they are entered. When policies are listed they will -show names instead of IDs now as well. +Polices can now be created from the CLI using @name. This was previously supported natively in the REST APIs, however it was stripped out for consistency. The CLI now supports this by looking up names and replacing them with IDS when they are entered. When policies are listed they will show names instead of IDs now as well. ```shell script $ ziti edge controller create service-policy test-names Dial -i '#all' -s '@ssh' @@ -1059,10 +821,7 @@ results: 1-1 of 1 ``` ### New Update Commands - -There are now update commands which allow updating role attributes on -edge-routers, identities and services and roles on all three policy -types. +There are now update commands which allow updating role attributes on edge-routers, identities and services and roles on all three policy types. All the update commands also allow changing the entity and policy names. @@ -1072,46 +831,33 @@ $ ziti edge controller update service-policy sales-na -s o365,mattermost ``` ### Breaking Change to CLI commands - The shorthands for some policy flags have changed -* The shorthand for create edge-router-policy `--edge-router-roles` is - now `-e`. It was `-r` -* The shorthand for create service-edge-router-policy - `--edge-router-roles` is now `-e`. It was `-r` -* The shorthand for create service-policy `--service-roles` is now `-s`. - It was `-r` + * The shorthand for create edge-router-policy `--edge-router-roles` is now `-e`. It was `-r` + * The shorthand for create service-edge-router-policy `--edge-router-roles` is now `-e`. It was `-r` + * The shorthand for create service-policy `--service-roles` is now `-s`. It was `-r` # Release 0.14.1 - ## Theme - Ziti 0.14.1 includes the following: ### Features - -* [Enable graceful shutdown of bound connections](https://github.com/openziti/edge/issues/149) + * [Enable graceful shutdown of bound connections](https://github.com/openziti/edge/issues/149) ### Fixes - -* [Enrollments w/ 0 length bodies cause enrollment errors](https://github.com/openziti/edge/issues/150) -* Fixed race condition in end-to-end encryption setup -* Xt fixes - * Fixed strategies missing session ended events - * Fixed costed terminator sorting - * Fixed race condition where terminators could be selected right after - delete because they would have default cost. - * Expanded space between precedence levels to ensure terminator static - cost doesn't allow total costs to jump precedence boundary - * Fixed type error in failure cost tracker -* Logging cleanup - many log statements that were error or info have - been dropped to debug -* ziti-probe can now handle partial configs + * [Enrollments w/ 0 length bodies cause enrollment errors](https://github.com/openziti/edge/issues/150) + * Fixed race condition in end-to-end encryption setup + * Xt fixes + * Fixed strategies missing session ended events + * Fixed costed terminator sorting + * Fixed race condition where terminators could be selected right after delete because they would have default cost. + * Expanded space between precedence levels to ensure terminator static cost doesn't allow total costs to jump precedence boundary + * Fixed type error in failure cost tracker + * Logging cleanup - many log statements that were error or info have been dropped to debug + * ziti-probe can now handle partial configs ## Graceful SDK Hosted Application Shutdown - -The Golang SDK now returns an edge.Listener instead of a net.Listener -from Listen +The Golang SDK now returns an edge.Listener instead of a net.Listener from Listen ```go type Listener interface { @@ -1122,111 +868,57 @@ type Listener interface { } ``` -This allows clients to set their precedence to `failed` when shutting -down. This will allow them to gracefully finishing any outstanding -requests while ensuring that no new requests will be routed to this -application. This should allow for applications to do round-robin -upgrades without service interruption to clients. It also allows clients -to influence costs on the fly based on knowledge available to the -application. +This allows clients to set their precedence to `failed` when shutting down. This will allow them to gracefully finishing any outstanding requests while ensuring that no new requests will be routed to this application. This should allow for applications to do round-robin upgrades without service interruption to clients. It also allows clients to influence costs on the fly based on knowledge available to the application. -Support is currently limited to the Golang SDK, support in other SDKs -will be forthcoming as it is prioritized. +Support is currently limited to the Golang SDK, support in other SDKs will be forthcoming as it is prioritized. # Release 0.14.0 - ## Theme - Ziti 0.14.0 includes the following: ### Features - -* The first full implementation of high availability (HA) and horizontal - scale (HS) services + * The first full implementation of high availability (HA) and horizontal scale (HS) services ### Fixes - -* [When using index scanner, wrong count is returned when using skip](https://github.com/openziti/foundation/issues/62) -* fabric now includes migration to extract terminators from services -* more errors which were returning 500 now return appropriate 404 or 400 - field errors -* terminators are now validated when routers connect, and invalid ones - can be removed -* a potential race condition in UDP connection last time has been fixed - and UDP connection logging has been tidied -* Terminator precedence may now be specified in the golang SDK in the - listen options when binding a service + * [When using index scanner, wrong count is returned when using skip](https://github.com/openziti/foundation/issues/62) + * fabric now includes migration to extract terminators from services + * more errors which were returning 500 now return appropriate 404 or 400 field errors + * terminators are now validated when routers connect, and invalid ones can be removed + * a potential race condition in UDP connection last time has been fixed and UDP connection logging has been tidied + * Terminator precedence may now be specified in the golang SDK in the listen options when binding a service ## HA/HS - -Ziti 0.12 extracted terminators from services. Services could have -multiple terminators but only the first one would get used. Service have -a `terminatorStrategy` field which was previously unused. Now the -terminatorStrategy will determine how Ziti picks from multiple -terminators to enable either HA or HS behavior. +Ziti 0.12 extracted terminators from services. Services could have multiple terminators but only the first one would get used. Service have a `terminatorStrategy` field which was previously unused. Now the terminatorStrategy will determine how Ziti picks from multiple terminators to enable either HA or HS behavior. ### Xt +The fabric now includes a new framework called Xt (eXtensible Terminators) which allows defining terminator strategies and defines how terminator strategies and external components integrate with smart routing. The general flow of terminator selection goes as follows: -The fabric now includes a new framework called Xt (eXtensible -Terminators) which allows defining terminator strategies and defines how -terminator strategies and external components integrate with smart -routing. The general flow of terminator selection goes as follows: + 1. A client requests a new session for a service + 1. Smart routing finds all the active terminators for the session (active meaning the terminator's router is connected) + 1. Smart routing calculates a cost for each terminator then hands the service's terminator strategy a list of terminators and their costs ranked from lowest to highest + 1. The strategy returns the terminator that should be used + 1. A new session is created using that path. -1. A client requests a new session for a service -2. Smart routing finds all the active terminators for the session - (active meaning the terminator's router is connected) -3. Smart routing calculates a cost for each terminator then hands the - service's terminator strategy a list of terminators and their costs - ranked from lowest to highest -4. The strategy returns the terminator that should be used -5. A new session is created using that path. - -Strategies will often work by adjusting terminator costs. The selection -algorithm the simply returns the lowest cost option presented by smart -routing. +Strategies will often work by adjusting terminator costs. The selection algorithm the simply returns the lowest cost option presented by smart routing. #### Costs - -There are a number of elements which feed the smart routing cost -algorithm. +There are a number of elements which feed the smart routing cost algorithm. ##### Route Cost - -The cost of the route from the initiating route to the terminator router -will be included in the terminator cost. This cost may be influenced by -things such as link latencies and user determined link costs. +The cost of the route from the initiating route to the terminator router will be included in the terminator cost. This cost may be influenced by things such as link latencies and user determined link costs. ##### Static Cost - -Each terminator has a static cost which can be set or updated when the -terminator is created. SDK applications can set the terminator cost when -they invoke the Listen operation. +Each terminator has a static cost which can be set or updated when the terminator is created. SDK applications can set the terminator cost when they invoke the Listen operation. #### Precedence +Each terminator has a precedence. There are three precedence levels: `required`, `default` and `failed`. -Each terminator has a precedence. There are three precedence levels: -`required`, `default` and `failed`. - -Smart routing will always rank terminators with higher precedence levels -higher than terminators with lower precedence levers. So required -terminators will always be first, default second and failed third. -Precedence levels can be used to implement HA. The primary will be -marked as required and the secondary as default. When the primary is -determined to be down, either by some internal or external set of -heuristics, it will be marked as Failed and new sessions will go to the -secondary. When the primary recovers it can be bumped back up to -Required. +Smart routing will always rank terminators with higher precedence levels higher than terminators with lower precedence levers. So required terminators will always be first, default second and failed third. Precedence levels can be used to implement HA. The primary will be marked as required and the secondary as default. When the primary is determined to be down, either by some internal or external set of heuristics, it will be marked as Failed and new sessions will go to the secondary. When the primary recovers it can be bumped back up to Required. ##### Dynamic Cost - -Each terminator also has a dynamic cost that will move a terminator up -and down relative to its precedence. This cost can be driven by -stratagies or by external components. A strategy might use number of -active of open sessions or dial successes and failures to drive the -cost. +Each terminator also has a dynamic cost that will move a terminator up and down relative to its precedence. This cost can be driven by stratagies or by external components. A strategy might use number of active of open sessions or dial successes and failures to drive the cost. ##### Cost API - Costs can be set via the Costs API in Xt: ```go @@ -1244,15 +936,9 @@ type Costs interface { } ``` -Each terminator has an associated precedence and dynamic cost. This can -be reduced to a single cost. The cost algorithm ensures terminators at -difference precedence levels do not overlap. So a terminator which is -marked failed, with dynamic cost 0, will always have a higher calculated -cost than a terminator with default precedence and maximum value for -dynamic cost. +Each terminator has an associated precedence and dynamic cost. This can be reduced to a single cost. The cost algorithm ensures terminators at difference precedence levels do not overlap. So a terminator which is marked failed, with dynamic cost 0, will always have a higher calculated cost than a terminator with default precedence and maximum value for dynamic cost. #### Strategies - Strategies must implement the following interface: ```go @@ -1265,50 +951,28 @@ type Strategy interface { } ``` -The `Select` method will be called by smart routing to pick terminators -for a session. The session can react to terminator changes, such when a -terminator is added to or removed from a service. The service is also -notified via `NotifyEvent` whenever a session dial succeeds or fails and -when a session for the service is ended. +The `Select` method will be called by smart routing to pick terminators for a session. The session can react to terminator changes, such when a terminator is added to or removed from a service. The service is also notified via `NotifyEvent` whenever a session dial succeeds or fails and when a session for the service is ended. The fabric currently provides four strategy implementions. ##### `smartrouting` +This is the default strategy. It always uses the lowest cost terminator. It drives costs as follows: -This is the default strategy. It always uses the lowest cost terminator. -It drives costs as follows: - -* Cost is proportional to number of open sessions -* Dial failures drive the cost up -* Dial successes drive the cost down, but only as much as they were - previously driven up by failures + * Cost is proportional to number of open sessions + * Dial failures drive the cost up + * Dial successes drive the cost down, but only as much as they were previously driven up by failures ##### `weighted` - -This strategy drives costs in the same way as the `smartrouting` -strategy. However instead of always picking the lowest cost terminator -it does a weighted random selection across all terminators of the -highest precedence. If a terminator has double the cost of another -terminator it should get picked approximately half as often. +This strategy drives costs in the same way as the `smartrouting` strategy. However instead of always picking the lowest cost terminator it does a weighted random selection across all terminators of the highest precedence. If a terminator has double the cost of another terminator it should get picked approximately half as often. ##### `random` - -This strategy does not change terminator weights. It does simple random -selection across all terminators of the highest precedence. +This strategy does not change terminator weights. It does simple random selection across all terminators of the highest precedence. ##### `ha` - -This strategy assumes that one terminator will have `required` -precedence and there will be a secondary terminator with `default` -precedence. If three consecutive dials to the highest ranked terminator -fail in a row it will be marked as failed. This will allow the secondary -to take over. If the primary recovers it can be marked as required again -via the APIs. +This strategy assumes that one terminator will have `required` precedence and there will be a secondary terminator with `default` precedence. If three consecutive dials to the highest ranked terminator fail in a row it will be marked as failed. This will allow the secondary to take over. If the primary recovers it can be marked as required again via the APIs. ### API Changes - -The terminator endpoint now supports setting the static terminator cost -and terminator precedence. +The terminator endpoint now supports setting the static terminator cost and terminator precedence. * Endpoint: /terminators * Operations: PUT/POST/PATCH now take @@ -1318,16 +982,14 @@ and terminator precedence. # Release 0.13.9 - ## Theme - Ziti 0.13.9 includes the following: -* Adds paging information to cli commands + * Adds paging information to cli commands -Example + Example -```shell script + ```shell script $ ec list api-sessions "true sort by token skip 2 limit 3" id: 37dd1463-e4e7-40de-9a63-f75486430361 token: 0b392a2f-47f8-4561-af63-93807ce70d93 identity: Default Admin id: 6fb5b488-debf-4212-9670-f250e31b3d4f token: 15ae6b00-f123-458c-a121-5cf91983a2c2 identity: Default Admin @@ -1336,27 +998,21 @@ results: 3-5 of 23 ``` # Release 0.13.8 - ## Theme - Ziti 0.13.8 includes the following: -* Fixes Ziti Edge Router ignoring connect options for SDK listener + * Fixes Ziti Edge Router ignoring connect options for SDK listener # Release 0.13.7 - ## Theme - Ziti 0.13.7 includes the following: -* Improvements to sdk availability when hosting services -* Various bug fixes to related to terminators and transit routers + * Improvements to sdk availability when hosting services + * Various bug fixes to related to terminators and transit routers ## SDK Resilience - -The golang sdk now has a new listen method on context, which takes -listen options. +The golang sdk now has a new listen method on context, which takes listen options. ```go type Context interface { @@ -1374,51 +1030,45 @@ type ListenOptions struct { The SDK now supports the following: -* Configuring connect timeout -* Allow establishing new session, if existing session goes away -* Allow establishing new API session, existing API session goes away -* If client doesn't have access to service, it should stop listening and - return an error -* If client can't establish or re-establish API session, it should stop - listening and return error + * Configuring connect timeout + * Allow establishing new session, if existing session goes away + * Allow establishing new API session, existing API session goes away + * If client doesn't have access to service, it should stop listening and return an error + * If client can't establish or re-establish API session, it should stop listening and return error -If paired with a ziti controller/routers which support terminator -strategies for HA/HS, the following features are also supported: +If paired with a ziti controller/routers which support terminator strategies for HA/HS, the following features are also supported: -* Handle listen to multiple edge routers. -* Allow configuring max number of connections to edge routers + * Handle listen to multiple edge routers. + * Allow configuring max number of connections to edge routers # Release 0.13.6 - ## Theme -* Fixes the `-n` flag being ignored for `ziti-enroll` + * Fixes the `-n` flag being ignored for `ziti-enroll` # Release 0.13.5 - ## Theme -* Adds ability to verify 3rd party CAs via the CLI in the Ziti Edge API + * Adds ability to verify 3rd party CAs via the CLI in the Ziti Edge API ## Ziti CLI Verify CA Support Previous to this version the CLI was only capable of creating, editing, -and deleting CAs. For a CA to be useful it must be verified. If not, it -cannot be used for enrollment or authentication. The verification +and deleting CAs. For a CA to be useful it must be verified. If not, +it cannot be used for enrollment or authentication. The verification process requires HTTP requests and the creation of a signed verification certificate. The Ziti CLI can now perform all or part of this process. ### Example: No Existing Verification Cert - -This example is useful for situations where access to the CA's private -key is possible. This command will fetch the CA's verification token -from the Ziti Edge API, create a short lived (5 min) verification +This example is useful for situations where access to the CA's +private key is possible. This command will fetch the CA's verification +token from the Ziti Edge API, create a short lived (5 min) verification certificate, and use it to verify the CA. This example includes the `--password` flag which is optional. If the -`--password` flag is not included and the private key is encrypted the -user will be prompted for the password. +`--password` flag is not included and the private key is encrypted +the user will be prompted for the password. - `myCa` is the name or id of a CA that has already been created. - `ca.cert.pem` the CA's public x509 PEM formatted certificate @@ -1428,23 +1078,19 @@ user will be prompted for the password. $ ziti edge controller verify ca myCa --cacert ca.cert.pem --cakey ca.key.pem --password 1234 ``` -### Example: Existing Verification Certificate - +### Example: Existing Verification Certificate This example is useful for situations where access to the signing CA's private key is not possible (off-site, coldstore, etc.). This example assumes that the appropriate `openssl` commands have been run to generate the verification script. - `myCa` is the name or id of a CA that has already been created. -- `verificationCert.pem` is a PEM encoded x509 certificate that has the - common name set to the verification token of `myCa` - +- `verificationCert.pem` is a PEM encoded x509 certificate that has the common name set to the verification token of `myCa` ``` $ ziti edge controller verify ca myCa --cert verificationCert.pem ``` ### Command help: - ``` $ ziti edge controller verify ca --help @@ -1462,38 +1108,25 @@ Flags: ``` # Release 0.13.4 - ## Theme - -* Updates `quickstart` scripts + * Updates `quickstart` scripts # Release 0.13.3 - ## Theme - Ziti 0.13.3 includes the following: -* Adds connect parameters for incoming channel2 connections (control, - management, and SDK connections) - * The options have internal defaults are needed only when connections + * Adds connect parameters for incoming channel2 connections (control, management, and SDK connections) + * The options have internal defaults are needed only when connections ## Connection Parameters -A new set of options have been introduced for channel2 backed listeners. -Channel2 is a library used to establish message based connections -between a channel2 client and server. Most importantly this is used for -control and management connections in the `ziti-controller` and for the -SDK connections accepted in `ziti-router`. Setting these values to -invalid values will result in errors during startup of the -`ziti-controller` and `ziti-router` +A new set of options have been introduced for channel2 backed listeners. Channel2 is a library used to establish message based connections between a channel2 client and server. +Most importantly this is used for control and management connections in the `ziti-controller` and for the SDK connections accepted in `ziti-router`. Setting these values to +invalid values will result in errors during startup of the `ziti-controller` and `ziti-router` -* `maxQueuedConnects` - set the maximum number of connect requests that - are buffered and waiting to be acknowledged (1 to 5000, default 1000) -* `maxOutstandingConnects` - the maximum number of connects that have - begun hello synchronization (1 to 1000, default 16) -* `connectTimeoutMs` - the number of milliseconds to wait before a hello - synchronization fails and closes the connection (30ms to 60000ms, - default: 1000ms) + * `maxQueuedConnects` - set the maximum number of connect requests that are buffered and waiting to be acknowledged (1 to 5000, default 1000) + * `maxOutstandingConnects` - the maximum number of connects that have begun hello synchronization (1 to 1000, default 16) + * `connectTimeoutMs` - the number of milliseconds to wait before a hello synchronization fails and closes the connection (30ms to 60000ms, default: 1000ms) Example: `ziti-controller` configuration file: @@ -1532,38 +1165,27 @@ listeners: # Release 0.13 - ## Theme - Ziti 0.13 includes the following: -* Changes to make working with policies easier, including - * New APIs to list existing role attributes used by edge routers, - identities and services - * New APIs to list entities related by polices (such as listing edge - routers available to a service via service edge router policies) - * Enhancements to the LIST APIs for edge routers, identities and - services which allow one to filter by roles - * A policy advisor API, which helps analyze policies and current - system state to figure out if an identity should be able to use a - service and if not, why not -* CA Auto Enrollment now allows identities to inherit role attributes - from the validating CA - * New `identityRole` attributes added to CA entities -* New APIs to list and manage Transit Routers -* Transit Routers now support enrolment via `ziti-router enroll` -* Embedded Swagger/OpenAPI 2.0 endpoint -* A small set of APIs accepted id or name. These have been changed to - accept only id -* Fabric enhancements - * New Xlink framework encapsulating the router capabilities for - creating overlay mesh links. - * Adjustable Xgress MTU size. -* All Ziti Go projects are now being built with Go 1.14 - * See here for change to Go in 1.14 - https://golang.org/doc/go1.14 + * Changes to make working with policies easier, including + * New APIs to list existing role attributes used by edge routers, identities and services + * New APIs to list entities related by polices (such as listing edge routers available to a service via service edge router policies) + * Enhancements to the LIST APIs for edge routers, identities and services which allow one to filter by roles + * A policy advisor API, which helps analyze policies and current system state to figure out if an identity should be able to use a service and if not, why not + * CA Auto Enrollment now allows identities to inherit role attributes from the validating CA + * New `identityRole` attributes added to CA entities + * New APIs to list and manage Transit Routers + * Transit Routers now support enrolment via `ziti-router enroll` + * Embedded Swagger/OpenAPI 2.0 endpoint + * A small set of APIs accepted id or name. These have been changed to accept only id + * Fabric enhancements + * New Xlink framework encapsulating the router capabilities for creating overlay mesh links. + * Adjustable Xgress MTU size. + * All Ziti Go projects are now being built with Go 1.14 + * See here for change to Go in 1.14 - https://golang.org/doc/go1.14 ## Making Policies More User Friendly - ### Listing Role Attributes in Use There are three new endpoints for listing role attributes in use. @@ -1610,9 +1232,7 @@ Example output: } ## Listing Entities Related by Policies - -This adds operations to the `/services`, `/identities` and -`/edge-routers` endpoints. +This adds operations to the `/services`, `/identities` and `/edge-routers` endpoints. * Endpoint: /edge-routers * New operations @@ -1630,34 +1250,28 @@ This adds operations to the `/services`, `/identities` and * Query related edge routers: GET /services//edge-routers?filter= ## Filtering Entity Lists by Roles - -When building UIs it may be useful to list entities which have role -attributes by role filters, to see what policy changes may look like. +When building UIs it may be useful to list entities which have role attributes by role filters, to see what policy changes may look like. * Endpoint: /edge-routers * Query: GET /edge-routers now supports two new query paramters * roleFilter. May be specified more than one. Should be an id or role specifier (ex: @38683097-2412-4335-b056-ae8747314dd3 or #sales) * roleSemantic. Optional. Defaults to AllOf if not specified. Indicates which semantic to use when evaluating role matches - + * Endpoint: /identities * Query: GET /identities now supports two new query paramters * roleFilter. May be specified more than one. Should be an id or role specifier (ex: @38683097-2412-4335-b056-ae8747314dd3 or #sales) * roleSemantic. Optional. Defaults to AllOf if not specified. Indicates which semantic to use when evaluating role matches - + * Endpoint: /services * Query: GET /services now supports two new query paramters * roleFilter. May be specified more than one. Should be an id or role specifier (ex: @38683097-2412-4335-b056-ae8747314dd3 or #sales) * roleSemantic. Optional. Defaults to AllOf if not specified. Indicates which semantic to use when evaluating role matches -Note that a roleFilter should have one role specifier (like `@some-id` -or `#sales`). If you wish to specify multiple, provide multiple role -filters. +Note that a roleFilter should have one role specifier (like `@some-id` or `#sales`). If you wish to specify multiple, provide multiple role filters. /edge-routers?roleFilter=#sales&roleFilter=#us -These are also supported from the CLI when listing edge routers, -identities and services using the --role-filters and --role-semantic -flags. +These are also supported from the CLI when listing edge routers, identities and services using the --role-filters and --role-semantic flags. Example: @@ -1672,7 +1286,7 @@ Example: id: cd1ae16e-5015-49ad-9864-3ca0f5814091 name: ssh terminator strategy: role attributes: {} id: dcc9922a-c681-41bf-8079-be2163509702 name: mattermost terminator strategy: role attributes: {} id: e9673c77-7463-4517-a642-641ef35855cf name: foo terminator strategy: role attributes: ["one","three","two"] - + $ ec list services --role-filters '#three' id: 38683097-2412-4335-b056-ae8747314dd3 name: quux terminator strategy: role attributes: ["blop","sales","three"] id: ad95ec7d-6c05-42b6-b278-2a98a7e502df name: bar terminator strategy: role attributes: ["four","three","two"] @@ -1681,13 +1295,13 @@ Example: $ ec list services --role-filters '#three','#two' id: ad95ec7d-6c05-42b6-b278-2a98a7e502df name: bar terminator strategy: role attributes: ["four","three","two"] id: e9673c77-7463-4517-a642-641ef35855cf name: foo terminator strategy: role attributes: ["one","three","two"] - + $ ec list services --role-filters '#three','#sales' --role-semantic AnyOf id: 38683097-2412-4335-b056-ae8747314dd3 name: quux terminator strategy: role attributes: ["blop","sales","three"] id: a949cf80-b11b-4cce-bbb7-d2e4767878a6 name: baz terminator strategy: role attributes: ["development","sales","support"] id: ad95ec7d-6c05-42b6-b278-2a98a7e502df name: bar terminator strategy: role attributes: ["four","three","two"] id: e9673c77-7463-4517-a642-641ef35855cf name: foo terminator strategy: role attributes: ["one","three","two"] - + $ ec list services --role-filters '#three''#sales','@4e33859b-070d-42b1-8b40-4adf973f680c' --role-semantic AnyOf id: 38683097-2412-4335-b056-ae8747314dd3 name: quux terminator strategy: role attributes: ["blop","sales","three"] id: 4e33859b-070d-42b1-8b40-4adf973f680c name: simple terminator strategy: role attributes: {} @@ -1696,23 +1310,20 @@ Example: id: e9673c77-7463-4517-a642-641ef35855cf name: foo terminator strategy: role attributes: ["one","three","two"] ## Policy Advisor - This adds a new operation to the /identities endpoint * Endpoint: /identities * New operations * Query related identities: GET /identities//policy-advice/ -This will return the following information about the identity and -service: +This will return the following information about the identity and service: -* If the identity can dial the service -* If the identity can bind the service -* How many edge routers the identity has access to -* How many edge routers the service can be accessed through -* Which edge routers the identity and service have in common (if this is - none, then the service can't be accessed by the identity) -* Which of the common edge routers are on-line + * If the identity can dial the service + * If the identity can bind the service + * How many edge routers the identity has access to + * How many edge routers the service can be accessed through + * Which edge routers the identity and service have in common (if this is none, then the service can't be accessed by the identity) + * Which of the common edge routers are on-line Example result: @@ -1799,36 +1410,36 @@ Some example output of the CLI: $ ec policy-advisor identities -q ERROR: mlapin-laptop (1) -> ssh-backup (0) Common Routers: (0/0) Dial: Y Bind: N - Service has no edge routers assigned. Adjust service edge router policies. - + ERROR: mlapin-laptop (1) -> ssh (2) Common Routers: (0/0) Dial: Y Bind: N - Identity and services have no edge routers in common. Adjust edge router policies and/or service edge router policies. - + ERROR: ndaniels-laptop (1) -> ssh-backup (0) Common Routers: (0/0) Dial: Y Bind: N - Service has no edge routers assigned. Adjust service edge router policies. - + ERROR: ndaniels-laptop (1) -> ssh (2) Common Routers: (0/1) Dial: Y Bind: N - Common edge routers are all off-line. Bring routers back on-line or adjust edge router policies and/or service edge router policies to increase common router pool. - + ERROR: Default Admin - Identity does not have access to any services. Adjust service policies. - + ERROR: jsmith-laptop (2) -> ssh-backup (0) Common Routers: (0/0) Dial: Y Bind: N - Service has no edge routers assigned. Adjust service edge router policies. - + OKAY : jsmith-laptop (2) -> ssh (2) Common Routers: (1/2) Dial: Y Bind: N - + ERROR: ssh-host (2) -> ssh-backup (0) Common Routers: (0/0) Dial: N Bind: Y - Service has no edge routers assigned. Adjust service edge router policies. - + OKAY : ssh-host (2) -> ssh (2) Common Routers: (1/2) Dial: N Bind: Y - + ERROR: aortega-laptop - Identity does not have access to any services. Adjust service policies. - + ERROR: djones-laptop (0) -> ssh-backup (0) Common Routers: (0/0) Dial: Y Bind: N - Identity has no edge routers assigned. Adjust edge router policies. - Service has no edge routers assigned. Adjust service edge router policies. - + ERROR: djones-laptop (0) -> ssh (2) Common Routers: (0/0) Dial: Y Bind: N - Identity has no edge routers assigned. Adjust edge router policies. @@ -1842,23 +1453,19 @@ Some example output of the CLI: ## CA Auto Enrollment Identity Attributes -Identities that are enrolled via a CA can now inherit a static list of -identity role attributes. The normal create, update, patch requests -supported by the CA entities now allow the role attributes to be -specified. CA identity role attribute changes do no propagate to -identities that have completed enrollment. +Identities that are enrolled via a CA can now inherit a static list of identity role attributes. The normal create, +update, patch requests supported by the CA entities now allow the role attributes to be specified. CA identity role +attribute changes do no propagate to identities that have completed enrollment. -This feature allows a simple degree of automation for identities that -are auto-provisioning through a third party CA. +This feature allows a simple degree of automation for identities that are auto-provisioning through a third party CA. -* `identityRoles` added to `/ca` endpoints for normal CRUD operations -* `identityRoles` from a CA entity are point-in-time copies + * `identityRoles` added to `/ca` endpoints for normal CRUD operations + * `identityRoles` from a CA entity are point-in-time copies ## New APIs to list and manage Transit Routers -The endpoint`/transit-routers` has been added to create and manage -Transit Routers. Transit Routers do not handle incoming Ziti Edge SDK -connections. +The endpoint`/transit-routers` has been added to create and manage Transit Routers. Transit Routers do not handle incoming Ziti +Edge SDK connections. * Endpoint: /transit-routers * Supported operations @@ -1880,7 +1487,6 @@ connections. * enrollmentExpiresAt - Type date-time - the date and time the enrollment expires at (matches JWT expiration time, nil post enrollment) Example list output: - ```json { "meta": { @@ -1938,13 +1544,11 @@ Example list output: ] } ``` - ## Transit Routers now support enrolment via `ziti-router enroll` -Transit Routers now enroll using the same command: `ziti-router enroll - -j `. During the enrollment process, the CSR properties -used will be taken from `edge.csr`. If `edge.csr` does not exist `csr` -will be utilized. If both are missing an error will occur. +Transit Routers now enroll using the same command: `ziti-router enroll -j `. During the enrollment process, +the CSR properties used will be taken from `edge.csr`. If `edge.csr` does not exist `csr` will be utilized. If both are +missing an error will occur. Example router configuration: @@ -2041,12 +1645,10 @@ listeners: ## Embedded Swagger/OpenAPI 2.0 endpoint -The endpoint`/specs` has been added to retrieve API specifications from -the Ziti Controller. The specifications are specific to the version of -the controller deployed. +The endpoint`/specs` has been added to retrieve API specifications from the Ziti Controller. The specifications +are specific to the version of the controller deployed. -The main endpoint to retrieve the Swagger/Open API 2.0 specification is: -`/specs/swagger/spec` +The main endpoint to retrieve the Swagger/Open API 2.0 specification is: `/specs/swagger/spec` * Endpoint: /specs * Supported operations @@ -2059,26 +1661,17 @@ The main endpoint to retrieve the Swagger/Open API 2.0 specification is: ## APIs now only accept ID, not ID or Name + 1. Some APIs related to configurations accepted config names or ids. These now only accept name. + 1. Policies would accept entity references with names as well as ids. So you could use `@ssh`, for example when referencing the ssh service. These now also only accept ID -1. Some APIs related to configurations accepted config names or ids. - These now only accept name. -2. Policies would accept entity references with names as well as ids. So - you could use `@ssh`, for example when referencing the ssh service. - These now also only accept ID - -In general allowing both values adds complexity to the server side code. -Consuming code, such as user interfaces or the ziti cli, can do the name -to id translation just as easily. +In general allowing both values adds complexity to the server side code. Consuming code, such as user interfaces or the ziti cli, can do the name to id translation just as easily. ## Fabric Enhancements - ### Xlink Framework -The new Xlink framework **requires** that the router configuration file -is updated to `v: 3`. +The new Xlink framework **requires** that the router configuration file is updated to `v: 3`. -The `link` section of the router configuration is now structured like -this: +The `link` section of the router configuration is now structured like this: ``` link: @@ -2092,22 +1685,15 @@ link: - binding: transport ``` -The `link/listeners/bind` address replaces the old `link/listener` -address, and the `link/listeners/advertise` address replaces the old -`link/advertise` address. +The `link/listeners/bind` address replaces the old `link/listener` address, and the `link/listeners/advertise` address replaces the old `link/advertise` address. -**The router configuration MUST be updated to include `link/dialers` -section with a `transport` binding (as in the above example) to include -support for outbound link dialing.** +**The router configuration MUST be updated to include `link/dialers` section with a `transport` binding (as in the above example) to include support for outbound link dialing.** -Subsequent releases will include support for multiple Xlink listeners -and dialers. 0.13 supports only a single listener and dialer to be -configured. +Subsequent releases will include support for multiple Xlink listeners and dialers. 0.13 supports only a single listener and dialer to be configured. ### Xgress MTU -The Xgress listeners and dialers now support an `mtu` option in their -`options` stanza: +The Xgress listeners and dialers now support an `mtu` option in their `options` stanza: ``` listeners: @@ -2123,48 +1709,29 @@ dialers: options: mtu: 512 ``` - -This MTU controls the maximum size of the `Payload` packet sent across -the data plane of the overlay. +This MTU controls the maximum size of the `Payload` packet sent across the data plane of the overlay. # Release 0.12 - ## Theme - Ziti 0.12 includes the following: -* Terminators have been extracted from services - * Terminators define where a service terminates. Previously each - service had exactly one terminator. Now services can have 0 to N - terminators. -* List APIs now support inline paging -* Association APIs now support filtering, paging and querying -* The bolt datastore creates a backup of the datastore file before - attempting a schema/data migration -* Fabric and edge code are now much more closely aligned at the - persistence and model layers -* Some deprecated endpoints are now being removed + * Terminators have been extracted from services + * Terminators define where a service terminates. Previously each service had exactly one terminator. Now services can have 0 to N terminators. + * List APIs now support inline paging + * Association APIs now support filtering, paging and querying + * The bolt datastore creates a backup of the datastore file before attempting a schema/data migration + * Fabric and edge code are now much more closely aligned at the persistence and model layers + * Some deprecated endpoints are now being removed ## Terminators - -See -https://github.com/openziti/fabric/wiki/Pluggable-Service-Terminators -for a discussion of what service terminators are, the motivation for -extracting them from services and the design for how they will work. +See https://github.com/openziti/fabric/wiki/Pluggable-Service-Terminators for a discussion of what service terminators are, the motivation for extracting them from services and the design for how they will work. This release includes the following: -* Terminators extracted from service as separate entities -* When SDK applications bind and unbind, the controller now dynamically - adds/removes terminators as appropriate + * Terminators extracted from service as separate entities + * When SDK applications bind and unbind, the controller now dynamically adds/removes terminators as appropriate -This release does not yet include a terminator strategy API. Strategies -can be specified per service, but if a service has multiple terminators -the first one will be used. The terminator strategy API along with some -implementations will be added in a follow-up release. This release also -does not include strategy inputs on terminators as discussed in the -above design document. If strategy inputs end up being useful, they may -be added in the furure. +This release does not yet include a terminator strategy API. Strategies can be specified per service, but if a service has multiple terminators the first one will be used. The terminator strategy API along with some implementations will be added in a follow-up release. This release also does not include strategy inputs on terminators as discussed in the above design document. If strategy inputs end up being useful, they may be added in the furure. ### Terminator related API changes @@ -2196,35 +1763,28 @@ The service endpoint has changes as well: * The following property has been added * terminatorStrategy - type: string, optional. The terminator strategy to use. Currently unused. -The fabric service definition has also changed (visible from -ziti-fabric). +The fabric service definition has also changed (visible from ziti-fabric). -* The following properties have been removed - * `binding` - * `egressRouter` - * `endpointAddress` -* The following property has been added - * `terminatorStrategy` + * The following properties have been removed + * `binding` + * `egressRouter` + * `endpointAddress` + * The following property has been added + * `terminatorStrategy` -The ziti and ziti-fabric CLIs have been updated with new terminator -related functionality, so that terminators can be viewed, created and -deleted from both. +The ziti and ziti-fabric CLIs have been updated with new terminator related functionality, so that terminators can be viewed, created and deleted from both. ## Filtering/Sorting/Paging Changes - List operations on entities previously allowed the following parameters: -* `filter` -* `sort` -* `limit` -* `offset` + * `filter` + * `sort` + * `limit` + * `offset` -These are all still supported, but now sort, limit and offset can also -be included in the filter. If parameters are specified both in the -filter and in an explicit query parameter, the filter takes precedence. +These are all still supported, but now sort, limit and offset can also be included in the filter. If parameters are specified both in the filter and in an explicit query parameter, the filter takes precedence. -When listing entities from the ziti CLI, filters can be included as an -optional argument. +When listing entities from the ziti CLI, filters can be included as an optional argument. For example: @@ -2241,26 +1801,25 @@ For example: id: 4e33859b-070d-42b1-8b40-4adf973f680c name: simple terminator strategy: role attributes: {} id: cd1ae16e-5015-49ad-9864-3ca0f5814091 name: ssh terminator strategy: role attributes: {} id: dcc9922a-c681-41bf-8079-be2163509702 name: mattermost terminator strategy: role attributes: {} - + $ ziti edge controller list services 'name contains "s" sort by name' id: 37f1e34c-af06-442f-8e62-032916912bc6 name: grpc-ping-standalone terminator strategy: role attributes: {} id: dcc9922a-c681-41bf-8079-be2163509702 name: mattermost terminator strategy: role attributes: {} id: 4e33859b-070d-42b1-8b40-4adf973f680c name: simple terminator strategy: role attributes: {} id: cd1ae16e-5015-49ad-9864-3ca0f5814091 name: ssh terminator strategy: role attributes: {} - + $ ziti edge controller list services 'name contains "s" sort by name skip 1 limit 2' id: dcc9922a-c681-41bf-8079-be2163509702 name: mattermost terminator strategy: role attributes: {} id: 4e33859b-070d-42b1-8b40-4adf973f680c name: simple terminator strategy: role attributes: {} -Association lists now also support filtering, sorting and paging. -Association GET operations only support the filter parameter. +Association lists now also support filtering, sorting and paging. Association GET operations only support the filter parameter. $ ziti edge controller list service terminators ssh Found services with id cd1ae16e-5015-49ad-9864-3ca0f5814091 for name ssh id: 41f4fd01-0bd7-4987-93b3-3b2217b00a22 serviceId: cd1ae16e-5015-49ad-9864-3ca0f5814091 routerId: 888cfde1-5786-4ba8-aa75-9f97804cb7bb binding: transport address: tcp:localhost:22 id: a5213300-9c5f-4b0e-a790-1ed460964d7c serviceId: cd1ae16e-5015-49ad-9864-3ca0f5814091 routerId: 888cfde1-5786-4ba8-aa75-9f97804cb7bb binding: transport address: tcp:localhost:2022 - + $ ziti edge controller list service terminators ssh "true sort by address" Found services with id cd1ae16e-5015-49ad-9864-3ca0f5814091 for name ssh id: a5213300-9c5f-4b0e-a790-1ed460964d7c serviceId: cd1ae16e-5015-49ad-9864-3ca0f5814091 routerId: 888cfde1-5786-4ba8-aa75-9f97804cb7bb binding: transport address: tcp:localhost:2022 @@ -2272,47 +1831,33 @@ Association GET operations only support the filter parameter. id: a5213300-9c5f-4b0e-a790-1ed460964d7c serviceId: cd1ae16e-5015-49ad-9864-3ca0f5814091 routerId: 888cfde1-5786-4ba8-aa75-9f97804cb7bb binding: transport address: tcp:localhost:2022 ## Bolt Datastore Migrations - -The fabric now supports migrating schema/data from one version to -another. The fabric and edge share a common framework for migration. The -migration framework now also automatically backs up the bolt data file -before migration data. The backup file will have the same name as the -original bolt file but with a timestamp appended to it. +The fabric now supports migrating schema/data from one version to another. The fabric and edge share a common framework for migration. The migration framework now also automatically backs up the bolt data file before migration data. The backup file will have the same name as the original bolt file but with a timestamp appended to it. Example: Original file: /tmp/ziti-bolt.db Backup file: /tmp/ziti-bolt.db-20200316-134725 -The fabric and edge schemas do not yet get migrated in the same -transaction. This will be addressed in a follow-up release. +The fabric and edge schemas do not yet get migrated in the same transaction. This will be addressed in a follow-up release. ## Fabric and Edge Alignment +The fabric and edge persistence and model layers are now using the same foundational plumbing. This will allow for a common API layer in a follow-up release. -The fabric and edge persistence and model layers are now using the same -foundational plumbing. This will allow for a common API layer in a -follow-up release. +As part of this consolidation effort, fabric entities now share the same set of common properties as edge entities, namely: -As part of this consolidation effort, fabric entities now share the same -set of common properties as edge entities, namely: - -* `id` -* `createdAt` -* `updatedAt` -* `tags` + * `id` + * `createdAt` + * `updatedAt` + * `tags` Previously the only common property was `id`. ## Deprecated Endpoints - -The `/gateways` (replaced by `/edge-routers`) and `network-sessions` -(replaced by `/sessions`) endpoints, which were previously deprecated, -have now been removed. +The `/gateways` (replaced by `/edge-routers`) and `network-sessions` (replaced by `/sessions`) endpoints, which were previously deprecated, have now been removed. ## Miscellaneous -There is a new `ziti edge controller version` command which shows -information about the version of the controller being connected to: +There is a new `ziti edge controller version` command which shows information about the version of the controller being connected to: Example: @@ -2323,64 +1868,47 @@ Example: Runtime : go1.13 # Release 0.11 - ## Theme - Ziti 0.11 includes the following: -* Ziti connections from Ziti SDK client to services hosted by SDK are - encrypted end-to-end (no API changes) + * Ziti connections from Ziti SDK client to services hosted by SDK are encrypted end-to-end (no API changes) ## End-to-end Encryption -Client and Hosting SDK instances setup end-to-end channels using secure -key exchange and -[AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption) streams. +Client and Hosting SDK instances setup end-to-end channels using secure key exchange and [AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption) streams. Read more about on https://openziti.github.io (_coming soon_) # Releaes 0.10 - ## Theme - Ziti 0.10 includes a single change: -* Edge API input validation processing was changed to operate on the - supplied JSON instead of target objects + * Edge API input validation processing was changed to operate on the supplied JSON instead of target objects ## Edge API Validation -Before this version, the Edge API allowed some fields to be omitted from -requests. This behavior was due to the fact that the API was validating -the object that resulted from the JSON. This would cause some fields -that were not supplied to default to an acceptable nil/null/empty value. +Before this version, the Edge API allowed some fields to be omitted from requests. This behavior was due to the fact +that the API was validating the object that resulted from the JSON. This would cause some fields that were not supplied +to default to an acceptable nil/null/empty value. -Some APIs call may now fail with validation errors expecting fields to -be defined for POST (create) and PUT (update) operations. PATCH (partial -update) should not be affected. +Some APIs call may now fail with validation errors expecting fields to be defined for POST (create) and PUT (update) +operations. PATCH (partial update) should not be affected. # Release 0.9 - ## Theme - Ziti 0.9 includes the following -* a generic service configuration facility, useful for configuring - service centric edge configuration data -* several changes to policy syntax and semantics -* service edge router policies are now a separate entity, instead of - just a field on service + * a generic service configuration facility, useful for configuring service centric edge configuration data + * several changes to policy syntax and semantics + * service edge router policies are now a separate entity, instead of just a field on service ## Service Configuration - -Configurations are named JSON style objects that can be associated with -services. Configurations have a type. A service can have 0 or 1 -configurations of each configuration type associated with it. +Configurations are named JSON style objects that can be associated with services. Configurations have a type. +A service can have 0 or 1 configurations of each configuration type associated with it. ### Configuration types - There is a new endpoint for managing config types. * Endpoint: `/config-types` @@ -2397,14 +1925,12 @@ There is a new endpoint for managing config types. * name - type: string, constraints: required, must be unique. If provided must be a valid JSON schema. * schema - type: object. Optional. -If a schema is set on a type, that schema will be used to validate -config data on configurations of that type. Validation will happen if a -configuration is created or updated. If a config type schema changes, -the system does not re-validate configurations of that type. +If a schema is set on a type, that schema will be used to validate config data on configurations of that type. Validation +will happen if a configuration is created or updated. If a config type schema changes, the system does not re-validate +configurations of that type. -It is generally assumed that if there are backwards incompatible changes -being made to a schema that a new config type will be created and -interested applications can support multiple configuration types. +It is generally assumed that if there are backwards incompatible changes being made to a schema that a new config type +will be created and interested applications can support multiple configuration types. The ziti CLI supports the following operations on config types: @@ -2414,7 +1940,6 @@ The ziti CLI supports the following operations on config types: * delete config-type ### Configurations - There is a new endpoint for managing configurations * Endpoint: `/configs` @@ -2472,43 +1997,32 @@ $ ``` ### Service Configuration +The DNS block, which included hostname and port, has been removed from service definitions. When creating or updating +services, you can submit a `configs` array, which may include config ids or names (or a mix of the two). Configs are +not required. -The DNS block, which included hostname and port, has been removed from -service definitions. When creating or updating services, you can submit -a `configs` array, which may include config ids or names (or a mix of -the two). Configs are not required. +**NOTE**: Only one config of a given type may be associated with a service. -**NOTE**: Only one config of a given type may be associated with a -service. - -Configurations associated with a service may be listed as entities -using: +Configurations associated with a service may be listed as entities using: * List associated configs GET `/services//configs` #### Retrieving service configuration - -When authenticating, a user may now indicate which config types should -be included when listing services. The authentication POST may include a -body. If the body has a content-type of application/json, it will be -parsed as a map. The controller will looking for a key at the top level -of the map called `configTypes`, which should be an array of config type -ids or names (or mix of the two). +When authenticating, a user may now indicate which config types should be included when listing services. +The authentication POST may include a body. If the body has a content-type of application/json, it will +be parsed as a map. The controller will looking for a key at the top level of the map called `configTypes`, +which should be an array of config type ids or names (or mix of the two). Example authentication POST body: - ```json { "configTypes" : ["ziti-tunneler-client.v1", "ziti-tunneler-client.v2"] } ``` - -When retrieving services, the config data for for those configuration -types that were requested will be embedded in the service definition. -For example, if the user has requested (by name) the config types -"ziti-tunneler-client.v1" and "ziti-tunneler-server.v1" and the `ssh` -service has configurations of both of those kinds associated, a listing -which includes that service might look as follows: +When retrieving services, the config data for for those configuration types that were requested will be embedded in +the service definition. For example, if the user has requested (by name) the config types "ziti-tunneler-client.v1" and +"ziti-tunneler-server.v1" and the `ssh` service has configurations of both of those kinds associated, a listing which +includes that service might look as follows: ```json { @@ -2569,10 +2083,8 @@ which includes that service might look as follows: ``` ### Identity Service Configuration - -Configuration for a service can also be specified for a given identity. -If a configuration is specified for a service, it will replace any -configuration of that type on that service. +Configuration for a service can also be specified for a given identity. If a configuration is specified for a service, +it will replace any configuration of that type on that service. * Endpoint /identities//services -* /service-policies//identities -* /identities//service-policies -* /services//service-policies + * /service-policies//services + * /service-policies//identities + * /identities//service-policies + * /services//service-policies #### Service Access + * An admin may dial or bind any service + * A non-admin identity may dial any service it has access to via service policies of type "Dial" + * A non-admin identity may bind any service it has access to via service policies of type "Bind" -* An admin may dial or bind any service -* A non-admin identity may dial any service it has access to via service - policies of type "Dial" -* A non-admin identity may bind any service it has access to via service - policies of type "Bind" - -When listing services, the controller used to provide a hostable flag -with each service to indicate if the service could be bound in addition -to being dialed. Now, the service will have a permissions block which -will indicate if the service may be dialed, bound or both. +When listing services, the controller used to provide a hostable flag with each service to indicate if the service could be bound in addition to being dialed. Now, the service will have a permissions block which will indicate if the service may be dialed, bound or both. Ex: - ```json { "meta": {}, @@ -2874,53 +2312,35 @@ Ex: ``` #### Appwan Removal and Migration +The `/app-wans` endpoint has been removed. The bbolt schema version has been bumped to 3. If starting a fresh controller no action will be taken. However, if coming from an existing 0.7 or earlier bbolt database, the following will be done: -The `/app-wans` endpoint has been removed. The bbolt schema version has -been bumped to 3. If starting a fresh controller no action will be -taken. However, if coming from an existing 0.7 or earlier bbolt -database, the following will be done: + 1. For each existing appwan, a service policy with type "Dial" will be created + 1. The new service policy will have the same name as the appwan it replaces + 1. The new service policy will have the same identities and services as the appwan it replaces + 1. Identities and services will be specified explicitly by ID rather as opposed to by creating new role attributes -1. For each existing appwan, a service policy with type "Dial" will be - created -2. The new service policy will have the same name as the appwan it - replaces -3. The new service policy will have the same identities and services as - the appwan it replaces -4. Identities and services will be specified explicitly by ID rather as - opposed to by creating new role attributes - -NOTE: Service hosting identities will not be migrated into equivalent -Bind service policies, as binds are not yet used in any production -scenarios. +NOTE: Service hosting identities will not be migrated into equivalent Bind service policies, as binds are not yet used in any production scenarios. ## Go SDK changes - Several types have been renamed to conform to standard nomenclature -* Session is now ApiSession -* NetworkSession is now Session - * The SessionId field is now ApiSessionId - * The Gateways field is now EdgeRouters -* Gateway is now EdgeRouter -* On the Service type the Hostable flag has been removed and replaced - with a Permissions string array - * It may be nil, empty or contain either or both of "Dial" and "Bind" -* On the Context type - * GetNetworkSession is now GetSession - * GetNetworkHostSession is now GetBindSession + * Session is now ApiSession + * NetworkSession is now Session + * The SessionId field is now ApiSessionId + * The Gateways field is now EdgeRouters + * Gateway is now EdgeRouter + * On the Service type the Hostable flag has been removed and replaced with a Permissions string array + * It may be nil, empty or contain either or both of "Dial" and "Bind" + * On the Context type + * GetNetworkSession is now GetSession + * GetNetworkHostSession is now GetBindSession ## ziti command line changes - -1. The `ziti edge controller create/delete gateway` commands have been - removed. Use `ziti edge controller create/delete edge-router` - instead. -2. There are new `ziti edge controller create/delete service-policy` - commands + 1. The `ziti edge controller create/delete gateway` commands have been removed. Use `ziti edge controller create/delete edge-router` instead. + 2. There are new `ziti edge controller create/delete service-policy` commands ## Ziti Proxy changes - -ziti-proxy has been incorporated into the ziti-tunnel command. Where -previously one would have run +ziti-proxy has been incorporated into the ziti-tunnel command. Where previously one would have run ``` ZITI_SDK_CONFIG=./config.json ziti-proxy run @@ -2933,181 +2353,112 @@ ziti-tunnel proxy -i ./config.json ``` # Release 0.7 - ## Theme - -* Ziti 0.7.0 replaces clusters with role attribute based policies -* Ziti 0.7.0 takes steps towards consistent terminology for sessions + * Ziti 0.7.0 replaces clusters with role attribute based policies + * Ziti 0.7.0 takes steps towards consistent terminology for sessions ## Edge Router Policy - In 0.6.0 access to edge routers was controlled by clusters and services. -* Every edge router was assigned to a cluster -* Services belonged to 1 or more clusters -* Dial/bind request would results would include a list of edge routers - which were - * in clusters linked to the dialed/bound service and - * were online when the request was made + * Every edge router was assigned to a cluster + * Services belonged to 1 or more clusters + * Dial/bind request would results would include a list of edge routers which were + * in clusters linked to the dialed/bound service and + * were online when the request was made -Release 0.7.0 replaces this model with something new. It has the -following goals: +Release 0.7.0 replaces this model with something new. It has the following goals: -* Allow grouping edge routers and other entities dynamically using role - attributes rather than hard-coded lists -* Allow restricting access to edge router by identity in addition to by - service + * Allow grouping edge routers and other entities dynamically using role attributes rather than hard-coded lists + * Allow restricting access to edge router by identity in addition to by service It includes the following new concepts: -* Role attributes - * Role attributes are just a set of strings associated to a model - entity - * The semantics of the role attributes are determined by the system - administrator - * Ex: an edge router might have the role attributes `["us-east", - "new-york", "omnicorp"]` - * These tags might indicate that this edge router is located on the - east coast of the USA, specifically in New York and should be - dedicated to use by a customer named OmniCorp - * Currently role attributes are supported on edge routers and - identities -* Roles - * Roles specify a set of entities - * Roles may include role attributes as well as entity ids - * A role will match all entities which either: - * Have **_all_** role attributes in the role OR - * Have an ID which is listed explicitly - * Role attributes are prefixed with `@`. Role elements not prefixed - with `@` are assumed to be ids - * There is a special role attribute `@all` which will match all - entities - * A role may have only role attributes or only ids or may have both + * Role attributes + * Role attributes are just a set of strings associated to a model entity + * The semantics of the role attributes are determined by the system administrator + * Ex: an edge router might have the role attributes `["us-east", "new-york", "omnicorp"]` + * These tags might indicate that this edge router is located on the east coast of the USA, specifically in New York and should be dedicated to use by a customer named OmniCorp + * Currently role attributes are supported on edge routers and identities + * Roles + * Roles specify a set of entities + * Roles may include role attributes as well as entity ids + * A role will match all entities which either: + * Have **_all_** role attributes in the role OR + * Have an ID which is listed explicitly + * Role attributes are prefixed with `@`. Role elements not prefixed with `@` are assumed to be ids + * There is a special role attribute `@all` which will match all entities + * A role may have only role attributes or only ids or may have both ### Role Example - -* Edge router with id 1 has role attributes `["us-east", "New York - City"]` -* Edge router with id 2 has role attributes `["us-east", "Albany"]` -* Edge router with id 3 has role attributes `["us-west", "Los Angeles"]` -* An edge router role of `["@us-east", "@New York City", "3"]` would - evaluate as follows - * Edge router 1 would match because it has all listed role attributes - * Edge router 2 would not match, because it doesn't have all listed - role attributes - * Edge router 3 would match because its ID is listed explicitly + * Edge router with id 1 has role attributes `["us-east", "New York City"]` + * Edge router with id 2 has role attributes `["us-east", "Albany"]` + * Edge router with id 3 has role attributes `["us-west", "Los Angeles"]` + * An edge router role of `["@us-east", "@New York City", "3"]` would evaluate as follows + * Edge router 1 would match because it has all listed role attributes + * Edge router 2 would not match, because it doesn't have all listed role attributes + * Edge router 3 would match because its ID is listed explicitly ### Model Changes - #### Role Attributes - -Edge routers and identities now have roleAttributes fields. Edge routers -no longer have an associated cluster. +Edge routers and identities now have roleAttributes fields. Edge routers no longer have an associated cluster. #### Edge Router Policies +0.7.0 introduces a new model construct, the Edge Router Policy. This entity allows restricting which edge routers identities are allowed to use. An edge router policy has three attributes: -0.7.0 introduces a new model construct, the Edge Router Policy. This -entity allows restricting which edge routers identities are allowed to -use. An edge router policy has three attributes: + * Name + * Identity Roles + * Edge Router Roles -* Name -* Identity Roles -* Edge Router Roles +An identity can be a member of multiple policies and will have access to the union of all edge routers linked to from those policies. -An identity can be a member of multiple policies and will have access to -the union of all edge routers linked to from those policies. +There is a new `/edge-router-policies` endpoint which can be used for creating/updating/deleting/querying edge router policies. Edge router policies PUT/POST/PATCH all take the following properties: -There is a new `/edge-router-policies` endpoint which can be used for -creating/updating/deleting/querying edge router policies. Edge router -policies PUT/POST/PATCH all take the following properties: - -* name -* edgeRouterRoles -* identityRoles -* tags + * name + * edgeRouterRoles + * identityRoles + * tags #### Service Edge Router Roles - -Services now have a new edgeRouterRoles field. If set, this specifies -which edge routers may be used for a service. This replaces the old -cluster functionality. +Services now have a new edgeRouterRoles field. If set, this specifies which edge routers may be used for a service. This replaces the old cluster functionality. #### Edge Router Access - When a service is dialed or bound, which edge routers will be returned? -* If the service edgeRouterRoles are NOT set, then it will be the set of - edge routers to which the dialing/binding identity has access -* If the service edgeRouterRoles ARE set, then it will be the - intersection of the edge routers to which the service has access and - the set of edge routers to which the identity has access + * If the service edgeRouterRoles are NOT set, then it will be the set of edge routers to which the dialing/binding identity has access + * If the service edgeRouterRoles ARE set, then it will be the intersection of the edge routers to which the service has access and the set of edge routers to which the identity has access #### Cluster Removal and Migration +The `/clusters` endpoint has been removed. The bbolt schema version has been bumped to 2. If starting a fresh controller no action will be taken. However, if coming from an existing 0.6 or earlier bbolt database, the following will be done: -The `/clusters` endpoint has been removed. The bbolt schema version has -been bumped to 2. If starting a fresh controller no action will be -taken. However, if coming from an existing 0.6 or earlier bbolt -database, the following will be done: - -1. An edge router policy will be created with `@all` for both - identityRoles and edgeRouterRoles, allowing access to all edge - routers from all identities. This will allow the current identities - to continue using the system. Otherwise, no identities would be able - to connect to any edge routers. -2. Each edge router will get a role attribute of `cluster-` for the cluster it belonged to -3. If a service belongs to 1 or more clusters it will get a role - attribute corresponding to the first cluster. Any edge routers - assigned to additional clusters will be added to edge router roles - field by ID. - 1. Noe: If we were to add additional role clusters for the other - clusts we'd get the intersection, not the union and would end up - with access to 0 edge routers + 1. An edge router policy will be created with `@all` for both identityRoles and edgeRouterRoles, allowing access to all edge routers from all identities. This will allow the current identities to continue using the system. Otherwise, no identities would be able to connect to any edge routers. + 2. Each edge router will get a role attribute of `cluster-` for the cluster it belonged to + 3. If a service belongs to 1 or more clusters it will get a role attribute corresponding to the first cluster. Any edge routers assigned to additional clusters will be added to edge router roles field by ID. + 1. Noe: If we were to add additional role clusters for the other clusts we'd get the intersection, not the union and would end up with access to 0 edge routers ## Session changes - -Terminology related to sessions is being made consistent between the -edge and fabric. +Terminology related to sessions is being made consistent between the edge and fabric. There are two types of sessions: -1. Sessions between edge clients the edge controller, which allowed - clients to manage controller state as well as dial and bind services - 1. These were referred to as sessions in the edge and have no fabric - equivalent -2. Sessions which establish routing and allow data flow to/from/within - the edge and fabric - 1. These were referred to as network sessions in the edge and - sessions in the fabric + 1. Sessions between edge clients the edge controller, which allowed clients to manage controller state as well as dial and bind services + 1. These were referred to as sessions in the edge and have no fabric equivalent + 1. Sessions which establish routing and allow data flow to/from/within the edge and fabric + 1. These were referred to as network sessions in the edge and sessions in the fabric -Going forward, what was called a session in the edge will now be -referred to as an API session. What was called a network session will be -now just be called session in both the edge and fabric. +Going forward, what was called a session in the edge will now be referred to as an API session. What was called a network session will be now just be called session in both the edge and fabric. -As a first step, in 0.7.0 API sessions will be available at both the -`/sessions` and `/api-sessions` endpoints. Use of the `/sessions` -endpoint is deprecated. In later releases the `/sessions` endpoint will -be used for sessions instead of API sessions. +As a first step, in 0.7.0 API sessions will be available at both the `/sessions` and `/api-sessions` endpoints. Use of the `/sessions` endpoint is deprecated. In later releases the `/sessions` endpoint will be used for sessions instead of API sessions. # Release 0.6 - ## Theme - -Ziti 0.6.0 moves the back-end persistence model of Ziti Edge and Ziti -Fabric into the same repository based on Bbolt (an in memory data store -that is backed by a memory mapped file). The changes remove the -requirement for PostgresSQL. +Ziti 0.6.0 moves the back-end persistence model of Ziti Edge and Ziti Fabric into the same repository based on Bbolt (an in memory data store that is backed by a memory mapped file). The changes remove the requirement for PostgresSQL. ## UPDB Enrollment JWTs - -Enrollments that are for UPDB (username password database) are now -consistent with all other enrollment and use JWTs for processing. Prior -to this a naked URL was provided. +Enrollments that are for UPDB (username password database) are now consistent with all other enrollment and use JWTs for processing. Prior to this a naked URL was provided. ### What This Breaks +Any UPDB enrollment processing that relied upon the URL for the enrollment. -Any UPDB enrollment processing that relied upon the URL for the -enrollment. Ziti 0.5.x UPDB enrolling entity @@ -3144,8 +2495,7 @@ Ziti 0.5.x UPDB enrolling entity } ``` -Ziti 0.6.x UPDB enrolling entity (note the changes in the -enrollment.updb object): +Ziti 0.6.x UPDB enrolling entity (note the changes in the enrollment.updb object): ``` { @@ -3188,27 +2538,21 @@ enrollment.updb object): ``` -### What To Do +### What To Do Use the new JWT format to: -verify the signature of the JWT to match the iss URL's TSL presented -certificates construct the enrollment url from the JWTs properties in -the following format: +verify the signature of the JWT to match the iss URL's TSL presented certificates +construct the enrollment url from the JWTs properties in the following format: ``` + "/enroll?token=" + ``` ## Multiple Invalid Value Error Handling - -Errors where there is the potential to report about multiple invalid -field values for a given field used to report as a separate error for -each value. Now there will be one error, but the values field will hold -the invalid values. +Errors where there is the potential to report about multiple invalid field values for a given field used to report as a separate error for each value. Now there will be one error, but the values field will hold the invalid values. ### Old Format - ``` { "error": { @@ -3239,7 +2583,6 @@ the invalid values. ``` ### New Format - ``` { "error": { @@ -3266,4 +2609,3 @@ the invalid values. } } ``` -