You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently the logic for configuring NAT for service zones is deeply
nested and crosses sled-agent http API boundaries. The cleanest way to
deliver eventual consistency for service zone nat entries was to pull
the zone information from inventory and use that to generate nat entries
to reconcile against the `ipv4_nat_entry` table. This covers us in the
following scenarios:
### RSS:
* User provides configuration to RSS
* RSS process ultimately creates a sled plan and service plan
* Application of service plan by sled-agents creates zones
* zone create makes direct calls to dendrite to configure NAT (it is the
only way it can be done at this time)
* eventually the Nexus zones are launched and handoff to Nexus is
complete
* inventory task is run, recording zone locations to db
* service zone nat background task reads inventory from db and uses the
data to generate records for `ipv4_nat_entry` table, then triggers
dendrite sync.
* sync is ultimately a noop because nat entries already exist in
dendrite (dendrite operations are idempotent)
### Cold boot:
* sled-agents create switch zones if they are managing a scrimlet, and
subsequently create zones written to their ledgers. This may result in
direct calls to dendrite.
* Once nexus is back up, inventory will resume being collected
* service zone nat background task will read inventory from db to
reconcile entries in `ipv4_nat_entry` table and then trigger dendrite
sync.
* If nat is out of date on dendrite, it will be updated on trigger.
### Dendrite crash
* If dendrite crashes and restarts, it will immediately contact Nexus
for re-sync (pre-existing logic from earlier NAT RPW work)
* service zone and instance nat entries are now present in rpw table, so
all nat entries will be restored
### Migration / Relocation of service zone
* New zone gets created on a sled in the rack. Direct call to dendrite
will be made (it uses the same logic as pre-nexus to create zone).
* Inventory task will record new location of service zone
* Service zone nat background task will use inventory to update table,
adding and removing the necessary nat entries and triggering a dendrite
update
Considerations
---
Because this relies on data from the inventory task which runs on a
periodic timer (600s), and because this task also runs on a periodic
timer (30s), there may be some latency for picking up changes. A few
potential avenues for improvement:
* Plumb additional logic into service zone nat configuration that
enables direct updates to the `ipv4_nat_entry` table once nexus is
online. Of note, this would further bifurcate the logic of pre-nexus and
post-nexus state management. At this moment, it seems that this is the
most painful approach. An argument can be made that we ultimately should
be lifting the nat configuration logic _out_ of the service zone
creation instead.
* Decrease the timer for the inventory task. This is the simplest
change, however this would result in more frequent collection,
increasing overhead. I do not know _how much_ this would increase
overhead. Maybe it is negligible.
* Plumb in the ability to trigger the inventory collection task for
interesting control plane events. This would allow us to keep the
_relatively_ infrequent timing intervals but allow us to refresh
on-demand when needed.
Related
---
Closes#4650
Extracted from #4822
An IP pool is needed to provide external connectivity to Instances. The addresses you use here should be addresses you've reserved from the external network (see <<_external_networking>>).
504
528
529
+
Here we will first create an ip pool for the recovery silo:
With SoftNPU you will generally also need to configure Proxy ARP. Below, `IP_POOL_START` and `IP_POOL_END` are the first and last addresses you used in the previous command:
567
+
Now we will add an address range to the recovery silo:
523
568
524
569
[source,console]
525
570
----
526
-
# dladm won't return leading zeroes but `scadm` expects them
0 commit comments