- Startseite
- Clientseitige Abwehr
- Demo
- Phase 1 — Build
Phase 1 — Build
Phase 1 stellt die vollständige CSD-Infrastruktur bereit und validiert sie. Alle Schritte müssen der Reihe nach abgeschlossen werden — jeder Schritt muss BESTANDEN sein, bevor fortgefahren wird. Kehren Sie zum Index zurück, um die Umgebungseinrichtung und Variablenauflösung abzuschließen, bevor Sie diese Befehle ausführen.
Schritt 0: Namespace prüfen und erstellen (bedingt)
Abschnitt betitelt „Schritt 0: Namespace prüfen und erstellen (bedingt)“Prüfen Sie, ob der Ziel-Namespace bereits im Tenant vorhanden ist. Falls nicht, erstellen Sie ihn. Verfolgen Sie das Ergebnis in der Shell-Variable NAMESPACE_CREATED — Phase 4 des Abbaus verwendet diese Variable, um zu entscheiden, ob der Namespace gelöscht werden soll.
NS_CHECK=$(curl -s -o /dev/null -w '%\{http_code\}' \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx")
NAMESPACE_CREATED="false"if [ "$NS_CHECK" = "404" ]; then curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata": {"name": "xF5XC_NAMESPACEx"}, "spec": {}}' \ "xF5XC_API_URLx/api/web/namespaces" | jq . NAMESPACE_CREATED="true"fiNachweis
Abschnitt betitelt „Nachweis“Bestätigen Sie, dass der Namespace vorhanden ist, und notieren Sie, ob er erstellt wurde:
curl -s -o /dev/null -w '%\{http_code\}' \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"echo "NAMESPACE_CREATED=$NAMESPACE_CREATED"| Feld | Erwartet | Status |
|---|---|---|
| HTTP-Status | 200 | BESTANDEN wenn zurückgegeben, FEHLGESCHLAGEN wenn 404 oder anderes |
NAMESPACE_CREATED | true (erstellt) oder false (bereits vorhanden) | Informativ — wird von Phase 4 des Abbaus verwendet |
Schritt 1: Healthcheck erstellen (optional)
Abschnitt betitelt „Schritt 1: Healthcheck erstellen (optional)“Erstellen Sie einen HTTP-Healthcheck, den der Ursprungspool zur Überwachung des Backend-Zustands verwenden kann.
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_HC_NAMEx", "namespace": "xF5XC_NAMESPACEx", "labels": {}, "annotations": {}, "disable": false }, "spec": { "http_health_check": { "use_origin_server_name": {}, "path": "/", "use_http2": false, "headers": {}, "request_headers_to_remove": [], "expected_status_codes": ["200"] }, "timeout": 3, "interval": 15, "jitter": 0, "unhealthy_threshold": 1, "healthy_threshold": 3, "jitter_percent": 30 } }' \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks" \ | jq .Eine 200-Antwort mit dem erstellten Objekt bestätigt, dass der Healthcheck erstellt wurde. Wenn die Antwort "code": 8 mit einer Meldung wie "Object kind healthcheck has exhausted limits(150)" enthält, hat der Tenant sein Healthcheck-Limit erreicht — fahren Sie mit Schritt 2 fort und lassen Sie die Healthcheck-Referenz weg. CSD ist nicht von der Zustandsüberwachung abhängig.
Nachweis
Abschnitt betitelt „Nachweis“Bestätigen Sie, dass der Healthcheck vorhanden ist:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx" \ | jq '{name: .metadata.name, namespace: .metadata.namespace, path: .spec.http_health_check.path, interval: .spec.interval}'| Feld | Erwartet | Status |
|---|---|---|
| HTTP-Status | 200 mit Objekt | BESTANDEN wenn zurückgegeben, FEHLGESCHLAGEN wenn 404 |
name | Entspricht F5XC_HC_NAME | BESTANDEN |
path | / | BESTANDEN |
Schritt 1 übersprungen (Fehlercode 8, Limit ausgeschöpft) | — | BESTANDEN (Healthcheck ist für CSD optional) |
Schritt 2: Ursprungspool erstellen
Abschnitt betitelt „Schritt 2: Ursprungspool erstellen“Erstellen Sie einen Ursprungspool, der auf Ihren Backend-Server verweist. Wenn Sie in Schritt 1 einen Healthcheck erstellt haben, fügen Sie die healthcheck-Referenz ein. Wenn Schritt 1 übersprungen wurde, verwenden Sie ein leeres Array.
Mit Healthcheck (Schritt 1 erfolgreich):
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_ORIGIN_POOLx", "namespace": "xF5XC_NAMESPACEx", "labels": {}, "annotations": {}, "description": "Origin pool for CSD demo", "disable": false }, "spec": { "origin_servers": [{ "public_ip": { "ip": "xF5XC_ORIGIN_IPx" }, "labels": {} }], "no_tls": {}, "port": xF5XC_ORIGIN_PORTx, "same_as_endpoint_port": {}, "healthcheck": [{ "namespace": "xF5XC_NAMESPACEx", "name": "xF5XC_HC_NAMEx", "kind": "healthcheck" }], "loadbalancer_algorithm": "LB_OVERRIDE", "endpoint_selection": "LOCAL_PREFERRED" } }' \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools" \ | jq .Ohne Healthcheck (Schritt 1 übersprungen):
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_ORIGIN_POOLx", "namespace": "xF5XC_NAMESPACEx", "labels": {}, "annotations": {}, "description": "Origin pool for CSD demo", "disable": false }, "spec": { "origin_servers": [{ "public_ip": { "ip": "xF5XC_ORIGIN_IPx" }, "labels": {} }], "no_tls": {}, "port": xF5XC_ORIGIN_PORTx, "same_as_endpoint_port": {}, "healthcheck": [], "loadbalancer_algorithm": "LB_OVERRIDE", "endpoint_selection": "LOCAL_PREFERRED" } }' \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools" \ | jq .Eine 200-Antwort bestätigt, dass der Ursprungspool erstellt wurde.
Healthcheck-Verknüpfung überprüfen
Abschnitt betitelt „Healthcheck-Verknüpfung überprüfen“Wenn Sie eine Healthcheck-Referenz eingefügt haben, bestätigen Sie, dass sie korrekt verknüpft ist:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx" \ | jq '.spec.healthcheck'Ein gefülltes Array bestätigt die Verknüpfung. Ein leeres Array [] ist zu erwarten, wenn Schritt 1 übersprungen wurde, oder bedeutet, dass der Healthcheck nicht gefunden wurde, wenn Sie eine Verknüpfung beabsichtigt hatten.
Nachweis
Abschnitt betitelt „Nachweis“Bestätigen Sie, dass der Ursprungspool vorhanden ist und die korrekte Konfiguration aufweist:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx" \ | jq '{name: .metadata.name, origin_ip: .spec.origin_servers[0].public_ip.ip, port: .spec.port, healthcheck_count: (.spec.healthcheck | length)}'| Feld | Erwartet | Status |
|---|---|---|
| HTTP-Status | 200 | BESTANDEN wenn zurückgegeben, FEHLGESCHLAGEN wenn 404 |
name | Entspricht F5XC_ORIGIN_POOL | BESTANDEN |
origin_ip | Entspricht F5XC_ORIGIN_IP | BESTANDEN |
port | Entspricht F5XC_ORIGIN_PORT | BESTANDEN |
healthcheck_count | 1 (mit HC) oder 0 (ohne) | BESTANDEN in beiden Fällen |
Schritt 3: HTTP-Load-Balancer mit CSD erstellen
Abschnitt betitelt „Schritt 3: HTTP-Load-Balancer mit CSD erstellen“Erstellen Sie zwei Load Balancer mit aktivierter Clientseitiger Abwehr — einen HTTP-LB (primär, Port 80) und einen HTTPS-LB (sekundär, Port 443 mit automatischer Zertifikatsverwaltung). Der HTTP-LB ist der Standard für den gesamten Demo-Datenverkehr. Der HTTPS-LB ist ein Nice-to-have, das von der Let’s Encrypt-Zertifikatbereitstellung abhängt, die in Demo-Umgebungen auf Ratenlimits stoßen kann.
HTTP-Load-Balancer (primär)
Abschnitt betitelt „HTTP-Load-Balancer (primär)“Dies ist der primäre Load Balancer für Demos. Er verwendet einen http-Listener auf Port 80 mit F5 XC verwaltetem DNS. Er ist nicht von der TLS-Zertifikatbereitstellung abhängig und wird daher sofort nach der DNS-Auflösung betriebsbereit.
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_LB_NAMEx-http", "namespace": "xF5XC_NAMESPACEx", "labels": {}, "annotations": {}, "description": "HTTP LB with Client-Side Defense enabled (primary demo LB)", "disable": false }, "spec": { "domains": ["xF5XC_DOMAINNAMEx"], "http": { "dns_volterra_managed": true, "port": 80 }, "advertise_on_public_default_vip": {}, "default_route_pools": [{ "pool": { "namespace": "xF5XC_NAMESPACEx", "name": "xF5XC_ORIGIN_POOLx", "kind": "origin_pool" }, "weight": 1, "priority": 1 }], "client_side_defense": { "policy": { "js_insert_all_pages": {} } }, "disable_rate_limit": {}, "no_service_policies": {}, "round_robin": {}, "disable_waf": {}, "no_challenge": {}, "disable_bot_defense": {}, "disable_api_definition": {}, "disable_api_discovery": {}, "disable_ip_reputation": {}, "disable_malicious_user_detection": {}, "single_lb_app": { "disable_discovery": {}, "disable_ddos_detection": {}, "disable_malicious_user_detection": {} }, "disable_trust_client_ip_headers": {}, "user_id_client_ip": {}, "disable_threat_mesh": {}, "l7_ddos_action_default": {}, "system_default_timeouts": {}, "default_sensitive_data_policy": {}, "disable_malware_protection": {}, "disable_api_testing": {} } }' \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers" \ | jq .Eine 200-Antwort bestätigt, dass der HTTP-Load-Balancer mit aktiviertem CSD erstellt wurde.
HTTPS-Load-Balancer (sekundär)
Abschnitt betitelt „HTTPS-Load-Balancer (sekundär)“Dies ist der sekundäre Load Balancer. Er verwendet https_auto_cert auf Port 443 mit automatischer Let’s Encrypt-Zertifikatbereitstellung. Prüfen Sie vor der Erstellung, ob ein HTTPS-LB-Skelett aus einem vorherigen Abbau vorhanden ist — falls ja, stellen Sie es über PUT statt POST wieder her, um das vorhandene Let’s Encrypt-Zertifikat zu erhalten und Ratenlimits zu vermeiden (5 doppelte Zertifikate pro exakter Bezeichner-Menge pro 7 Tage).
Prüfen, ob der HTTPS-LB bereits vorhanden ist:
HTTPS_CHECK=$(curl -s -o /dev/null -w '%\{http_code\}' \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https")Wenn HTTPS_CHECK 200 ist, existiert ein HTTPS-LB-Skelett — verwenden Sie Pfad A (PUT). Bei 404 verwenden Sie Pfad B (POST).
Pfad A: Skelett über PUT wiederherstellen (HTTPS-LB vorhanden)
Abschnitt betitelt „Pfad A: Skelett über PUT wiederherstellen (HTTPS-LB vorhanden)“Wenn ein HTTPS-LB-Skelett aus einem vorherigen Abbau vorhanden ist, stellen Sie die vollständige Konfiguration über PUT wieder her. Dadurch wird der Ursprungspool neu verknüpft und CSD wieder aktiviert, ohne eine neue Let’s Encrypt-Zertifikatsanforderung auszulösen — das vorhandene Zertifikat bleibt gültig.
curl -s -X PUT \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_LB_NAMEx-https", "namespace": "xF5XC_NAMESPACEx", "labels": {}, "annotations": {}, "description": "HTTPS LB with Client-Side Defense enabled (secondary, cert-dependent)", "disable": false }, "spec": { "domains": ["xF5XC_DOMAINNAMEx"], "https_auto_cert": { "http_redirect": false, "add_hsts": false, "port": 443, "default_header": {}, "enable_path_normalize": {}, "no_mtls": {}, "default_loadbalancer": {} }, "advertise_on_public_default_vip": {}, "default_route_pools": [{ "pool": { "namespace": "xF5XC_NAMESPACEx", "name": "xF5XC_ORIGIN_POOLx", "kind": "origin_pool" }, "weight": 1, "priority": 1 }], "client_side_defense": { "policy": { "js_insert_all_pages": {} } }, "disable_rate_limit": {}, "no_service_policies": {}, "round_robin": {}, "disable_waf": {}, "no_challenge": {}, "disable_bot_defense": {}, "disable_api_definition": {}, "disable_api_discovery": {}, "disable_ip_reputation": {}, "disable_malicious_user_detection": {}, "single_lb_app": { "disable_discovery": {}, "disable_ddos_detection": {}, "disable_malicious_user_detection": {} }, "disable_trust_client_ip_headers": {}, "user_id_client_ip": {}, "disable_threat_mesh": {}, "l7_ddos_action_default": {}, "system_default_timeouts": {}, "default_sensitive_data_policy": {}, "disable_malware_protection": {}, "disable_api_testing": {} } }' \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq .Eine 200-Antwort bestätigt, dass das Skelett mit der vollständigen Konfiguration wiederhergestellt wurde. Der Zertifikatsstatus sollte CertificateValid bleiben — es wird keine neue Let’s Encrypt-Bereitstellung ausgelöst.
Pfad B: Neu über POST erstellen (HTTPS-LB nicht vorhanden)
Abschnitt betitelt „Pfad B: Neu über POST erstellen (HTTPS-LB nicht vorhanden)“Wenn kein HTTPS-LB vorhanden ist (erster Durchlauf oder nach einem vollständigen Abbau), erstellen Sie ihn über POST. Dadurch wird die Let’s Encrypt-Zertifikatbereitstellung ausgelöst, die 5–10 Minuten dauern kann.
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_LB_NAMEx-https", "namespace": "xF5XC_NAMESPACEx", "labels": {}, "annotations": {}, "description": "HTTPS LB with Client-Side Defense enabled (secondary, cert-dependent)", "disable": false }, "spec": { "domains": ["xF5XC_DOMAINNAMEx"], "https_auto_cert": { "http_redirect": false, "add_hsts": false, "port": 443, "default_header": {}, "enable_path_normalize": {}, "no_mtls": {}, "default_loadbalancer": {} }, "advertise_on_public_default_vip": {}, "default_route_pools": [{ "pool": { "namespace": "xF5XC_NAMESPACEx", "name": "xF5XC_ORIGIN_POOLx", "kind": "origin_pool" }, "weight": 1, "priority": 1 }], "client_side_defense": { "policy": { "js_insert_all_pages": {} } }, "disable_rate_limit": {}, "no_service_policies": {}, "round_robin": {}, "disable_waf": {}, "no_challenge": {}, "disable_bot_defense": {}, "disable_api_definition": {}, "disable_api_discovery": {}, "disable_ip_reputation": {}, "disable_malicious_user_detection": {}, "single_lb_app": { "disable_discovery": {}, "disable_ddos_detection": {}, "disable_malicious_user_detection": {} }, "disable_trust_client_ip_headers": {}, "user_id_client_ip": {}, "disable_threat_mesh": {}, "l7_ddos_action_default": {}, "system_default_timeouts": {}, "default_sensitive_data_policy": {}, "disable_malware_protection": {}, "disable_api_testing": {} } }' \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers" \ | jq .Eine 200-Antwort bestätigt, dass der HTTPS-Load-Balancer erstellt wurde. Die Zertifikatbereitstellung beginnt automatisch.
Nachweis
Abschnitt betitelt „Nachweis“Bestätigen Sie, dass beide Load Balancer mit aktiviertem CSD vorhanden sind. Verwenden Sie für den Nachweis immer einen GET — die POST-Antwort gibt transiente Zustandswerte zurück, die möglicherweise nicht die eingeschwungene Konfiguration widerspiegeln.
HTTP-LB (primär):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '{name: .metadata.name, domains: .spec.domains, csd_enabled: (.spec.client_side_defense != null), state: .spec.state}'| Feld | Erwartet | Status |
|---|---|---|
| HTTP-Status | 200 | BESTANDEN wenn zurückgegeben, FEHLGESCHLAGEN wenn 404 |
name | ${F5XC_LB_NAME}-http | BESTANDEN |
domains | Enthält F5XC_DOMAINNAME | BESTANDEN |
csd_enabled | true | BESTANDEN — CSD ist für diesen LB konfiguriert |
state | VIRTUAL_HOST_READY oder VIRTUAL_HOST_PENDING_A_RECORD | Erwartet — HTTP-LB wechselt zu READY sobald DNS aufgelöst ist. Jeder andere Zustand (z. B. VIRTUAL_HOST_FAILED) ist ein FEHLSCHLAG — an Operator melden und nicht fortfahren |
HTTPS-LB (sekundär):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '{name: .metadata.name, domains: .spec.domains, csd_enabled: (.spec.client_side_defense != null), state: .spec.state, cert_state: .spec.cert_state}'| Feld | Erwartet | Status |
|---|---|---|
| HTTP-Status | 200 | BESTANDEN wenn zurückgegeben, FEHLGESCHLAGEN wenn 404 |
name | ${F5XC_LB_NAME}-https | BESTANDEN |
domains | Enthält F5XC_DOMAINNAME | BESTANDEN |
csd_enabled | true | BESTANDEN — CSD ist für diesen LB konfiguriert |
creation_method | PUT (Skelett wiederhergestellt) oder POST (neu) | INFO — PUT erhält vorhandenes Zertifikat |
state | VIRTUAL_HOST_READY (PUT) oder VIRTUAL_HOST_PENDING_A_RECORD (POST) | Erwartet — PUT-Pfad kann bereits READY sein, da DNS vom Skelett erhalten blieb |
cert_state | CertificateValid (PUT) oder PreDomainChallengePending (POST) | PUT erhält vorhandenes Zertifikat; POST löst neue Bereitstellung aus |
Schritt 4: DNS konfigurieren
Abschnitt betitelt „Schritt 4: DNS konfigurieren“Nach dem Erstellen des Load Balancers wechselt dieser in den Status VIRTUAL_HOST_PENDING_A_RECORD und das automatische Zertifikat verbleibt in PreDomainChallengePending. Zwei DNS-Einträge müssen vorhanden sein, bevor der LB vollständig betriebsbereit wird:
- A-Eintrag —
xF5XC_DOMAINNAMExzeigt auf die VIP-IP-Adresse (ausdns_infoin der LB-Antwort) - ACME-Challenge-Eintrag —
_acme-challenge.xF5XC_DOMAINNAMExfür die TLS-Zertifikatsvalidierung (automatisch verwaltet bei Verwendung von F5 XC DNS mit verwalteten Einträgen; manueller CNAME bei externem DNS erforderlich)
Das Vorgehen hängt davon ab, ob F5 XC der autoritäre DNS-Anbieter für Ihre Domain ist.
DNS-Autorität ermitteln
Abschnitt betitelt „DNS-Autorität ermitteln“Prüfen Sie die Nameserver für Ihre Root-Domain:
dig +short NS xF5XC_ROOT_DOMAINxWenn die Antwort ns1.f5clouddns.com und ns2.f5clouddns.com enthält, ist F5 XC der autoritäre DNS-Anbieter — folgen Sie Option A. Andernfalls folgen Sie Option B für externes DNS.
Option A: F5 XC Verwaltetes DNS
Abschnitt betitelt „Option A: F5 XC Verwaltetes DNS“Wenn F5 XC der autoritäre DNS-Anbieter ist, kann die Plattform sowohl den A-Eintrag als auch den ACME-Challenge-CNAME automatisch erstellen — aber nur wenn die DNS-Zone allow_http_lb_managed_records aktiviert hat.
1. Prüfen, ob verwaltete Einträge aktiviert sind:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/dns/namespaces/system/dns_zones/xF5XC_ROOT_DOMAINx" \ | jq '.spec.primary.allow_http_lb_managed_records'Wenn die Antwort true ist, erstellt die Plattform automatisch DNS-Einträge für Load Balancer — fahren Sie mit 3. DNS-Auflösung überprüfen fort. Bei false oder null fahren Sie mit dem nächsten Schritt fort.
2. Verwaltete Einträge aktivieren:
Rufen Sie die aktuelle Zonenkonfiguration ab, aktivieren Sie verwaltete Einträge und aktualisieren Sie:
# Get current zone configZONE_CONFIG=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/dns/namespaces/system/dns_zones/xF5XC_ROOT_DOMAINx")
# Update with managed records enabledecho "$ZONE_CONFIG" \ | jq '.spec.primary.allow_http_lb_managed_records = true' \ | curl -s -X PUT \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d @- \ "xF5XC_API_URLx/api/config/dns/namespaces/system/dns_zones/xF5XC_ROOT_DOMAINx" \ | jq .Eine 200-Antwort (leeres \{\}) bestätigt, dass die Zone aktualisiert wurde. F5 XC erstellt den A-Eintrag und den ACME-Challenge-Eintrag in der automatisch verwalteten Eintragsgruppe der Zone. Wenn die verwalteten Einträge nicht innerhalb von 60 Sekunden erscheinen, wenden Sie den Load Balancer erneut an, um die Eintragserstellung auszulösen:
LB_CONFIG=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http")echo "$LB_CONFIG" | curl -s -X PUT \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d @- \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq .Dieses GET+PUT-Erneut-Anwenden ändert die LB-Konfiguration nicht — es veranlasst die Plattform lediglich, die DNS-Zone neu auszuwerten und verwaltete Einträge zu erstellen. Wenn der A-Eintrag innerhalb von 60 Sekunden nach dem erneuten Anwenden immer noch nicht aufgelöst wird, stoppen Sie und melden Sie dies dem Operator — wiederholen Sie das erneute Anwenden nicht mehr als einmal.
3. DNS-Auflösung überprüfen:
dig +short xF5XC_DOMAINNAMEx ADie Antwort sollte die VIP-IP-Adresse zurückgeben. Die DNS-Übertragung ist für F5 XC verwaltete Zonen in der Regel sofort verfügbar, erlauben Sie jedoch bis zu 60 Sekunden.
Option B: Externer DNS-Anbieter
Abschnitt betitelt „Option B: Externer DNS-Anbieter“Wenn Ihre Domain einen externen DNS-Anbieter verwendet, müssen Sie die Einträge manuell erstellen. Extrahieren Sie die erforderlichen Werte aus dem Load Balancer:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '{ vip_ip: .spec.dns_info[0].ip_address, acme_target: .spec.auto_cert_info.dns_records }'Erstellen Sie diese Einträge bei Ihrem DNS-Anbieter:
| Typ | Name | Wert |
|---|---|---|
| A | xF5XC_DOMAINNAMEx | VIP-IP aus dns_info[0].ip_address |
| CNAME | _acme-challenge.xF5XC_DOMAINNAMEx | *.autocerts.ves.volterra.io |
Überprüfen Sie nach dem Erstellen der Einträge die Auflösung:
dig +short xF5XC_DOMAINNAMEx Adig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAMENachweis
Abschnitt betitelt „Nachweis“| Test | Befehl | Erwartet | Status |
|---|---|---|---|
| DNS-1: A-Eintrag | dig +short $F5XC_DOMAINNAME A | VIP-IP-Adresse zurückgegeben | BESTANDEN wenn IP zurückgegeben, FEHLGESCHLAGEN wenn leer |
| DNS-2: ACME-CNAME | dig +short _acme-challenge.$F5XC_DOMAINNAME CNAME | *.autocerts.ves.volterra.io | BESTANDEN wenn CNAME zurückgegeben |
| DNS-Autorität | dig +short NS $F5XC_ROOT_DOMAIN | F5 XC oder externe Nameserver | Informativ — bestimmt Option A vs. B |
Wenn DNS-1 nach 60 Sekunden leer zurückgibt, siehe Fehlerbehebung — LB verbleibt in VIRTUAL_HOST_PENDING_A_RECORD.
Schritt 5: CSD-Aktivierung überprüfen
Abschnitt betitelt „Schritt 5: CSD-Aktivierung überprüfen“Prüfen Sie, ob Clientseitige Abwehr für den Tenant aktiviert ist. CSD wird auf Tenant-Ebene konfiguriert — wenn es noch nicht aktiviert wurde, wenden Sie sich an Ihren F5 XC Administrator.
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \ | jq .Eine Antwort mit "isConfigured": true und "isEnabled": true bestätigt, dass CSD aktiv ist.
Nachweis
Abschnitt betitelt „Nachweis“curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \ | jq '{configured: .isConfigured, enabled: .isEnabled}'| Feld | Erwartet | Status |
|---|---|---|
configured | true | BESTANDEN |
enabled | true | BESTANDEN |
Eines ist false | — | FEHLGESCHLAGEN — F5 XC Administrator kontaktieren, um CSD auf Tenant-Ebene zu aktivieren |
Schritt 6: Geschützte Domain registrieren
Abschnitt betitelt „Schritt 6: Geschützte Domain registrieren“Registrieren Sie die Root-Domain, die CSD überwachen soll. Das Feld protected_domain muss die eTLD+1-Root-Domain sein (z. B. f5demos.com), nicht der vollständige FQDN.
Prüfen, ob bereits registriert
Abschnitt betitelt „Prüfen, ob bereits registriert“Prüfen Sie vor dem Erstellen, ob die Domain bereits im Tenant registriert ist. Eine 409-Antwort auf den POST bedeutet, dass die Domain bereits vorhanden ist — dies ist eine Erfolgs- und keine Fehlerbedingung.
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "xF5XC_DOMAINNAMEx", "namespace": "xF5XC_NAMESPACEx" }, "spec": { "protected_domain": "xF5XC_ROOT_DOMAINx" } }' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \ | jq .| Antwort | Bedeutung | Aktion |
|---|---|---|
200 | Domain erfolgreich registriert | Mit Schritt 7 fortfahren |
409 (Domain bereits vorhanden) | Domain wurde zuvor in diesem Tenant registriert | Bereits erledigt — mit Schritt 7 fortfahren |
"code": 8 (Limit ausgeschöpft) | Kontingent für geschützte Domains voll | Blockierend — geschützte Domains sind für CSD erforderlich. Nicht verwendete geschützte Domains löschen oder Administrator kontaktieren. |
Nachweis
Abschnitt betitelt „Nachweis“Die POST-Antwort selbst ist der primäre Nachweis — sie gibt das registrierte Domain-Objekt mit spec.protected_domain zurück, das Ihrer Root-Domain entspricht. Alternativ können Sie alle geschützten Domains auflisten, um dies zu bestätigen:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \ | jq '.items | length'| Feld | Erwartet | Status |
|---|---|---|
POST hat protected_domain zurückgegeben | Entspricht F5XC_ROOT_DOMAIN | BESTANDEN |
POST hat 200 oder 409 zurückgegeben | Domain registriert oder bereits vorhanden | BESTANDEN |
| Anzahl der Listenelemente | > 0 | BESTANDEN |
Schritt 7: Überprüfen
Abschnitt betitelt „Schritt 7: Überprüfen“DNS-Auflösung
Abschnitt betitelt „DNS-Auflösung“Bestätigen Sie, dass der A-Eintrag aufgelöst wird und der ACME-Challenge-CNAME vorhanden ist:
dig +short xF5XC_DOMAINNAMEx Adig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAMEDer A-Eintrag sollte die VIP-IP-Adresse zurückgeben. Der CNAME sollte auf *.autocerts.ves.volterra.io (oder ein verwandtes autocerts-Ziel) zeigen.
Load-Balancer-Zustand
Abschnitt betitelt „Load-Balancer-Zustand“Prüfen Sie, ob beide Load Balancer ihre ausstehenden Zustände verlassen haben. Der HTTP-LB ist die primäre Prüfung — er sollte VIRTUAL_HOST_READY erreichen, sobald DNS aufgelöst ist, ohne Zertifikatsabhängigkeit. Der HTTPS-LB-Zertifikatsstatus ist nur informativ.
HTTP-LB (primär — muss READY sein, um fortzufahren):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '{state: .spec.state}'| Feld | Erwartet | Zwischenzustände |
|---|---|---|
state | VIRTUAL_HOST_READY | VIRTUAL_HOST_PENDING_A_RECORD — DNS nicht konfiguriert (siehe Schritt 4) |
HTTPS-LB (sekundär — informativ, blockiert den Fortschritt nicht):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '{state: .spec.state, cert_state: .spec.cert_state}'| Feld | Erwartet | Zwischenzustände |
|---|---|---|
state | VIRTUAL_HOST_READY | VIRTUAL_HOST_PENDING_A_RECORD — DNS nicht konfiguriert; VIRTUAL_HOST_DNS_A_RECORD_ADDED — A-Eintrag gefunden, warte auf Zertifikat |
cert_state | CertificateValid | PreDomainChallengePending — warte auf ACME-CNAME; DomainChallengeStarted — ACME-Challenge läuft; AutoCertDomainRateLimited — Let’s Encrypt Ratenlimit erreicht (in Demo-Umgebungen erwartet, betrifft HTTP-LB nicht) |
JS-Konfiguration
Abschnitt betitelt „JS-Konfiguration“curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \ | jq .Die Antwort enthält ein Feld scriptTag mit dem vollständigen HTML-<script>-Tag, das der Load Balancer in Seitenantworten einfügt.
Erkannte Domains
Abschnitt betitelt „Erkannte Domains“curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{summary: .domain_summary, domains: .domains_list}'Erkannte Skripte
Abschnitt betitelt „Erkannte Skripte“Der Skripte-Endpunkt erfordert einen Zeitbereich mit Epoch-Zeitstempeln (Sekunden seit Unix-Epoche). Das folgende Beispiel fragt die letzten 7 Tage ab.
NOW=$(date +%s)START=$(( NOW - 604800 ))curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{\"startTime\": \"$START\", \"endTime\": \"$NOW\"}" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \ | jq '[.scripts[]? | {script_name: .script_name, risk_level: .risk_level}]'Formularfelder
Abschnitt betitelt „Formularfelder“Der Formularfelder-Endpunkt erfordert einen Zeitbereich mit Epoch-Zeitstempeln, die als Abfrageparameter übergeben werden.
NOW=$(date +%s)START=$(( NOW - 604800 ))curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/formFields?startTime=$START&endTime=$NOW" \ | jq '.form_fields'Phase-1-Nachweiszusammenfassung
Abschnitt betitelt „Phase-1-Nachweiszusammenfassung“Nach Abschluss aller Überprüfungen sollte der KI-Assistent eine konsolidierte Statustabelle präsentieren:
| Test-ID | Prüfung | Erwartet | Erforderlich | Status |
|---|---|---|---|---|
| DNS-1 | A-Eintrag wird aufgelöst | VIP-IP zurückgegeben | Ja | BESTANDEN / FEHLGESCHLAGEN |
| DNS-2 | ACME-CNAME vorhanden | *.autocerts.ves.volterra.io | Nein | BESTANDEN / AUSSTEHEND |
| LB-1 | HTTP-LB-Zustand | VIRTUAL_HOST_READY | Ja | BESTANDEN / AUSSTEHEND |
| LB-2 | HTTPS-LB-Zustand | VIRTUAL_HOST_READY | Nein | BESTANDEN / AUSSTEHEND / INFO |
| TLS-1 | Zertifikatsstatus | CertificateValid | Nein | BESTANDEN / AUSSTEHEND / INFO |
| CSD-1 | JS-Konfiguration | scriptTag vorhanden | Ja | BESTANDEN / FEHLGESCHLAGEN |
| CSD-2 | CSD-Status | isEnabled: true | Ja | BESTANDEN / FEHLGESCHLAGEN |
| CSD-3 | Geschützte Domain | Domain registriert | Ja | BESTANDEN / FEHLGESCHLAGEN |
Wenn LB-1 AUSSTEHEND anzeigt, führen Sie alle 30 Sekunden bis zu 4 Iterationen (insgesamt 2 Minuten) eine Abfrage durch. Wenn LB-1 nach 4 Iterationen immer noch nicht VIRTUAL_HOST_READY ist, prüfen Sie die DNS-Auflösung mit dig und melden Sie dies dem Operator — fahren Sie nicht fort, bis LB-1 READY erreicht. Für LB-2 und TLS-1 führen Sie alle 60 Sekunden bis zu 10 Iterationen (10 Minuten) eine Abfrage durch. Wenn nach 10 Iterationen noch ein Zwischenzustand vorliegt, zeichnen Sie den aktuellen Zustand als INFO auf und fahren Sie fort — diese sind informativ und blockieren den Demo-Fortschritt nicht.
Phase 1 abgeschlossen. Fahren Sie mit Phase 2 — Angriff fort, um die Angriffssimulation durchzuführen.