4.9 KiB
4.9 KiB
\n┌─────────────────┐\n│ Orchestrator │\n│ (Rust) │\n└────────┬────────┘\n │\n ▼\n┌─────────────────┐\n│ DNS Manager │\n│ │\n│ - Auto-register│\n│ - TTL config │\n│ - Verification │\n└────────┬────────┘\n │\n ▼\n┌─────────────────┐\n│ CoreDNS Client │\n│ (HTTP API) │\n└────────┬────────┘\n │\n ▼\n┌─────────────────┐\n│ CoreDNS │\n│ Service │\n└─────────────────┘\n\n\n## Features\n\n### 1. Automatic DNS Registration\n\nWhen a server is created, the orchestrator automatically registers its DNS record:\n\n\n// In server creation workflow\nlet ip = server.get_ip_address();\nstate.dns_manager.register_server_dns(&hostname, ip).await?;\n\n\n### 2. DNS Record Types\n\nSupports multiple DNS record types:\n\n- A - IPv4 address\n- AAAA - IPv6 address\n- CNAME - Canonical name\n- TXT - Text record\n\n### 3. DNS Verification\n\nVerify DNS resolution after registration:\n\n\nlet verified = state.dns_manager.verify_dns_resolution("server.example.com").await?;\nif verified {\n info!("DNS resolution verified");\n}\n\n\n### 4. Automatic Cleanup\n\nWhen a server is deleted, DNS records are automatically removed:\n\n\nstate.dns_manager.unregister_server_dns(&hostname).await?;\n\n\n## Configuration\n\nDNS settings in config.defaults.toml:\n\n\n[orchestrator.dns]\ncoredns_url = "http://localhost:53"\nauto_register = true\nttl = 300\n\n\n### Configuration Options\n\n- coredns_url: CoreDNS HTTP API endpoint\n- auto_register: Enable automatic DNS registration (default: true)\n- ttl: Default TTL for DNS records in seconds (default: 300)\n\n## API Endpoints\n\n### List DNS Records\n\n\nGET /api/v1/dns/records\n\n\nResponse:\n\n\n{\n "success": true,\n "data": [\n {\n "name": "web-01.example.com",\n "record_type": "A",\n "value": "192.168.1.10",\n "ttl": 300\n }\n ]\n}\n\n\n## Usage Examples\n\n### Register Server DNS\n\n\nuse std::net::IpAddr;\n\nlet ip: IpAddr = "192.168.1.10".parse()?;\ndns_manager.register_server_dns("web-01.example.com", ip).await?;\n\n\n### Unregister Server DNS\n\n\ndns_manager.unregister_server_dns("web-01.example.com").await?;\n\n\n### Update DNS Record\n\n\nlet new_ip: IpAddr = "192.168.1.20".parse()?;\ndns_manager.update_dns_record("web-01.example.com", new_ip).await?;\n\n\n### List All Records\n\n\nlet records = dns_manager.list_records().await?;\nfor record in records {\n println!("{} -> {} ({})", record.name, record.value, record.record_type);\n}\n\n\n## Integration with Workflows\n\n### Server Creation Workflow\n\n1. Create server via provider API\n2. Wait for server to be ready\n3. Register DNS record (automatic)\n4. Verify DNS resolution\n5. Continue with next steps\n\n### Server Deletion Workflow\n\n1. Stop services on server\n2. Unregister DNS record (automatic)\n3. Delete server via provider API\n4. Update inventory\n\n## Error Handling\n\nThe DNS integration handles errors gracefully:\n\n- Network errors: Retries with exponential backoff\n- DNS conflicts: Reports error but continues workflow\n- Invalid records: Validates before sending to CoreDNS\n\n## Testing\n\nRun DNS integration tests:\n\n\ncd provisioning/platform/orchestrator\ncargo test test_dns_integration\n\n\n## Troubleshooting\n\n### DNS registration fails\n\n1. Check CoreDNS is running and accessible\n2. Verify coredns_url configuration\n3. Check network connectivity\n4. Review orchestrator logs\n\n### DNS records not resolving\n\n1. Verify record was registered (check logs)\n2. Query CoreDNS directly\n3. Check TTL settings\n4. Verify DNS resolver configuration\n\n## Best Practices\n\n1. Use FQDN: Always use fully-qualified domain names\n2. Set appropriate TTL: Lower TTL for dev, higher for prod\n3. Enable auto-register: Reduces manual operations\n4. Monitor DNS health: Check DNS resolution periodically\n\n## Security Considerations\n\n1. Access Control: Restrict access to CoreDNS API\n2. Validation: Validate hostnames and IP addresses\n3. Audit: Log all DNS operations\n4. Rate Limiting: Prevent DNS flooding\n\n## Future Enhancements\n\n- [ ] Support for SRV records\n- [ ] DNS zone management\n- [ ] DNSSEC integration\n- [ ] Multi-zone support\n- [ ] DNS caching layer