"service has no terminators" error using Python SDK

Hello everyone, I am currently trying to create a Flask host using the python SDK. I've copied the git sample for an easy start, but still can't get a connection going between client and host.

The host seems to bind to the service correctly, according to the logs, but then when trying to dial with a client, I get the following error :

Error

ERROR ziti-sdk:connect.c:1068 connect_reply_cb() conn0.0/K5JaKomr/Connecting failed to connect, reason=service AqErEuQI8ZfkKZzPTaVvt has no terminators for instanceId 45cb4a61-018d-4432-aff2-e0880b39687a.zpix"

I'm using the "bindUsingEdgeIdentity" option with randomly generated names for terminators, hence the long instance id.

I'm kind of lost about where to look now, as logs don't seem to indicate a problem on the host's side.

Here are the JSON config files for both host and intercept :

Host config

HOST

{
"_links": {
"self": {
"href": "./configs/1s3Vsx3yJAZNHEhMMfLWd2"
}
},
"createdAt": "2025-07-19T11:45:36.285Z",
"id": "1s3Vsx3yJAZNHEhMMfLWd2",
"tags": {},
"updatedAt": "2025-07-30T19:24:43.134Z",
"configType": {
"_links": {
"self": {
"href": "./config-types/NH5p4FpGR"
}
},
"entity": "config-types",
"id": "NH5p4FpGR",
"name": "host.v1"
},
"configTypeId": "NH5p4FpGR",
"data": {
"protocol": "tcp",
"address": "localhost",
"port": 2609,
"httpChecks": ,
"listenOptions": {
"bindUsingEdgeIdentity": true
},
"portChecks":
},
"name": "2609.host.v1"
}

Client config

CLIENT

{
"_links": {
"self": {
"href": "./configs/1lWE1vGbL1RxPMtV2ODDRb"
}
},
"createdAt": "2025-07-21T11:00:14.710Z",
"id": "1lWE1vGbL1RxPMtV2ODDRb",
"tags": {},
"updatedAt": "2025-08-30T10:40:13.504Z",
"configType": {
"_links": {
"self": {
"href": "./config-types/g7cIWbcGg"
}
},
"entity": "config-types",
"id": "g7cIWbcGg",
"name": "intercept.v1"
},
"configTypeId": "g7cIWbcGg",
"data": {
"portRanges": [
{
"high": 2609,
"low": 2609
}
],
"addresses": [
"*.zpix"
],
"dialOptions": {
"identity": "$dst_hostname"
},
"protocols": [
"tcp"
]
},
"name": "2609.intercept.v1"
}

And here are the full debug logs for both sides as well, if needed.

Host logs

(103869)[ 0.000] INFO ziti-sdk:utils.c:196 ziti_log_set_level() set log level: root=4/DEBUG
(103869)[ 0.000] INFO ziti-sdk:utils.c:165 ziti_log_init() Ziti C SDK version 1.7.8 @g727c6bf(HEAD) starting at (2025-09-22T11:31:47.171)
(103869)[ 0.000] DEBUG ziti-sdk:zitilib.c:1056 looper() loop is starting
(103869)[ 0.000] DEBUG ziti-sdk:zitilib.c:230 load_ziti_ctx() loading identity from ziti/identity.json
(103869)[ 0.000] INFO ziti-sdk:ziti.c:512 ziti_start_internal() ztx[0] enabling Ziti Context
(103869)[ 0.000] INFO ziti-sdk:ziti.c:528 ziti_start_internal() ztx[0] using tlsuv[v0.37.1/OpenSSL 3.5.0 8 Apr 2025]
(103869)[ 0.000] INFO ziti-sdk:ziti_ctrl.c:637 ziti_ctrl_init() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] controller initialized
(103869)[ 0.000] DEBUG ziti-sdk:ziti_ctrl.c:648 ziti_ctrl_init() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] ziti controller client initialized
(103869)[ 0.000] INFO ziti-sdk:ziti.c:606 ztx_init_controller() ztx[0] Loading ziti context with controller[https://zpix.vigitronic.eu:8440/edge/client/v1]
(103869)[ 0.000] DEBUG ziti-sdk:ziti.c:537 ziti_start_internal() ztx[0] using metrics interval: 0
(103869)[ 0.000] DEBUG ziti-sdk:ziti.c:226 ziti_set_unauthenticated() ztx[0] setting auth_state[0] to 0
(103869)[ 0.000] DEBUG ziti-sdk:ziti_ctrl.c:380 ziti_ctrl_clear_api_session() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] clearing api session token for ziti_controller
(103869)[ 0.000] DEBUG ziti-sdk:ziti_ctrl.c:1106 ctrl_paging_req() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] starting paging request GET[/external-jwt-signers]
(103869)[ 0.112] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/version] in 0.107 s
(103869)[ 0.112] INFO ziti-sdk:ziti.c:2038 version_pre_auth_cb() ztx[0] connected to Legacy controller https://zpix.vigitronic.eu:8440/edge/client/v1 version v1.6.6(207d28c6bdee 2025-07-25T17:21:06Z)
(103869)[ 0.113] DEBUG ziti-sdk:legacy_auth.c:238 auth_timer_cb() refreshing session[(nil)]
(103869)[ 0.126] DEBUG ziti-sdk:ziti_ctrl.c:487 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] received 0/0 for paging request GET[/external-jwt-signers]
(103869)[ 0.126] DEBUG ziti-sdk:ziti_ctrl.c:497 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed paging request GET[/external-jwt-signers] in 0.120 s
(103869)[ 0.126] DEBUG ziti-sdk:ziti.c:664 ext_jwt_singers_cb() ztx[0] 0 external auth providers available
(103869)[ 0.141] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed POST[/authenticate?method=cert] in 0.028 s
(103869)[ 0.141] DEBUG ziti-sdk:ziti_ctrl.c:394 ctrl_login_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] authenticated successfully session[cmfv1qdwnwsf3eldvq4lv5py2]
(103869)[ 0.141] DEBUG ziti-sdk:legacy_auth.c:170 login_cb() logged in successfully => api_session[cmfv1qdwnwsf3eldvq4lv5py2]
(103869)[ 0.141] DEBUG ziti-sdk:ziti.c:381 ziti_set_fully_authenticated() ztx[0] setting auth_state[0] to 3
(103869)[ 0.141] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[ziti.c:refresh_cb] timeout[0]
(103869)[ 0.141] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[posture.c:ziti_pr_ticker_cb] timeout[1]
(103869)[ 0.141] DEBUG ziti-sdk:legacy_auth.c:309 refresh_delay() api session set based on session->expireSeconds, next refresh in 3540s
(103869)[ 0.143] DEBUG ziti-sdk:ziti.c:1740 ztx_process_deadlines() ztx[0] calling ziti.c:refresh_cb(0x7f21d8004bc0)
(103869)[ 0.143] DEBUG ziti-sdk:ziti_ctrl.c:1106 ctrl_paging_req() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] starting paging request GET[/current-identity/edge-routers]
(103869)[ 0.143] DEBUG ziti-sdk:ziti.c:1740 ztx_process_deadlines() ztx[0] calling posture.c:ziti_pr_ticker_cb(0x7f21d8004bc0)
(103869)[ 0.143] INFO ziti-sdk:posture.c:206 ziti_send_posture_data() ztx[0] first run or potential controller restart detected
(103869)[ 0.143] DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[TRUE], must_send_every_time[TRUE], new_controller_instance[TRUE]
(103869)[ 0.143] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[posture.c:ziti_pr_ticker_cb] timeout[20000]
(103869)[ 0.170] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-api-session] in 0.028 s
(103869)[ 0.170] DEBUG ziti-sdk:ziti_ctrl.c:394 ctrl_login_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] authenticated successfully session[cmfv1qdwnwsf3eldvq4lv5py2]
(103869)[ 0.170] DEBUG ziti-sdk:ziti.c:2235 api_session_cb() ztx[0] app is not requiring expiration check
(103869)[ 0.184] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-identity] in 0.041 s
(103869)[ 0.197] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-identity] in 0.054 s
(103869)[ 0.211] DEBUG ziti-sdk:ziti_ctrl.c:487 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] received 1/1 for paging request GET[/current-identity/edge-routers]
(103869)[ 0.211] DEBUG ziti-sdk:ziti_ctrl.c:497 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed paging request GET[/current-identity/edge-routers] in 0.068 s
(103869)[ 0.211] INFO ziti-sdk:channel.c:265 new_ziti_channel() ch[0] (zpixr01) new channel for ztx[0] identity[45cb4a61-018d-4432-aff2-e0880b39687a.zpix]
(103869)[ 0.211] DEBUG ziti-sdk:channel.c:316 ziti_channel_set_url() ch[0] setting channel[zpixr01] url[tls://zpixr01.vigitronic.eu:8442]
(103869)[ 0.211] INFO ziti-sdk:channel.c:836 reconnect_channel() ch[0] reconnecting NOW
(103869)[ 0.211] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[channel.c:reconnect_cb] timeout[0]
(103869)[ 0.212] DEBUG ziti-sdk:ziti.c:1740 ztx_process_deadlines() ztx[0] calling channel.c:reconnect_cb(0x7f21d80e3650)
(103869)[ 0.212] DEBUG ziti-sdk:channel.c:802 reconnect_cb() ch[0] connecting to tls://zpixr01.vigitronic.eu:8442
(103869)[ 0.212] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[channel.c:ch_connect_timeout] timeout[20000]
(103869)[ 0.225] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-api-session/service-updates] in 0.081 s
(103869)[ 0.225] DEBUG ziti-sdk:ziti_ctrl.c:1106 ctrl_paging_req() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] starting paging request GET[/services?configTypes=all]
(103869)[ 0.239] DEBUG ziti-sdk:ziti_ctrl.c:487 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] received 3/3 for paging request GET[/services?configTypes=all]
(103869)[ 0.239] DEBUG ziti-sdk:ziti_ctrl.c:497 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed paging request GET[/services?configTypes=all] in 0.013 s
(103869)[ 0.239] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[ziti.c:refresh_cb] timeout[60000]
(103869)[ 0.239] DEBUG ziti-sdk:ziti.c:1384 update_services() ztx[0] sending service event initial[true] 3 added, 0 removed, 0 changed
(103869)[ 0.240] DEBUG ziti-sdk:zitilib.c:901 do_ziti_bind() requesting bind fd[13] to service[@2609]
(103869)[ 0.253] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/services/AqErEuQI8ZfkKZzPTaVvt/edge-routers] in 0.013 s
(103869)[ 0.253] DEBUG ziti-sdk:bind.c:273 list_routers_cb() server0.0 zpixr01/tls://zpixr01.vigitronic.eu:8442
(103869)[ 0.267] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed POST[/sessions] in 0.027 s
(103869)[ 0.267] DEBUG ziti-sdk:bind.c:136 process_bindings() server0.0 checking router[zpixr01]
(103869)[ 0.267] DEBUG ziti-sdk:bind.c:139 process_bindings() server0.0 router[zpixr01] is not connected
(103869)[ 0.267] DEBUG ziti-sdk:zitilib.c:883 on_ziti_bind() successfully bound fd[13] to service[2609]
(103869)[ 0.315] DEBUG ziti-sdk:channel.c:966 on_tls_connect() ch[0] connected alpn[ziti-edge]
(103869)[ 0.352] INFO ziti-sdk:channel.c:734 hello_reply_cb() ch[0] connected. EdgeRouter version: v1.6.6|207d28c6bdee|2025-07-25T17:21:06Z|linux|amd64
(103869)[ 0.352] DEBUG ziti-sdk:bind.c:136 process_bindings() server0.0 checking router[zpixr01]
(103869)[ 0.352] DEBUG ziti-sdk:bind.c:537 start_binding() server0.0 requesting BIND on ch[zpixr01]
(103869)[ 0.352] DEBUG ziti-sdk:bind.c:171 update_bindings() server0.0 bindings: active[1] target[1]
(103869)[ 0.352] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[channel.c:send_latency_probe] timeout[60000]
(103869)[ 0.352] DEBUG ziti-sdk:deadline.h:38 clear_deadline() expire_cb[channel.c:ch_connect_timeout]
(103869)[ 0.366] DEBUG ziti-sdk:bind.c:508 bind_reply_cb() server0.0 bound successfully on router[zpixr01]
(103869)[ 0.366] DEBUG ziti-sdk:channel.c:238 ziti_channel_add_receiver() ch[0] added receiver[0]

Client logs

(13118)[ 0.000] INFO ziti-sdk:utils.c:196 ziti_log_set_level() set log level: root=4/DEBUG
(13118)[ 0.000] INFO ziti-sdk:utils.c:165 ziti_log_init() Ziti C SDK version 1.7.8 @g727c6bf(HEAD) starting at (2025-09-22T11:57:54.346)
(13118)[ 0.000] DEBUG ziti-sdk:zitilib.c:1056 looper() loop is starting
(13118)[ 0.009] DEBUG ziti-sdk:zitilib.c:230 load_ziti_ctx() loading identity from identity.json
(13118)[ 0.018] INFO ziti-sdk:ziti.c:512 ziti_start_internal() ztx[0] enabling Ziti Context
(13118)[ 0.018] INFO ziti-sdk:ziti.c:528 ziti_start_internal() ztx[0] using tlsuv[v0.37.1/OpenSSL 3.5.0 8 Apr 2025]
(13118)[ 0.018] INFO ziti-sdk:ziti_ctrl.c:637 ziti_ctrl_init() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] controller initialized
(13118)[ 0.018] DEBUG ziti-sdk:ziti_ctrl.c:648 ziti_ctrl_init() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] ziti controller client initialized
(13118)[ 0.018] INFO ziti-sdk:ziti.c:606 ztx_init_controller() ztx[0] Loading ziti context with controller[https://zpix.vigitronic.eu:8440/edge/client/v1]
(13118)[ 0.018] DEBUG ziti-sdk:ziti.c:537 ziti_start_internal() ztx[0] using metrics interval: 0
(13118)[ 0.018] DEBUG ziti-sdk:ziti.c:226 ziti_set_unauthenticated() ztx[0] setting auth_state[0] to 0
(13118)[ 0.018] DEBUG ziti-sdk:ziti_ctrl.c:380 ziti_ctrl_clear_api_session() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] clearing api session token for ziti_controller
(13118)[ 0.018] DEBUG ziti-sdk:ziti_ctrl.c:1106 ctrl_paging_req() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] starting paging request GET[/external-jwt-signers]
(13118)[ 5.269] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/version] in 5.148 s
(13118)[ 5.269] INFO ziti-sdk:ziti.c:2038 version_pre_auth_cb() ztx[0] connected to Legacy controller https://zpix.vigitronic.eu:8440/edge/client/v1 version v1.6.6(207d28c6bdee 2025-07-25T17:21:06Z)
(13118)[ 5.270] DEBUG ziti-sdk:legacy_auth.c:238 auth_timer_cb() refreshing session[(nil)]
(13118)[ 5.283] DEBUG ziti-sdk:ziti_ctrl.c:487 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] received 0/0 for paging request GET[/external-jwt-signers]
(13118)[ 5.283] DEBUG ziti-sdk:ziti_ctrl.c:497 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed paging request GET[/external-jwt-signers] in 5.161 s
(13118)[ 5.283] DEBUG ziti-sdk:ziti.c:664 ext_jwt_singers_cb() ztx[0] 0 external auth providers available
(13118)[ 5.299] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed POST[/authenticate?method=cert] in 0.029 s
(13118)[ 5.299] DEBUG ziti-sdk:ziti_ctrl.c:394 ctrl_login_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] authenticated successfully session[cmfv2o34awtnaeldvln6gvlgy]
(13118)[ 5.299] DEBUG ziti-sdk:legacy_auth.c:170 login_cb() logged in successfully => api_session[cmfv2o34awtnaeldvln6gvlgy]
(13118)[ 5.299] DEBUG ziti-sdk:ziti.c:381 ziti_set_fully_authenticated() ztx[0] setting auth_state[0] to 3
(13118)[ 5.299] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[ziti.c:refresh_cb] timeout[0]
(13118)[ 5.299] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[posture.c:ziti_pr_ticker_cb] timeout[1]
(13118)[ 5.299] DEBUG ziti-sdk:legacy_auth.c:309 refresh_delay() api session set based on session->expireSeconds, next refresh in 3540s
(13118)[ 5.300] DEBUG ziti-sdk:ziti.c:1740 ztx_process_deadlines() ztx[0] calling ziti.c:refresh_cb(0x7f586c0059c0)
(13118)[ 5.300] DEBUG ziti-sdk:ziti_ctrl.c:1106 ctrl_paging_req() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] starting paging request GET[/current-identity/edge-routers]
(13118)[ 5.301] DEBUG ziti-sdk:ziti.c:1740 ztx_process_deadlines() ztx[0] calling posture.c:ziti_pr_ticker_cb(0x7f586c0059c0)
(13118)[ 5.301] INFO ziti-sdk:posture.c:206 ziti_send_posture_data() ztx[0] first run or potential controller restart detected
(13118)[ 5.301] DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[TRUE], must_send_every_time[TRUE], new_controller_instance[TRUE]
(13118)[ 5.301] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[posture.c:ziti_pr_ticker_cb] timeout[20000]
(13118)[ 5.328] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-api-session] in 0.029 s
(13118)[ 5.328] DEBUG ziti-sdk:ziti_ctrl.c:394 ctrl_login_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] authenticated successfully session[cmfv2o34awtnaeldvln6gvlgy]
(13118)[ 5.328] DEBUG ziti-sdk:ziti.c:2235 api_session_cb() ztx[0] app is not requiring expiration check
(13118)[ 5.342] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-identity] in 0.043 s
(13118)[ 5.356] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-identity] in 0.056 s
(13118)[ 5.370] DEBUG ziti-sdk:ziti_ctrl.c:487 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] received 1/1 for paging request GET[/current-identity/edge-routers]
(13118)[ 5.370] DEBUG ziti-sdk:ziti_ctrl.c:497 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed paging request GET[/current-identity/edge-routers] in 0.070 s
(13118)[ 5.370] INFO ziti-sdk:channel.c:265 new_ziti_channel() ch[0] (zpixr01) new channel for ztx[0] identity[cbf38f5a-c04d-4204-b0ed-509ebdcd0662.zpix]
(13118)[ 5.370] DEBUG ziti-sdk:channel.c:316 ziti_channel_set_url() ch[0] setting channel[zpixr01] url[tls://zpixr01.vigitronic.eu:8442]
(13118)[ 5.370] INFO ziti-sdk:channel.c:836 reconnect_channel() ch[0] reconnecting NOW
(13118)[ 5.370] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[channel.c:reconnect_cb] timeout[0]
(13118)[ 5.371] DEBUG ziti-sdk:ziti.c:1740 ztx_process_deadlines() ztx[0] calling channel.c:reconnect_cb(0x7f586c0f3970)
(13118)[ 5.371] DEBUG ziti-sdk:channel.c:802 reconnect_cb() ch[0] connecting to tls://zpixr01.vigitronic.eu:8442
(13118)[ 5.371] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[channel.c:ch_connect_timeout] timeout[20000]
(13118)[ 5.384] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed GET[/current-api-session/service-updates] in 0.084 s
(13118)[ 5.384] DEBUG ziti-sdk:ziti_ctrl.c:1106 ctrl_paging_req() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] starting paging request GET[/services?configTypes=all]
(13118)[ 5.398] DEBUG ziti-sdk:ziti_ctrl.c:487 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] received 2/2 for paging request GET[/services?configTypes=all]
(13118)[ 5.398] DEBUG ziti-sdk:ziti_ctrl.c:497 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed paging request GET[/services?configTypes=all] in 0.013 s
(13118)[ 5.398] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[ziti.c:refresh_cb] timeout[60000]
(13118)[ 5.398] DEBUG ziti-sdk:ziti.c:1384 update_services() ztx[0] sending service event initial[true] 2 added, 0 removed, 0 changed
(13118)[ 5.399] DEBUG ziti-sdk:zitilib.c:1282 Ziti_resolve() host[45cb4a61-018d-4432-aff2-e0880b39687a.zpix] port[2609]
(13118)[ 5.438] DEBUG ziti-sdk:zitilib.c:1197 resolve_cb() resolving 45cb4a61-018d-4432-aff2-e0880b39687a.zpix
(13118)[ 5.438] DEBUG ziti-sdk:zitilib.c:542 find_service() looking up 0:45cb4a61-018d-4432-aff2-e0880b39687a.zpix:2609
(13118)[ 5.438] DEBUG ziti-sdk:zitilib.c:1205 resolve_cb() 45cb4a61-018d-4432-aff2-e0880b39687a.zpix:2609 => 2609
(13118)[ 5.438] DEBUG ziti-sdk:zitilib.c:1216 resolve_cb() assigned 45cb4a61-018d-4432-aff2-e0880b39687a.zpix => 1004064
(13118)[ 5.439] DEBUG ziti-sdk:zitilib.c:628 do_ziti_connect() connecting fd[10] to 100.64.0.1:2609
(13118)[ 5.439] DEBUG ziti-sdk:zitilib.c:542 find_service() looking up 1:45cb4a61-018d-4432-aff2-e0880b39687a.zpix:2609
(13118)[ 5.439] DEBUG ziti-sdk:zitilib.c:690 do_ziti_connect() connecting fd[10] to service[2609]
(13118)[ 5.439] DEBUG ziti-sdk:connect.c:431 connect_get_service_cb() conn0.0/K5JaKomr/Connecting got service[2609] id[AqErEuQI8ZfkKZzPTaVvt]
(13118)[ 5.439] DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(13118)[ 5.439] DEBUG ziti-sdk:connect.c:527 process_connect() conn0.0/K5JaKomr/Connecting requesting 'Dial' session for service[2609]
(13118)[ 10.491] DEBUG ziti-sdk:channel.c:966 on_tls_connect() ch[0] connected alpn[ziti-edge]
(13118)[ 10.512] DEBUG ziti-sdk:ziti_ctrl.c:502 ctrl_body_cb() ctrl[https://zpix.vigitronic.eu:8440/edge/client/v1] completed POST[/sessions] in 5.073 s
(13118)[ 10.512] DEBUG ziti-sdk:connect.c:486 connect_get_net_session_cb() conn0.0/K5JaKomr/Connecting got session[cmfv2o754wtngeldv9xqroilr] for service[2609]
(13118)[ 10.512] DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(13118)[ 10.512] DEBUG ziti-sdk:connect.c:550 process_connect() conn0.0/K5JaKomr/Connecting starting Dial connection for service[2609] with session[cmfv2o754wtngeldv9xqroilr]
(13118)[ 10.512] DEBUG ziti-sdk:connect.c:419 ziti_connect() conn0.0/K5JaKomr/Connecting waiting for suitable channel
(13118)[ 10.512] DEBUG ziti-sdk:connect.c:552 process_connect() conn0.0/K5JaKomr/Connecting no active edge routers, pending ER connection
(13118)[ 10.525] INFO ziti-sdk:channel.c:734 hello_reply_cb() ch[0] connected. EdgeRouter version: v1.6.6|207d28c6bdee|2025-07-25T17:21:06Z|linux|amd64
(13118)[ 10.525] DEBUG ziti-sdk:posture.c:210 ziti_send_posture_data() ztx[0] posture checks must_send set to TRUE, new_session_id[FALSE], must_send_every_time[TRUE], new_controller_instance[FALSE]
(13118)[ 10.525] DEBUG ziti-sdk:connect.c:550 process_connect() conn0.0/K5JaKomr/Connecting starting Dial connection for service[2609] with session[cmfv2o754wtngeldv9xqroilr]
(13118)[ 10.525] DEBUG ziti-sdk:connect.c:408 ziti_connect() conn0.0/K5JaKomr/Connecting selected ch[zpixr01@tls://zpixr01.vigitronic.eu:8442] for best latency(18263536 ms)
(13118)[ 10.525] DEBUG ziti-sdk:channel.c:238 ziti_channel_add_receiver() ch[0] added receiver[0]
(13118)[ 10.525] DEBUG ziti-sdk:ziti.c:1697 do_ztx_set_deadline() ztx[0] expire_cb[channel.c:send_latency_probe] timeout[60000]
(13118)[ 10.525] DEBUG ziti-sdk:deadline.h:38 clear_deadline() expire_cb[channel.c:ch_connect_timeout]
(13118)[ 10.539] ERROR ziti-sdk:connect.c:1068 connect_reply_cb() conn0.0/K5JaKomr/Connecting failed to connect, reason=service AqErEuQI8ZfkKZzPTaVvt has no terminators for instanceId 45cb4a61-018d-4432-aff2-e0880b39687a.zpix
(13118)[ 10.539] DEBUG ziti-sdk:connect.c:323 complete_conn_req() conn0.0/K5JaKomr/Disconnected Disconnected failed: connection is closed
(13118)[ 10.539] WARN ziti-sdk:zitilib.c:534 on_ziti_connect() failed to establish ziti connection: -24(connection is closed)
(13118)[ 10.539] DEBUG ziti-sdk:zitilib.c:508 on_bridge_close() closed conn for socket(10)
(13118)[ 10.539] DEBUG ziti-sdk:connect.c:893 flush_to_client() conn0.0/K5JaKomr/Closed no data_cb: can't flush, 0 bytes available
(13118)[ 10.539] DEBUG ziti-sdk:connect.c:184 close_conn_internal() conn0.0/K5JaKomr/Closed removing
(13118)[ 10.539] DEBUG ziti-sdk:channel.c:247 ziti_channel_rem_receiver() ch[0] removed receiver[0]
(13118)[ 10.539] DEBUG ziti-sdk:ziti.c:1691 grim_reaper() ztx[0] reaped 1 closed (out of 1 total) connections

I would be very grateful for any input on this topic, I've been stuck on it for quite some time.

I forgot to also provide the python code for both side, here they are :

Host python code
from flask import Flask
import openziti
import sys

app = Flask(__name__)
bind_opts = {}  # populated in main

@openziti.zitify(bindings={':2609': bind_opts,})
def runApp():
    from waitress import serve
    print("starting server on OpenZiti overlay")
    #the port is only used to integrate OpenZiti with frameworks that expect a "hostname:port" combo
    serve(app,port=2609)

@app.route('/')
def hello_world():  # put application's code here
    print("received a request to /")
    return 'Have some Ziti!'


@app.route('/json')
def some_json():  # put application's code here
    print("received a request to /json")
    return '{"here":"is", "some":"json"}'

if __name__ == '__main__':
    bind_opts['ztx'] = sys.argv[1]
    bind_opts['service'] = sys.argv[2]
    runApp()

I run the app with "python3 test_ziti.py "ziti/identity.json" "2609" "

Client's python code
import os
import openziti
import requests


ztx = openziti.load("identity.json")
if ztx is None:
    raise RuntimeError("Identity load failed")

openziti.monkeypatch()

resp = requests.get("http://45cb4a61-018d-4432-aff2-e0880b39687a.zpix:2609/hello")
print(resp.status_code)
print(resp.text)

What’s the name of the OpenZiti identity that’s running the host app? I couldn’t tell from the logs. You probably know this, but when your host configuration sets bindUsingEdgeIdentity, clients will need to set dialOptions.identity to the name of the identity. If your identity is named after the hostname (fqdn) that you’re using to access it (e.g. “45cb4a61-018d-4432-aff2-e0880b39687
a.zpix”) then it should be working.

It would be helpful to see the output of ziti edge list terminators while your host app is running if you have access to the controller.

1 Like

Thanks for your answer,
The host's identity name is "45cb4a61-018d-4432-aff2-e0880b39687
a.zpix”, which is the address I try to dial from the client.

By this do you mean the ziti hostname or the actual linux hostname ? The former is but not the latter

After listing the terminators there's none with that ID showing up. So the problem clearly seems to be host-side, but I don't see anything suspicious in the logs

Yes, I’m referring to the ziti hostname.

fwiw it’s probably just a copy/paste artifact, but I noticed that your hosting identity name appears to have an embedded newline in the error message from the client.

Do any of your terminators for this service show an identity at all in the terminator list? It shouldn’t make a difference, but I wonder if setting listenOptions.identity $tunneler_id.name would behave differently?

1 Like

It is a copy/paste mistake, mb.

Yes there are currently 3 other terminators for this service, all showing up in the list. Though they're using the tunneler, the problematic one is the only one running the SDK.

Sorry I may be missing something fundamental, but I don’t quite understand what $tunneler_id.name refers to. And is it supposed to replace bindUsingEdgeIdentity?

Python SDK does not looks at host.v1 configuration. It would feel weird if it did.

bind_opts does support specifying terminator with a tuple like this

bind_opts["service"] = serviceName, terminator

Does it help at all?

1 Like

Thanks, that was it! By adding the terminator's name in bind_opts like this :

bind_opts['service'] = ("2609", "45cb4a61-018d-4432-aff2-e0880b39687a.zpix")

I am now able to dial it from the client with no issue.
Thanks for your help

1 Like