Skip to content

Commit fbcce67

Browse files
committed
Update CHANGELOG.md
1 parent 82272aa commit fbcce67

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

CHANGELOG.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ when running HA. Legacy API and service session are now deprecated and will be r
9494
* Dial failures now return the circuit ID and error information for easier debugging
9595
* Router-to-controller control channels now support multiple underlays with priority-based message routing
9696
* The dialing identity's ID and name are now forwarded to the hosting SDK
97+
* Controllers can now dial routers to establish control channels, enabling connectivity when routers are behind firewalls (Beta)
9798

9899
## Basic Permission System (BETA)
99100

@@ -745,6 +746,66 @@ established. This allows hosting applications to identify which identity initiat
745746
enabling identity-aware request handling on the server side. This will require SDK updates to add this
746747
to the API for hosting applications.
747748

749+
## Controller-Initiated Control Channel Dials (BETA)
750+
751+
Controllers can now dial routers to establish control channels. Previously, routers were solely
752+
responsible for dialing controllers. This is useful in deployments where controllers are behind
753+
firewalls and cannot be reached by all routers, but the controllers can reach the routers.
754+
755+
### Router Configuration
756+
757+
Routers can configure one or more control channel listeners. Each listener specifies a bind address,
758+
an advertise address (reported to the controller), and optional groups for matching.
759+
760+
```yaml
761+
ctrl:
762+
listeners:
763+
- bind: tls://0.0.0.0:6262
764+
advertise: tls://router.example.com:6262
765+
groups:
766+
- default
767+
```
768+
769+
The advertise address is stored in the router's `ctrlChanListeners` model field and reported to
770+
the controller. Groups default to `["default"]` if not specified.
771+
772+
Routers will also report their configured `ctrlChanListeners` to the controller when they connect,
773+
and the controller data model will be updated automatically.
774+
775+
The `ctrlChanListeners` field can also be set via the CLI:
776+
777+
```bash
778+
ziti edge update edge-router myRouter --ctrl-chan-listener 'tls://router.example.com:6262=group1,group2'
779+
```
780+
781+
### Controller Configuration
782+
783+
The controller dialer is disabled by default and must be explicitly enabled. When enabled, the
784+
controller will dial routers that have control channel listeners configured and are not already
785+
connected.
786+
787+
```yaml
788+
ctrl:
789+
dialer:
790+
enabled: true
791+
groups:
792+
- default
793+
dialDelay: 30s
794+
```
795+
796+
- `enabled` - Enables the controller dialer (default: `false`)
797+
- `groups` - List of groups to match against router listener groups (default: `["default"]`)
798+
- `dialDelay` - Delay before the controller attempts to dial a disconnected router (default: `30s`)
799+
800+
The controller will only dial routers whose listener groups overlap with the controller's configured
801+
groups.
802+
803+
## Current Beta Features
804+
805+
* Basic Permission System
806+
* Alert Events
807+
* Controller-Initiated Control Channel Dials
808+
748809
## Component Updates and Bug Fixes
749810

750811
* github.com/openziti/channel/v4: [v4.2.41 -> v4.3.5](https://github.com/openziti/channel/compare/v4.2.41...v4.3.5)

controller/handler_ctrl/dialer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ func (self *CtrlDialer) groupsMatch(routerGroups []string) bool {
165165
func (self *CtrlDialer) dialWithBackoff(routerId, address string) {
166166
defer self.dialing.Delete(routerId)
167167

168+
if self.config.DialDelay > 0 {
169+
time.Sleep(self.config.DialDelay)
170+
}
171+
168172
log := pfxlog.Logger().WithField("component", "ctrlDialer").
169173
WithField("routerId", routerId).
170174
WithField("address", address)

0 commit comments

Comments
 (0)