K3RN3L_P4N1C
01/13/2026, 10:14 AM2026-01-13T10:06:45.161892Z ERROR ThreadId(02) operator::workload_patch_request_controller: 494: mirrordclusterworkloadpatchrequests watch stream encountered an error error=failed to perform initial object list: ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): storage is (re)initializing: TooManyRequests
2026-01-13T10:06:45.198122Z ERROR ThreadId(02) operator::shared_session_watcher: 262: mirrordclustersessions watch stream encountered an error error=watch stream failed: ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): storage is (re)initializing: TooManyRequests
2026-01-13T10:06:45.216294Z INFO ThreadId(01) operator_service: 726: Shutting down probe and OpenAPI server to start full API
2026-01-13T10:06:45.217852Z ERROR ThreadId(02) operator::external_resources_controller: 292: mirrordclusterexternalresources watch stream encountered an error error=watch stream failed: ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): storage is (re)initializing: TooManyRequests
2026-01-13T10:06:45.283038Z INFO ThreadId(01) operator_service: 737: Starting full API server
2026-01-13T10:06:45.988932Z ERROR ThreadId(02) operator::workload_patch_request_controller: 494: mirrordclusterworkloadpatchrequests watch stream encountered an error error=failed to perform initial object list: ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): storage is (re)initializing: TooManyRequests
2026-01-13T10:06:47.624663Z ERROR ThreadId(02) operator::shared_session_watcher: 262: mirrordclustersessions watch stream encountered an error error=failed to perform initial object list: ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): ApiError: storage is (re)initializing: TooManyRequests (ErrorResponse { status: "Failure", message: "storage is (re)initializing", reason: "TooManyRequests", code: 429 }): storage is (re)initializing: TooManyRequests
Is this related to our cluster or indicates a problem in our setup ?Aviram Hassan
01/13/2026, 10:15 AMAviram Hassan
01/13/2026, 10:15 AMK3RN3L_P4N1C
01/13/2026, 10:16 AMK3RN3L_P4N1C
01/13/2026, 10:21 AMjson
{
"agent": {
"image": "ghcr.io/metalbear-co/mirrord:3.180.0"
},
"feature": {
"network": {
"incoming": {
"mode": "steal",
"http_filter": {
"path_filter": "^(?!/health/)"
},
"port_mapping": [
[
5392,
8080
]
]
},
"outgoing": true
},
"fs": "read",
"env": true
},
"telemetry": false,
"kubeconfig": "~/.kube/config",
"target": {
"path": "deploy/aao-backend/container/aao-backend",
"namespace": "aao-application"
}
}
`K3RN3L_P4N1C
01/13/2026, 10:22 AMbash
2026-01-13T10:20:13.905918Z INFO ThreadId(02) operator_session::logs: 110: client_user="system:serviceaccount:admin-namespace:andrei-ziminov" client_name="Elliot Alderson" client_hostname="Elliots-MacBook-Pro.local" client_id="SVIVGClHdnPP+VMPrzaJggoaW9U3/RjHY64omLvbyns" session_id="52dbc83e224cf9c1" target_name="aao-backend" target_namespace="aao-application" target_type="deployment" Session Start
2026-01-13T10:20:16.553786Z ERROR ThreadId(02) operator_proxy::layer: 108: error=WebSocket protocol error: Connection reset without closing handshakeK3RN3L_P4N1C
01/13/2026, 10:23 AMAviram Hassan
01/13/2026, 10:23 AMK3RN3L_P4N1C
01/13/2026, 10:23 AMK3RN3L_P4N1C
01/13/2026, 10:23 AMAviram Hassan
01/13/2026, 10:23 AMK3RN3L_P4N1C
01/13/2026, 10:23 AMAviram Hassan
01/13/2026, 10:25 AMAviram Hassan
01/13/2026, 10:25 AMK3RN3L_P4N1C
01/13/2026, 10:56 AMK3RN3L_P4N1C
01/13/2026, 11:01 AMK3RN3L_P4N1C
01/13/2026, 11:02 AMK3RN3L_P4N1C
01/13/2026, 11:09 AMbash
Unhandled exception. Npgsql.NpgsqlException (0x80004005): Failed to connect to 100.82.65.20:5432
---> System.Net.Sockets.SocketException (51): Network is unreachable
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at Npgsql.Internal.NpgsqlConnector.ConnectAsync(NpgsqlTimeout timeout, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.ConnectAsync(NpgsqlTimeout timeout, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.<Open>g__OpenCore|209_0(NpgsqlConnector conn, String username, SslMode sslMode, GssEncryptionMode gssEncMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.PoolingDataSource.OpenNewConnector(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.PoolingDataSource.<Get>g__RentAsync|33_0(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnection.<Open>g__OpenAsync|42_0(Boolean async, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrationsAsync(CancellationToken cancellationToken)
at Npgsql.EntityFrameworkCore.PostgreSQL.Migrations.Internal.NpgsqlHistoryRepository.GetAppliedMigrationsAsync(CancellationToken cancellationToken)
at Npgsql.EntityFrameworkCore.PostgreSQL.Migrations.Internal.NpgsqlMigrator.MigrateAsync(String targetMigration, CancellationToken cancellationToken)
at Program.<Main>$(String[] args) in /Volumes/T9/Development/Namespaces/ILS-Karlsruhe/Projects/AAO-Portal/aao-portal-backend/src/AAOPortal.Api/Program.cs:line 48
at Program.<Main>$(String[] args) in /Volumes/T9/Development/Namespaces/ILS-Karlsruhe/Projects/AAO-Portal/aao-portal-backend/src/AAOPortal.Api/Program.cs:line 50
at Program.<Main>(String[] args)
seems that it resolves the ip from the connection string but has troubles to connect to itAviram Hassan
01/13/2026, 11:41 AMAviram Hassan
01/13/2026, 11:41 AMAviram Hassan
01/13/2026, 11:41 AMK3RN3L_P4N1C
01/13/2026, 12:27 PMjson
{
"agent": {
"image": "ghcr.io/metalbear-co/mirrord:3.180.0",
"extraConfig": {
"privileged": true
}
},
"feature": {
"network": {
"incoming": {
"mode": "steal",
"http_filter": {
"path_filter": "^(?!/health/)"
},
"port_mapping": [
[
5392,
8080
]
]
},
"outgoing": true
},
"fs": "read",
"env": true
},
"telemetry": false,
"kubeconfig": "~/.kube/config",
"target": {
"path": "deploy/aao-backend/container/aao-backend",
"namespace": "aao-application"
}
}
like this? its telling me Property 'extraConfig' is not allowedAviram Hassan
01/13/2026, 12:28 PMK3RN3L_P4N1C
01/13/2026, 12:28 PMK3RN3L_P4N1C
01/13/2026, 12:28 PMK3RN3L_P4N1C
01/13/2026, 12:40 PMbash
2026-01-13T12:33:26.377574Z WARN ThreadId(02) operator_session: 148: error=failed to create the session resource: ApiError: "404 page not found\n": Failed to parse error data (ErrorResponse { status: "404 Not Found", message: "\"404 page not found\\n\"", reason: "Failed to parse error data", code: 404 })
2026-01-13T12:33:54.199446Z ERROR ThreadId(02) operator::shared_session_watcher: 262: mirrordclustersessions watch stream encountered an error error=watch stream failed: Error deserializing response: invalid type: integer `404`, expected adjacently tagged enum WatchEvent at line 1 column 3: Error deserializing response: invalid type: integer `404`, expected adjacently tagged enum WatchEvent at line 1 column 3: invalid type: integer `404`, expected adjacently tagged enum WatchEvent at line 1 column 3
2026-01-13T12:34:01.817035Z WARN ThreadId(02) operator::mutated_pods_cleanup_controller: 207: pods watch stream encountered an error error=watch stream failed: Error reading events stream: ServiceError: error reading a body from connection: Error reading events stream: ServiceError: error reading a body from connection: ServiceError: error reading a body from connection: error reading a body from connection: peer closed connection without sending TLS close_notify: https://docs.rs/rustls/latest/rustls/manual/_03_howto/index.html#unexpected-eof
20K3RN3L_P4N1C
01/13/2026, 12:41 PMAviram Hassan
01/13/2026, 12:42 PMK3RN3L_P4N1C
01/13/2026, 12:46 PMAviram Hassan
01/13/2026, 12:46 PMAviram Hassan
01/13/2026, 12:47 PMK3RN3L_P4N1C
01/13/2026, 12:47 PMK3RN3L_P4N1C
01/13/2026, 12:47 PMyaml
- name: mirrord-operator
namespace: mirrord
chart: metalbear/mirrord-operator
version: 1.43.0
values:
- agent:
extraConfig:
privileged: true
- createNamespace: false
- roleNamespaces:
- aao-application
- aao-infrastructure
- license:
key: "REDACTED"K3RN3L_P4N1C
01/13/2026, 12:49 PMbash
MIRRORD_INTPROXY_LOG_LEVEL="mirrord=trace" mirrord exec -n aao-application --target deploy/aao-backend -- dotnet run --project src/AAOPortal.Api/AAOPortal.Api.csprojK3RN3L_P4N1C
01/13/2026, 12:49 PMbash
mirrord exec (3.181.0)
โ running on latest!
โ ฒ preparing to launch process
โ layer extracted
โ ฒ checking operator
โ operator license valid
โ user credentials prepared
โ starting session
โ connecting to the target 2026-01-13T12:48:58.297610Z ERROR kube_client::client::builder: failed with status 500 Internal Server Error
โ mirrord exec (3.181.0)
โ running on latest!
โ ฒ preparing to launch process
โ layer extracted
โ ฒ checking operator
โ operator license valid
โ user credentials prepared
โ mirrord exec (3.181.0)
โ running on latest!
โ ฒ preparing to launch process
โ layer extracted
x checking operator
โ operator license valid
โ user credentials prepared
x mirrord exec (3.181.0)
โ running on latest!
x preparing to launch process
โ layer extracted
x checking operator
โ operator license valid
โ user credentials prepared
x starting session
x connecting to the target Error: ร mirrord operator API failed: creating a websocket connection failed with ApiError: Failed to acquire the session: failed to create the session resource: ApiError: "404 page not found\n": Failed to parse error
โ data (ErrorResponse { status: "404 Not Found", message: "\"404 page not found\\n\"", reason: "Failed to parse error data", code: 404 }): 500 Internal Server Error (ErrorResponse { status: "Failure", message:
โ "Failed to acquire the session: failed to create the session resource: ApiError: \"404 page not found\\n\": Failed to parse error data (ErrorResponse { status: \"404 Not Found\", message: \"\\\"404 page not
โ found\\\\n\\\"\", reason: \"Failed to parse error data\", code: 404 })", reason: "500 Internal Server Error", code: 500 })
help: Please check the following:
1. The operator is running and the logs are not showing any errors.
2. You have sufficient permissions to port forward to the operator.
If you want to run without the operator, please set `"operator": false` in the mirrord configuration file.
Please remember that some features are supported only when using mirrord operator (https://metalbear.com/mirrord/docs/overview/teams?utm_source=erropfailed&utm_medium=cli#supported-features).
- If you're still stuck:
>> Please open a new bug report at https://github.com/metalbear-co/mirrord/issues/new/choose
>> Or join our Slack https://metalbear.com/slack and request help in #mirrord-help
>> Or email us at hi@metalbear.comAviram Hassan
01/13/2026, 12:50 PMAviram Hassan
01/13/2026, 12:50 PMK3RN3L_P4N1C
01/13/2026, 12:51 PMAviram Hassan
01/13/2026, 12:54 PMK3RN3L_P4N1C
01/13/2026, 12:57 PMK3RN3L_P4N1C
01/13/2026, 12:58 PMbash
mirrord exec -n aao-application --target deploy/aao-backend -- \
bash -lc 'python3 - <<PY
import socket
print("resolving...")
addr = socket.getaddrinfo("postgresql-primary.aao-infrastructure.svc.cluster.local", 5432)[0][4]
print("addr:", addr)
s=socket.socket()
s.settimeout(3)
print("connecting...")
s.connect(addr)
print("CONNECTED OK")
PY'
Output:
bash
addr: ('100.82.65.20', 5432)
CONNECTED OK
So:
โข DNS works
โข TCP connectivity from the agentโs network context works
โข The DB is reachable
โธป
โ This does not work
nc (and also .NET / Npgsql) fail with Network is unreachable:
bash
mirrord exec -n aao-application --target deploy/aao-backend -- \
bash -lc 'nc -vz postgresql-primary.aao-infrastructure.svc.cluster.local 5432'
Result:
bash
nc: connectx to postgresql-primary.aao-infrastructure.svc.cluster.local port 5432 (tcp) failed: Network is unreachable
Same error when running a local .NET 10 app (Npgsql) via mirrord.
โธป
๐ Key observations
โข The agent is not being killed โ it shuts down because the local app exits after the DB connection failure.
โข Pythonโs socket.connect() succeeds, but:
โข nc
โข .NET (Npgsql)
fail consistently.
โข This strongly suggests a syscall / socket path difference (e.g. connectx, non-blocking connect, happy-eyeballs, etc.).
โข On macOS, tools like nc and .NET often use connectx, whereas Python uses a simpler connect() path.
โข When mirrord doesnโt intercept that path, the connection falls back to the local host network โ which obviously canโt route to 100.82.x.x.
โธป
๐ง Working assumption
mirrord on macOS does not fully intercept certain outbound TCP paths (likely connectx / nonblocking connect), especially in non-privileged mode.
That would explain:
โข Why Python works
โข Why nc + .NET fail
โข Why DNS resolution still succeeds
โข Why the behavior is consistent and reproducible
โธป
๐งช Things we tried / confirmed
โข No NetworkPolicies blocking traffic
โข Same mirrord config works on another cluster
โข Agent pod can reach DB (verified)
โข Problem reproduces even with:
json
"feature": {
"network": {
"outgoing": false
}
}
โข mirrord internal proxy logs show clean startup, no denial errors โ just no interception for the failing path
โธป
โ Questions
1. Is connectx fully supported on macOS ARM in non-privileged mode?
2. Is this a known limitation / documented caveat?
3. Is there a recommended workaround for .NET / nc users (flags, env vars, config)?
4. Would forcing blocking connect() be expected to fix this?K3RN3L_P4N1C
01/13/2026, 12:58 PMAviram Hassan
01/13/2026, 12:59 PMAviram Hassan
01/13/2026, 12:59 PMAviram Hassan
01/13/2026, 12:59 PMK3RN3L_P4N1C
01/13/2026, 1:00 PMyaml
- agent:
extraConfig:
privileged: true
i will send you the operator logs in a secondK3RN3L_P4N1C
01/13/2026, 1:01 PMK3RN3L_P4N1C
01/13/2026, 1:02 PMyaml
- agent:
extraConfig:
privileged: trueK3RN3L_P4N1C
01/13/2026, 1:03 PMK3RN3L_P4N1C
01/13/2026, 1:04 PMK3RN3L_P4N1C
01/13/2026, 1:05 PMyaml
- agent:
extraConfig:
privileged: true
The agent spins up but gets shut down because the app cant connect to the database and shuts down. I assume the IDE plugin then keills the agentK3RN3L_P4N1C
01/13/2026, 1:06 PMK3RN3L_P4N1C
01/13/2026, 1:07 PMrazz4780
01/13/2026, 1:21 PMkubectl get mirrordclustersessions -o yaml
2. mirrord exec -n aao-application --target deploy/aao-backend -- bash -lc 'nc -vz 100.82.65.20 5432'K3RN3L_P4N1C
01/13/2026, 1:22 PMK3RN3L_P4N1C
01/13/2026, 1:23 PMbash
kubectl get mirrordclustersessions -o yaml
apiVersion: v1
items:
- apiVersion: mirrord.metalbear.co/v1alpha
kind: MirrordClusterSession
metadata:
annotations:
operator.metalbear.co/instance_id: 2e7f90d3-ad69-48c1-9ec6-60231004d38f
creationTimestamp: "2026-01-13T13:17:31Z"
finalizers:
- operator.metalbear.co/sessions-controller
- operator.metalbear.co/sessions-ttl-controller
generation: 1
labels:
operator.metalbear.co/owner: mirrord-operator
name: cc7c10a48c49b04c
resourceVersion: "22310871"
uid: 0c552ae1-3f9c-4f26-9dbe-c5cd5ae99d17
spec:
jiraMetrics:
branchName: dev
namespace: aao-application
owner:
hostname: Elliots-MacBook-Pro.local
k8sUsername: system:serviceaccount:admin-namespace:andrei-ziminov
userId: SVIVGClHdnPP+VMPrzaJggoaW9U3/RjHY64omLvbyns
username: Elliot Alderson
target:
apiVersion: apps/v1
container: aao-backend
kind: Deployment
name: aao-backend
status:
connectedTimestamp: "2026-01-13T13:23:13.166615Z"
kind: List
metadata:
resourceVersion: ""K3RN3L_P4N1C
01/13/2026, 1:24 PMbash
mirrord exec -n aao-application --target deploy/aao-backend -- bash -lc 'nc -vz 100.82.65.20 5432'
* Running command: bash -lc nc -vz 100.82.65.20 5432
* mirrord will target: deployment/aao-backend, no configuration file was loaded
* mirrord will run with the mirrord Operator
* env: all remote environment variables will be fetched
* fs: file operations will default to read from the remote
* incoming: incoming traffic will be mirrored
* outgoing: forwarding is enabled on TCP and UDP
* dns: DNS will be resolved remotely
* internal proxy: logs will be written to /var/folders/dz/z4gwwfvd6y94p_plpwcj4lbc0000gn/T/mirrord-intproxy-1768310635-xjXd9qX.log
* key: b49f5234-59bd-478d-8d4d-bf80671139d1
โ mirrord exec (3.181.0)
โ running on latest!
โ ready to launch process
โ layer extracted
โ using operator
โ operator license valid
โ user credentials prepared
โ session started
โ connected to the target
โ arm64 layer library extracted
โ config summary
โ Ready! /Users/elliot/.profile: line 6: /Users/elliot-mac/.rover/env: No such file or directory
/Users/elliot/.bash_profile: line 16: /Users/elliot-mac/.rover/env: No such file or directory
nc: connectx to 100.82.65.20 port 5432 (tcp) failed: Network is unreachableK3RN3L_P4N1C
01/13/2026, 1:24 PMK3RN3L_P4N1C
01/13/2026, 1:24 PMK3RN3L_P4N1C
01/13/2026, 1:25 PMK3RN3L_P4N1C
01/13/2026, 1:27 PMK3RN3L_P4N1C
01/13/2026, 1:28 PMbash
kubectl describe svc/postgresql-primary -n aao-infrastructure
Name: postgresql-primary
Namespace: aao-infrastructure
Labels: app.kubernetes.io/component=primary
app.kubernetes.io/instance=postgresql
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=postgresql
app.kubernetes.io/version=17.6.0
helm.sh/chart=postgresql-16.7.27
Annotations: meta.helm.sh/release-name: postgresql
meta.helm.sh/release-namespace: aao-infrastructure
Selector: app.kubernetes.io/component=primary,app.kubernetes.io/instance=postgresql,app.kubernetes.io/name=postgresql
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 100.82.65.20
IPs: 100.82.65.20
Port: tcp-postgresql 5432/TCP
TargetPort: tcp-postgresql/TCP
Endpoints: 100.64.0.14:5432
Session Affinity: None
Internal Traffic Policy: Cluster
Events: <none>razz4780
01/13/2026, 1:30 PMmirrord exec -n aao-application --target deploy/aao-backend -f ./path/to/file/with/snippet.json -- bash -lc 'nc -vz 100.82.65.20 5432'
{
"internal_proxy": {
"log_level": "mirrord=trace",
"log_destination": "/path/to/some/log/directory"
}
}K3RN3L_P4N1C
01/13/2026, 1:31 PMrazz4780
01/13/2026, 1:34 PMrazz4780
01/13/2026, 1:34 PMrazz4780
01/13/2026, 1:36 PMnc version?K3RN3L_P4N1C
01/13/2026, 1:38 PMK3RN3L_P4N1C
01/13/2026, 1:38 PMAviram Hassan
01/13/2026, 1:38 PMK3RN3L_P4N1C
01/13/2026, 1:39 PMK3RN3L_P4N1C
01/13/2026, 1:39 PMK3RN3L_P4N1C
01/13/2026, 1:39 PMK3RN3L_P4N1C
01/13/2026, 1:39 PMAviram Hassan
01/13/2026, 1:40 PMrazz4780
01/13/2026, 1:43 PMK3RN3L_P4N1C
01/13/2026, 1:44 PMK3RN3L_P4N1C
01/13/2026, 1:44 PMK3RN3L_P4N1C
01/13/2026, 1:45 PMbash
aao-portal-backend git:(dev) โ mirrord exec -n aao-application --target deploy/aao-backend -f ./snippet.json -- bash -lc 'nc -vz 100.82.65.20 5432'
โ mirrord exec (3.181.0)
โ running on latest!
โ preparing to launch process
โ layer extracted
โ checking operator
โ operator license valid
โ user credentials prepared
โ starting session
โ connecting to the target 2026-01-13T13:43:34.446219Z ERROR kube_client::client::builder: failed with status 500 Internal Server Error
โ ค mirrord exec (3.181.0)
โ running on latest!
โ preparing to launch process
โ layer extracted
โ checking operator
โ operator license valid
โ user credentials prepared
โ ค mirrord exec (3.181.0)
โ running on latest!
โ preparing to launch process
โ layer extracted
x checking operator
โ operator license valid
โ user credentials prepared
x mirrord exec (3.181.0)
โ running on latest!
x preparing to launch process
โ layer extracted
x checking operator
โ operator license valid
โ user credentials prepared
x starting session
x connecting to the target Error: ร mirrord operator API failed: creating a websocket connection failed with ApiError: Failed to acquire the session: failed to create the session resource: ApiError: "404 page not found\n": Failed to parse error
โ data (ErrorResponse { status: "404 Not Found", message: "\"404 page not found\\n\"", reason: "Failed to parse error data", code: 404 }): 500 Internal Server Error (ErrorResponse { status: "Failure", message:
โ "Failed to acquire the session: failed to create the session resource: ApiError: \"404 page not found\\n\": Failed to parse error data (ErrorResponse { status: \"404 Not Found\", message: \"\\\"404 page not
โ found\\\\n\\\"\", reason: \"Failed to parse error data\", code: 404 })", reason: "500 Internal Server Error", code: 500 })
help: Please check the following:
1. The operator is running and the logs are not showing any errors.
2. You have sufficient permissions to port forward to the operator.
If you want to run without the operator, please set `"operator": false` in the mirrord configuration file.
Please remember that some features are supported only when using mirrord operator (https://metalbear.com/mirrord/docs/overview/teams?utm_source=erropfailed&utm_medium=cli#supported-features).
- If you're still stuck:
>> Please open a new bug report at https://github.com/metalbear-co/mirrord/issues/new/choose
>> Or join our Slack https://metalbear.com/slack and request help in #mirrord-help
>> Or email us at hi@metalbear.comK3RN3L_P4N1C
01/13/2026, 1:45 PMrazz4780
01/13/2026, 1:47 PMkubectl get mirrordclustersessions again?K3RN3L_P4N1C
01/13/2026, 1:48 PMK3RN3L_P4N1C
01/13/2026, 1:48 PMK3RN3L_P4N1C
01/13/2026, 1:48 PMrazz4780
01/13/2026, 1:48 PMK3RN3L_P4N1C
01/13/2026, 1:49 PMyaml
- name: mirrord-operator
namespace: mirrord
chart: metalbear/mirrord-operator
version: 1.43.0
values:
- agent:
extraConfig:
privileged: true
- createNamespace: false
- roleNamespaces:
- aao-application
- aao-infrastructure
- license:
key: "REDACTED"K3RN3L_P4N1C
01/13/2026, 1:49 PMrazz4780
01/13/2026, 1:49 PMkubectl get mirrordclustersessions should eventually succeed ๐K3RN3L_P4N1C
01/13/2026, 1:50 PMyaml
- agent:
extraConfig:
privileged: true
and then
helmfile -e prod -l name=mirrord-operator sync -f ./debugging.helmfile.gotmplK3RN3L_P4N1C
01/13/2026, 1:50 PMK3RN3L_P4N1C
01/13/2026, 1:52 PMK3RN3L_P4N1C
01/13/2026, 1:52 PMbash
kubectl get mirrordclustersessions
NAME USER ID USERNAME HOSTNAME K8S USER NAMESPACE TARGET STARTED AT CLOSED AT CLOSE REASON
cb9aec822ea29dac SVIVGClHdnPP+VMPrzaJggoaW9U3/RjHY64omLvbyns Elliot Alderson Elliots-MacBook-Pro.local system:serviceaccount:admin-namespace:andrei-ziminov aao-application {"apiVersion":"apps/v1","container":"aao-backend","kind":"Deployment","name":"aao-backend"} 14sK3RN3L_P4N1C
01/13/2026, 1:52 PMK3RN3L_P4N1C
01/13/2026, 1:52 PMbash
mirrord exec -n aao-application --target deploy/aao-backend -f ./snippet.json -- bash -lc 'nc -vz 100.82.65.20 5432'
* Running command: bash -lc nc -vz 100.82.65.20 5432
* mirrord will target: deployment/aao-backend, the configuration file was loaded from ./snippet.json
* mirrord will run with the mirrord Operator
* env: all remote environment variables will be fetched
* fs: file operations will default to read from the remote
* incoming: incoming traffic will be mirrored
* outgoing: forwarding is enabled on TCP and UDP
* dns: DNS will be resolved remotely
* internal proxy: logs will be written to ./mirrord-intproxy-1768312303-fCRs7Un.log
* key: f971c350-ca20-4546-a773-89f2352a61ca
โ mirrord exec (3.181.0)
โ running on latest!
โ ready to launch process
โ layer extracted
โ using operator
โ operator license valid
โ user credentials prepared
โ session started
โ connected to the target
โ arm64 layer library extracted
โ config summary
โ Ready! /Users/elliot/.profile: line 6: /Users/elliot-mac/.rover/env: No such file or directory
/Users/elliot/.bash_profile: line 16: /Users/elliot-mac/.rover/env: No such file or directory
nc: connectx to 100.82.65.20 port 5432 (tcp) failed: Network is unreachableK3RN3L_P4N1C
01/13/2026, 1:53 PMrazz4780
01/13/2026, 1:56 PMK3RN3L_P4N1C
01/13/2026, 1:57 PMK3RN3L_P4N1C
01/13/2026, 2:03 PMbash
mirrord exec -n aao-application --target deploy/aao-backend -- \
bash -lc 'python3 - <<PY
import socket
print("resolving...")
addr = socket.getaddrinfo("postgresql-primary.aao-infrastructure.svc.cluster.local", 5432)[0][4]
print("addr:", addr)
s=socket.socket()
s.settimeout(3)
print("connecting...")
s.connect(addr)
print("CONNECTED OK")
PY'K3RN3L_P4N1C
01/13/2026, 2:05 PMbash
โ aao-portal-backend git:(dev) โ mirrord exec -n aao-application --target deploy/aao-backend -f ./snippet.json -- \
bash -lc 'python3 - <<PY
import socket
print("resolving...")
addr = socket.getaddrinfo("postgresql-primary.aao-infrastructure.svc.cluster.local", 5432)[0][4]
print("addr:", addr)
s=socket.socket()
s.settimeout(3)
print("connecting...")
s.connect(addr)
print("CONNECTED OK")
PY'
* Running command: bash -lc python3 - <<PY
import socket
print("resolving...")
addr = socket.getaddrinfo("postgresql-primary.aao-infrastructure.svc.cluster.local", 5432)[0][4]
print("addr:", addr)
s=socket.socket()
s.settimeout(3)
print("connecting...")
s.connect(addr)
print("CONNECTED OK")
PY
* mirrord will target: deployment/aao-backend, the configuration file was loaded from ./snippet.json
* mirrord will run with the mirrord Operator
* env: all remote environment variables will be fetched
* fs: file operations will default to read from the remote
* incoming: incoming traffic will be mirrored
* outgoing: forwarding is enabled on TCP and UDP
* dns: DNS will be resolved remotely
* internal proxy: logs will be written to ./mirrord-intproxy-1768313105-cqb4DGx.log
* key: 6fb5f1a0-0b48-44e3-b00c-89701719f7e0
โ mirrord exec (3.181.0)
โ running on latest!
โ ready to launch process
โ layer extracted
โ using operator
โ operator license valid
โ user credentials prepared
โ session started
โ connected to the target
โ arm64 layer library extracted
โ config summary
โ Ready! /Users/elliot/.profile: line 6: /Users/elliot-mac/.rover/env: No such file or directory
/Users/elliot/.bash_profile: line 16: /Users/elliot-mac/.rover/env: No such file or directory
resolving...
addr: ('100.82.65.20', 5432)
connecting...
CONNECTED OKK3RN3L_P4N1C
01/13/2026, 2:05 PMK3RN3L_P4N1C
01/13/2026, 2:30 PMK3RN3L_P4N1C
01/13/2026, 2:30 PMbash
mirrord exec -n aao-application --target deploy/aao-backend -f ./snippet.json -- bash -lc 'nc -4 -O -vz 100.82.65.20 5432'
* Running command: bash -lc nc -4 -O -vz 100.82.65.20 5432
* mirrord will target: deployment/aao-backend, the configuration file was loaded from ./snippet.json
* mirrord will run with the mirrord Operator
* env: all remote environment variables will be fetched
* fs: file operations will default to read from the remote
* incoming: incoming traffic will be mirrored
* outgoing: forwarding is enabled on TCP and UDP
* dns: DNS will be resolved remotely
* internal proxy: logs will be written to ./mirrord-intproxy-1768314588-koReedJ.log
* key: 689cc6c6-ad47-4c7b-8b47-c1b693a0b3e8
โ mirrord exec (3.181.0)
โ running on latest!
โ ready to launch process
โ layer extracted
โ using operator
โ operator license valid
โ user credentials prepared
โ session started
โ connected to the target
โ arm64 layer library extracted
โ config summary
โ Ready! /Users/elliot/.profile: line 6: /Users/elliot-mac/.rover/env: No such file or directory
/Users/elliot/.bash_profile: line 16: /Users/elliot-mac/.rover/env: No such file or directory
Connection to 100.82.65.20 port 5432 [tcp/postgresql] succeeded!K3RN3L_P4N1C
01/13/2026, 2:30 PMK3RN3L_P4N1C
01/13/2026, 2:30 PMK3RN3L_P4N1C
01/13/2026, 2:31 PMrazz4780
01/13/2026, 2:34 PMK3RN3L_P4N1C
01/13/2026, 2:36 PMrazz4780
01/13/2026, 2:39 PM-O, it should workrazz4780
01/13/2026, 2:39 PMconnectx(), we'll need to add itK3RN3L_P4N1C
01/13/2026, 2:40 PMK3RN3L_P4N1C
01/13/2026, 2:41 PMK3RN3L_P4N1C
01/13/2026, 2:41 PMK3RN3L_P4N1C
01/13/2026, 2:56 PMK3RN3L_P4N1C
01/13/2026, 5:23 PMbash
#!/usr/bin/env bash
set -euo pipefail
IMAGE_NAME="aao-backend:debug"
DOCKERFILE="src/AAOPortal.Api/Dockerfile.debug"
CONTAINER_NAME="aao-backend"
MIRRORD_CONFIG="src/AAOPortal.Api/mirrord.json"
NAMESPACE="aao-application"
TARGET="deploy/aao-backend"
PORT="5392"
echo "โถ Building image: ${IMAGE_NAME}"
docker build -t "${IMAGE_NAME}" -f "${DOCKERFILE}" .
echo "โถ Starting container via mirrord (port ${PORT})"
exec mirrord container \
-f "${MIRRORD_CONFIG}" \
-n "${NAMESPACE}" \
--target "${TARGET}" \
-- \
docker run --rm \
--name "${CONTAINER_NAME}" \
"${IMAGE_NAME}"
Minimal Dockerfile.debug
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0.101-azurelinux3.0
WORKDIR /src
COPY . ./
ENV ASPNETCORE_URLS=http://0.0.0.0:5392
ENV ASPNETCORE_ENVIRONMENT=debug
EXPOSE 5392
CMD ["dotnet", "run", "--project", "src/AAOPortal.Api/AAOPortal.Api.csproj", "-c", "Debug", "--no-launch-profile"]
How this is used
1. Run the shell script
2. The app starts inside a Linux container via mirrord container
3. Attach your local Docker debugger (Rider in my case) to the running container
4. Debug as usual
Why this works
On macOS, newer runtimes (including .NET 10) rely heavily on connectx() and other Apple-specific networking APIs.
as stated by @razz4780 mirrord currently has a missing / incomplete hook for connectx, which causes outbound connections to fail or the agent to shut down.
By running the app inside a Linux container, the runtime uses standard Linux syscalls (connect, socket, etc.) instead of macOS networking primitives.
mirrord can fully intercept and proxy those calls โ so networking behaves correctly again.K3RN3L_P4N1C
01/13/2026, 5:23 PMYuan
01/22/2026, 4:24 AMconnectx() detour in mirrord which works in my test using nc and a C test program.
It is released in 3.183.0.
Can you try it and let me know if the issue is resolved?K3RN3L_P4N1C
01/26/2026, 1:30 PMK3RN3L_P4N1C
01/28/2026, 4:05 PMK3RN3L_P4N1C
01/28/2026, 4:06 PMK3RN3L_P4N1C
01/28/2026, 4:06 PMK3RN3L_P4N1C
01/28/2026, 4:06 PMK3RN3L_P4N1C
01/28/2026, 4:06 PMYuan
01/28/2026, 4:25 PMK3RN3L_P4N1C
01/28/2026, 4:56 PMbash
โ aao-portal-backend git:(userstory/344-file-management) โ mirrord exec -n aao-application --target deploy/aao-backend -f ./snippet.json -- bash -lc 'nc -vz 100.82.65.20 5432'
* Running command: bash -lc nc -vz 100.82.65.20 5432
* mirrord will target: deployment/aao-backend, the configuration file was loaded from ./snippet.json
* mirrord will run with the mirrord Operator
* env: all remote environment variables will be fetched
* fs: file operations will default to read from the remote
* incoming: incoming traffic will be mirrored
* outgoing: forwarding is enabled on TCP and UDP
* dns: DNS will be resolved remotely
* internal proxy: logs will be written to ./mirrord-intproxy-1769619330-nFO7UhE.log
* key: f08037c2-0e57-4951-a4ae-ed18dbdc8957
โ mirrord exec (3.183.0)
โ running on latest!
โ ready to launch process
โ layer extracted
โ using operator
โ operator license valid
โ user credentials prepared
โ session started
โ connected to the target
โ arm64 layer library extracted
โ config summary
โ Ready! /Users/elliot/.profile: line 6: /Users/elliot-mac/.rover/env: No such file or directory
/Users/elliot/.bash_profile: line 16: /Users/elliot-mac/.rover/env: No such file or directory
Connection to 100.82.65.20 port 5432 [tcp/postgresql] succeeded!K3RN3L_P4N1C
01/28/2026, 4:56 PMAviram Hassan
01/28/2026, 5:07 PMK3RN3L_P4N1C
01/28/2026, 7:12 PMAviram Hassan
01/28/2026, 7:12 PMK3RN3L_P4N1C
01/28/2026, 7:23 PMK3RN3L_P4N1C
01/29/2026, 6:21 PMAviram Hassan
01/29/2026, 6:21 PMAviram Hassan
01/29/2026, 6:21 PMK3RN3L_P4N1C
01/29/2026, 6:24 PMAviram Hassan
01/29/2026, 6:24 PMYuan
01/29/2026, 7:35 PM$NOCANCEL variants. We are working on adding missing hooks.K3RN3L_P4N1C
01/30/2026, 5:01 PMYuan
01/30/2026, 5:09 PMK3RN3L_P4N1C
01/30/2026, 8:08 PMYuan
02/04/2026, 4:17 AMK3RN3L_P4N1C
02/05/2026, 9:11 AMK3RN3L_P4N1C
02/05/2026, 9:11 AM