Skip to content

Every VPC's recursor replica set, placement and health.

GET
/v1/admin/network/dns/recursors
Code sample: Shell / cURL
curl --request GET \
--url https://stratum.example.com/v1/admin/network/dns/recursors \
--header 'Authorization: Bearer <token>'

The operator’s view of the per-VPC DNS recursors: for each VPC, the replicas (the node each runs on, its address on the VPC’s internal DNS switch, whether the VPC’s .3 balances to it, and its own measured health), the placement inputs, the desired and placed replica counts, the guest-path verdict per subnet, and how the converger left the VPC’s switch and VIPs. Optionally narrowed by project or VPC. Install-scope; gates on network:ListDNSRecursors.

projectId
string
vpcId
string

The recursors.

Media typeapplication/json
object
items
required
Array<object>

The operator’s view of a VPC’s recursor: its replica set (where each replica runs, its address on the VPC’s DNS switch, its own health), the placement inputs, the replica counts, and how the converger left the VPC’s switch and .3 VIPs. The tenant’s view of the same VPC is RecursorStatus.

object
recursorId
required
integer format: int64
name
required
string
engineType
required
string
projectId
required
string
vpcId
required
string
healthy
required

The tenant’s verdict on the same data (see RecursorStatus.healthy).

boolean
reason
string
resolverAddresses
required
Array<object>

A subnet’s resolver address with its raw guest-path probe.

object
subnetId
required
string
address
required
string
healthy
required
boolean
checkedAt
string format: date-time
reason
string
probedBy

The node whose probe port on the subnet asked.

string
detail

The probe’s raw failure detail.

string
latencyMs
integer format: int64
desiredReplicas
required

The cluster’s replica setting (GET /v1/admin/network/dns/recursor-settings).

integer
placedReplicas
required

Replicas the recursor sweeps place for this VPC: the setting, fewer on a cluster with fewer ready nodes, more while a 2 to 1 change drains.

integer
placement
required

What the deterministic placement hashes: the VPC id (fnv32a) over these sorted ready, workload-capable nodes, the first replica on the hashed node and the next in ring order. Every node’s sweep computes the same answer.

object
readyNodes
required
Array<string>
replicas
required

How many replicas it was asked to place, max(setting, serving).

integer
replicas
required

The placed replicas, by index.

Array<object>

One placed recursor replica.

object
replica
required

0 (100.66.0.2) or 1 (100.66.0.3).

integer
nodeId
required
string
address
required

Its address on the VPC’s internal DNS switch. Every VPC reuses 100.66.0.0/29, so this identifies nothing outside the VPC.

string
addressCidr
required

With the prefix its netns carries, as its node reports it:.2/30 (or.2/29 for a replica 0 an older control plane placed),.3/29.

string
serving
required

The VPC’s .3 VIPs balance to it, per the converger’s last record.

boolean
health
required

A replica’s own health, measured: the host-helper on its node sends it a recursive query for a public name from inside its netns every 30 s. Replaces a placement state that read “assigned” whatever was true.

object
state
required

Unknown when the node placement puts it on has no verdict newer than two minutes (not probed yet, or the node stopped reporting).

string
Allowed values: answering not-answering unknown
detail
string
latencyMs
integer format: int64
checkedAt
string format: date-time
upstreams

Each upstream DNS server’s answer in the same verdict, asked directly from the replica’s netns. Absent without upstream servers.

Array<object>

One upstream DNS server’s answer to a recursive query sent from inside a recursor replica’s netns.

object
server
required
string
answering
required
boolean
detail

Why not, when not answering.

string
latencyMs
required
integer format: int64
switch

A VPC’s DNS switch and .3 VIPs as the network-dns-recursor converger last left them. Absent before its first pass covered the VPC.

object
ports
required

Replica ports on the switch (1 is a /30, 2 a /29).

integer
servingReplicas
required

Replicas the VIPs balance to.

integer
target
required

Replicas they should balance to (the setting, or fewer with fewer ready nodes).

integer
converged
required
boolean
detail
string
observedAt
required
string format: date-time
upstreams
required

Whether each of the cluster’s upstream DNS servers answers this VPC’s replicas, in the list’s order. Empty with no upstream servers.

Array<object>

Whether one upstream DNS server answers the VPC resolvers. The host helper on each node asks it a recursive query directly from inside every recursor’s netns every 30 s; this judges every replica verdict newer than two minutes.

object
address
required

The server’s IPv4 address.

string
state
required

Answering: every replica that asked got an answer. not-answering: at least one did not. unknown: no recent verdict asked it yet.

string
Allowed values: answering not-answering unknown
healthy
required

True when state is answering.

boolean
asked
required

Replicas with a recent verdict on this server.

integer
answering
required

Of those, how many got an answer.

integer
lastError

A failing replica’s error, naming its node and VPC.

string
checkedAt

The newest verdict on this server.

string format: date-time

Example

{
"items": [
{
"replicas": [
{
"health": {
"state": "answering"
}
}
],
"upstreams": [
{
"state": "answering"
}
]
}
]
}

Authenticated but not authorized.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}

Upstream temporarily unavailable (driver / scheduler / dependency).

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}