इसे छोड़कर कंटेंट पर जाएं

चरण 1 — निर्माण

चरण 1 पूर्ण CSD इंफ्रास्ट्रक्चर को तैनात और सत्यापित करता है। सभी चरण क्रम में पूरे करें — प्रत्येक चरण आगे बढ़ने से पहले PASS होना चाहिए। इन कमांड को चलाने से पहले एनवायरनमेंट सेटअप और वेरिएबल रेज़ोल्यूशन पूरा करने के लिए इंडेक्स पर वापस जाएं।

चरण 0: नेमस्पेस जांचें और बनाएं (सशर्त)

Section titled “चरण 0: नेमस्पेस जांचें और बनाएं (सशर्त)”

जांचें कि क्या टेनेंट पर लक्ष्य नेमस्पेस पहले से मौजूद है। यदि यह मौजूद नहीं है, तो इसे बनाएं। परिणाम को NAMESPACE_CREATED शेल वेरिएबल में ट्रैक करें — चरण 4 के teardown में इसका उपयोग यह तय करने के लिए किया जाता है कि नेमस्पेस को हटाना है या नहीं।

Terminal window
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"
fi

पुष्टि करें कि नेमस्पेस मौजूद है और रिकॉर्ड करें कि क्या यह बनाया गया था:

Terminal window
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"
फ़ील्डअपेक्षितस्थिति
HTTP स्टेटस200यदि मिला तो PASS, 404 या अन्य हो तो FAIL
NAMESPACE_CREATEDtrue (बनाया गया) या false (पहले से मौजूद)सूचनात्मक — चरण 4 teardown द्वारा उपयोग किया जाता है

चरण 1: हेल्थचेक बनाएं (वैकल्पिक)

Section titled “चरण 1: हेल्थचेक बनाएं (वैकल्पिक)”

एक HTTP हेल्थचेक बनाएं जिसका उपयोग ऑरिजिन पूल बैकएंड हेल्थ की निगरानी के लिए कर सकता है।

Terminal window
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 .

200 रिस्पॉन्स के साथ बनाया गया ऑब्जेक्ट पुष्टि करता है कि हेल्थचेक बनाया गया था। यदि रिस्पॉन्स में "code": 8 के साथ "Object kind healthcheck has exhausted limits(150)" जैसा संदेश है, तो टेनेंट अपनी हेल्थचेक सीमा तक पहुंच गया है — चरण 2 पर जाएं और हेल्थचेक रेफरेंस हटा दें। CSD हेल्थ मॉनिटरिंग पर निर्भर नहीं करता।

पुष्टि करें कि हेल्थचेक मौजूद है:

Terminal window
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}'
फ़ील्डअपेक्षितस्थिति
HTTP स्टेटसऑब्जेक्ट के साथ 200यदि मिला तो PASS, 404 हो तो FAIL
nameF5XC_HC_NAME से मेल खाता होPASS
path/PASS
चरण 1 छोड़ा गया (error code 8, सीमा समाप्त)PASS (CSD के लिए हेल्थचेक वैकल्पिक है)

चरण 2: ऑरिजिन पूल बनाएं

Section titled “चरण 2: ऑरिजिन पूल बनाएं”

अपने बैकएंड सर्वर की ओर इशारा करते हुए एक ऑरिजिन पूल बनाएं। यदि आपने चरण 1 में हेल्थचेक बनाया था, तो healthcheck रेफरेंस शामिल करें। यदि चरण 1 छोड़ा गया था, तो खाली array का उपयोग करें।

हेल्थचेक के साथ (चरण 1 सफल):

Terminal window
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 .

हेल्थचेक के बिना (चरण 1 छोड़ा गया):

Terminal window
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 .

200 रिस्पॉन्स पुष्टि करता है कि ऑरिजिन पूल बनाया गया।

सत्यापित करें कि हेल्थचेक लिंक है

Section titled “सत्यापित करें कि हेल्थचेक लिंक है”

यदि आपने हेल्थचेक रेफरेंस शामिल किया था, तो पुष्टि करें कि यह सही तरीके से लिंक है:

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx" \
| jq '.spec.healthcheck'

एक populated array लिंक की पुष्टि करता है। यदि चरण 1 छोड़ा गया था तो खाली array [] अपेक्षित है, या इसका अर्थ है कि हेल्थचेक नहीं मिला यदि आप इसे लिंक करना चाहते थे।

पुष्टि करें कि ऑरिजिन पूल मौजूद है और सही कॉन्फ़िगरेशन है:

Terminal window
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)}'
फ़ील्डअपेक्षितस्थिति
HTTP स्टेटस200यदि मिला तो PASS, 404 हो तो FAIL
nameF5XC_ORIGIN_POOL से मेल खाता होPASS
origin_ipF5XC_ORIGIN_IP से मेल खाता होPASS
portF5XC_ORIGIN_PORT से मेल खाता होPASS
healthcheck_count1 (HC के साथ) या 0 (बिना)PASS दोनों स्थिति में

चरण 3: CSD के साथ HTTP लोड बैलेंसर बनाएं

Section titled “चरण 3: CSD के साथ HTTP लोड बैलेंसर बनाएं”

क्लाइंट-साइड डिफेंस सक्षम के साथ दो लोड बैलेंसर बनाएं — एक HTTP LB (प्राथमिक, पोर्ट 80) और एक HTTPS LB (द्वितीयक, पोर्ट 443 स्वचालित सर्टिफिकेट प्रबंधन के साथ)। HTTP LB सभी डेमो ट्रैफ़िक के लिए डिफ़ॉल्ट है। HTTPS LB एक अच्छा विकल्प है जो Let’s Encrypt सर्टिफिकेट प्रोविजनिंग पर निर्भर करता है, जो डेमो एनवायरनमेंट में दर सीमाओं तक पहुंच सकता है।

HTTP लोड बैलेंसर (प्राथमिक)

Section titled “HTTP लोड बैलेंसर (प्राथमिक)”

यह डेमो के लिए प्राथमिक लोड बैलेंसर है। यह F5 XC managed DNS के साथ पोर्ट 80 पर http listener का उपयोग करता है। यह TLS सर्टिफिकेट प्रोविजनिंग पर निर्भर नहीं करता, इसलिए DNS resolve होने के तुरंत बाद तैयार हो जाता है।

Terminal window
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 .

200 रिस्पॉन्स पुष्टि करता है कि HTTP लोड बैलेंसर CSD सक्षम के साथ बनाया गया।

HTTPS लोड बैलेंसर (द्वितीयक)

Section titled “HTTPS लोड बैलेंसर (द्वितीयक)”

यह द्वितीयक लोड बैलेंसर है। यह पोर्ट 443 पर स्वचालित Let’s Encrypt सर्टिफिकेट प्रोविजनिंग के साथ https_auto_cert का उपयोग करता है। इसे बनाने से पहले, जांचें कि क्या पिछले teardown से skeleton HTTPS LB मौजूद है — यदि है, तो मौजूदा Let’s Encrypt सर्टिफिकेट को संरक्षित करने और दर सीमाओं से बचने के लिए POST के बजाय PUT के माध्यम से इसे पुनर्स्थापित करें (प्रति सटीक identifier set प्रति 7 दिनों में 5 duplicate certificates)।

जांचें कि HTTPS LB पहले से मौजूद है या नहीं:

Terminal window
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")

यदि HTTPS_CHECK 200 है, तो एक skeleton HTTPS LB मौजूद है — Path A (PUT) का उपयोग करें। यदि 404 है, तो Path B (POST) का उपयोग करें।

Path A: PUT के माध्यम से Skeleton पुनर्स्थापित करें (HTTPS LB मौजूद है)

Section titled “Path A: PUT के माध्यम से Skeleton पुनर्स्थापित करें (HTTPS LB मौजूद है)”

जब पिछले teardown से एक skeleton HTTPS LB मौजूद हो, तो PUT के माध्यम से पूर्ण कॉन्फ़िगरेशन पुनर्स्थापित करें। यह ऑरिजिन पूल को फिर से जोड़ता है और CSD को पुनः सक्षम करता है बिना नए Let’s Encrypt सर्टिफिकेट रिक्वेस्ट को ट्रिगर किए — मौजूदा सर्टिफिकेट वैध रहता है।

Terminal window
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 .

200 रिस्पॉन्स पुष्टि करता है कि skeleton को पूर्ण कॉन्फ़िगरेशन के साथ पुनर्स्थापित किया गया। सर्टिफिकेट स्थिति CertificateValid रहनी चाहिए — कोई नया Let’s Encrypt प्रोविजनिंग ट्रिगर नहीं होता।

Path B: POST के माध्यम से नया बनाएं (HTTPS LB मौजूद नहीं है)

Section titled “Path B: POST के माध्यम से नया बनाएं (HTTPS LB मौजूद नहीं है)”

जब कोई HTTPS LB मौजूद नहीं है (पहली बार चलाना या पूर्ण teardown के बाद), इसे POST के माध्यम से बनाएं। यह Let’s Encrypt सर्टिफिकेट प्रोविजनिंग ट्रिगर करता है, जिसमें 5–10 मिनट लग सकते हैं।

Terminal window
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 .

200 रिस्पॉन्स पुष्टि करता है कि HTTPS लोड बैलेंसर बनाया गया। सर्टिफिकेट प्रोविजनिंग स्वचालित रूप से शुरू होती है।

पुष्टि करें कि दोनों लोड बैलेंसर CSD सक्षम के साथ मौजूद हैं। साक्ष्य के लिए हमेशा GET का उपयोग करें — POST रिस्पॉन्स क्षणिक स्थिति मान देता है जो settled कॉन्फ़िगरेशन को प्रतिबिंबित नहीं कर सकते।

HTTP LB (प्राथमिक):

Terminal window
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}'
फ़ील्डअपेक्षितस्थिति
HTTP स्टेटस200यदि मिला तो PASS, 404 हो तो FAIL
name${F5XC_LB_NAME}-httpPASS
domainsF5XC_DOMAINNAME शामिल होPASS
csd_enabledtruePASS — CSD इस LB पर कॉन्फ़िगर है
stateVIRTUAL_HOST_READY या VIRTUAL_HOST_PENDING_A_RECORDअपेक्षित — HTTP LB DNS resolve होने पर READY में बदलता है। कोई अन्य state (जैसे VIRTUAL_HOST_FAILED) FAIL है — ऑपरेटर को रिपोर्ट करें और आगे न बढ़ें

HTTPS LB (द्वितीयक):

Terminal window
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}'
फ़ील्डअपेक्षितस्थिति
HTTP स्टेटस200यदि मिला तो PASS, 404 हो तो FAIL
name${F5XC_LB_NAME}-httpsPASS
domainsF5XC_DOMAINNAME शामिल होPASS
csd_enabledtruePASS — CSD इस LB पर कॉन्फ़िगर है
creation_methodPUT (restored skeleton) या POST (नया)INFO — PUT मौजूदा सर्टिफिकेट संरक्षित करता है
stateVIRTUAL_HOST_READY (PUT) या VIRTUAL_HOST_PENDING_A_RECORD (POST)अपेक्षित — PUT path पहले से READY हो सकता है क्योंकि DNS skeleton से बना रहा
cert_stateCertificateValid (PUT) या PreDomainChallengePending (POST)PUT मौजूदा cert संरक्षित करता है; POST नई प्रोविजनिंग ट्रिगर करता है

चरण 4: DNS कॉन्फ़िगर करें

Section titled “चरण 4: DNS कॉन्फ़िगर करें”

लोड बैलेंसर बनाने के बाद, यह VIRTUAL_HOST_PENDING_A_RECORD स्थिति में प्रवेश करता है और स्वचालित सर्टिफिकेट PreDomainChallengePending में रहता है। LB के पूरी तरह से चालू होने से पहले दो DNS records मौजूद होने चाहिए:

  1. A recordxF5XC_DOMAINNAMEx VIP IP पते की ओर इशारा करते हुए (LB रिस्पॉन्स में dns_info से)
  2. ACME challenge record — TLS सर्टिफिकेट सत्यापन के लिए _acme-challenge.xF5XC_DOMAINNAMEx (F5 XC DNS के साथ managed records का उपयोग करते समय स्वचालित रूप से प्रबंधित; बाहरी DNS के लिए manual CNAME आवश्यक)

दृष्टिकोण इस बात पर निर्भर करता है कि क्या F5 XC आपके डोमेन के लिए authoritative DNS प्रदाता है।

DNS प्राधिकरण का पता लगाएं

Section titled “DNS प्राधिकरण का पता लगाएं”

अपने root domain के nameservers जांचें:

Terminal window
dig +short NS xF5XC_ROOT_DOMAINx

यदि रिस्पॉन्स में ns1.f5clouddns.com और ns2.f5clouddns.com शामिल हैं, तो F5 XC authoritative DNS प्रदाता है — विकल्प A का पालन करें। अन्यथा, बाहरी DNS के लिए विकल्प B का पालन करें।

जब F5 XC authoritative DNS प्रदाता हो, तो प्लेटफ़ॉर्म स्वचालित रूप से A record और ACME challenge CNAME दोनों बना सकता है — लेकिन केवल तभी जब DNS zone में allow_http_lb_managed_records सक्षम हो।

1. जांचें कि क्या managed records सक्षम हैं:

Terminal window
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'

यदि रिस्पॉन्स true है, तो प्लेटफ़ॉर्म लोड बैलेंसर के लिए DNS records स्वतः बनाएगा — 3. DNS resolution सत्यापित करें पर जाएं। यदि false या null है, तो अगले चरण पर जाएं।

2. Managed records सक्षम करें:

वर्तमान zone कॉन्फ़िगरेशन प्राप्त करें, managed records सक्षम करें और अपडेट करें:

Terminal window
# Get current zone config
ZONE_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 enabled
echo "$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 .

200 रिस्पॉन्स (खाली \{\}) पुष्टि करता है कि zone अपडेट किया गया। F5 XC zone के auto-managed record group में A record और ACME challenge record बनाएगा। यदि managed records 60 सेकंड के भीतर नहीं दिखते, तो record creation ट्रिगर करने के लिए लोड बैलेंसर को पुनः लागू करें:

Terminal window
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 .

यह GET+PUT re-apply LB कॉन्फ़िगरेशन नहीं बदलता — यह केवल प्लेटफ़ॉर्म को DNS zone का पुनः मूल्यांकन करने और managed records बनाने के लिए ट्रिगर करता है। यदि re-apply के 60 सेकंड बाद भी A record resolve नहीं होता, तो रुकें और ऑपरेटर को रिपोर्ट करें — re-apply एक से अधिक बार पुनः प्रयास न करें।

3. DNS resolution सत्यापित करें:

Terminal window
dig +short xF5XC_DOMAINNAMEx A

रिस्पॉन्स VIP IP पता वापस करना चाहिए। F5 XC managed zones के लिए DNS propagation आमतौर पर तत्काल होती है, लेकिन 60 सेकंड तक प्रतीक्षा करें।

विकल्प B: बाहरी DNS प्रदाता

Section titled “विकल्प B: बाहरी DNS प्रदाता”

जब आपका डोमेन बाहरी DNS प्रदाता का उपयोग करता है, तो आपको records मैन्युअल रूप से बनाने होंगे। लोड बैलेंसर से आवश्यक मान निकालें:

Terminal window
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
}'

अपने DNS प्रदाता पर ये records बनाएं:

प्रकारनाममान
AxF5XC_DOMAINNAMExdns_info[0].ip_address से VIP IP
CNAME_acme-challenge.xF5XC_DOMAINNAMEx*.autocerts.ves.volterra.io

Records बनाने के बाद, resolution सत्यापित करें:

Terminal window
dig +short xF5XC_DOMAINNAMEx A
dig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAME
परीक्षणकमांडअपेक्षितस्थिति
DNS-1: A Recorddig +short $F5XC_DOMAINNAME AVIP IP पता मिलाIP मिले तो PASS, खाली हो तो FAIL
DNS-2: ACME CNAMEdig +short _acme-challenge.$F5XC_DOMAINNAME CNAME*.autocerts.ves.volterra.ioCNAME मिले तो PASS
DNS authoritydig +short NS $F5XC_ROOT_DOMAINF5 XC या बाहरी nameserversसूचनात्मक — विकल्प A बनाम B निर्धारित करता है

यदि DNS-1 60 सेकंड बाद खाली लौटाता है, तो समस्या निवारण — LB Stuck in VIRTUAL_HOST_PENDING_A_RECORD देखें।

चरण 5: सत्यापित करें कि CSD सक्षम है

Section titled “चरण 5: सत्यापित करें कि CSD सक्षम है”

जांचें कि टेनेंट के लिए क्लाइंट-साइड डिफेंस सक्षम है। CSD टेनेंट स्तर पर कॉन्फ़िगर किया जाता है — यदि इसे अभी तक सक्षम नहीं किया गया है, तो अपने F5 XC प्रशासक से संपर्क करें।

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \
| jq .

"isConfigured": true और "isEnabled": true वाला रिस्पॉन्स पुष्टि करता है कि CSD सक्रिय है।

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \
| jq '{configured: .isConfigured, enabled: .isEnabled}'
फ़ील्डअपेक्षितस्थिति
configuredtruePASS
enabledtruePASS
कोई भी false होFAIL — टेनेंट स्तर पर CSD सक्षम करने के लिए F5 XC प्रशासक से संपर्क करें

चरण 6: संरक्षित डोमेन पंजीकृत करें

Section titled “चरण 6: संरक्षित डोमेन पंजीकृत करें”

वह root domain पंजीकृत करें जिसे CSD मॉनिटर करेगा। protected_domain फ़ील्ड eTLD+1 root domain होना चाहिए (जैसे, f5demos.com), पूर्ण FQDN नहीं।

जांचें कि क्या पहले से पंजीकृत है

Section titled “जांचें कि क्या पहले से पंजीकृत है”

बनाने से पहले, जांचें कि क्या डोमेन पहले से टेनेंट पर पंजीकृत है। POST के लिए 409 रिस्पॉन्स का अर्थ है डोमेन पहले से मौजूद है — यह सफलता की स्थिति है, error नहीं।

Terminal window
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 .
रिस्पॉन्सअर्थकार्रवाई
200डोमेन सफलतापूर्वक पंजीकृतचरण 7 पर जाएं
409 (domain already exists)डोमेन पहले इस टेनेंट पर पंजीकृत थापहले से हो गया — चरण 7 पर जाएं
"code": 8 (exhausted limits)संरक्षित domain कोटा भरा हुआअवरोधक — CSD के लिए संरक्षित domains आवश्यक हैं। अप्रयुक्त संरक्षित domains हटाएं या अपने प्रशासक से संपर्क करें।

POST रिस्पॉन्स स्वयं प्राथमिक साक्ष्य है — यह spec.protected_domain के साथ पंजीकृत domain ऑब्जेक्ट लौटाता है जो आपके root domain से मेल खाता है। वैकल्पिक रूप से, पुष्टि करने के लिए सभी संरक्षित domains सूचीबद्ध करें:

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq '.items | length'
फ़ील्डअपेक्षितस्थिति
POST ने protected_domain लौटायाF5XC_ROOT_DOMAIN से मेल खाता होPASS
POST ने 200 या 409 लौटायाDomain पंजीकृत है या पहले से मौजूद हैPASS
List items count> 0PASS

चरण 7: सत्यापित करें

Section titled “चरण 7: सत्यापित करें”

पुष्टि करें कि A record resolve हो रहा है और ACME challenge CNAME मौजूद है:

Terminal window
dig +short xF5XC_DOMAINNAMEx A
dig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAME

A record VIP IP पता वापस करना चाहिए। CNAME को *.autocerts.ves.volterra.io (या संबंधित autocerts target) की ओर इशारा करना चाहिए।

लोड बैलेंसर स्थिति

Section titled “लोड बैलेंसर स्थिति”

जांचें कि दोनों लोड बैलेंसर अपनी pending states से बाहर आ गए हैं। HTTP LB प्राथमिक जांच है — DNS resolve होने के बाद इसे VIRTUAL_HOST_READY तक पहुंचना चाहिए, बिना सर्टिफिकेट निर्भरता के। HTTPS LB सर्टिफिकेट स्थिति केवल सूचनात्मक है।

HTTP LB (प्राथमिक — आगे बढ़ने के लिए READY होना चाहिए):

Terminal window
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}'
फ़ील्डअपेक्षितमध्यवर्ती States
stateVIRTUAL_HOST_READYVIRTUAL_HOST_PENDING_A_RECORD — DNS कॉन्फ़िगर नहीं (चरण 4 देखें)

HTTPS LB (द्वितीयक — सूचनात्मक, प्रगति को अवरुद्ध नहीं करता):

Terminal window
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}'
फ़ील्डअपेक्षितमध्यवर्ती States
stateVIRTUAL_HOST_READYVIRTUAL_HOST_PENDING_A_RECORD — DNS कॉन्फ़िगर नहीं; VIRTUAL_HOST_DNS_A_RECORD_ADDED — A record मिला, cert की प्रतीक्षा
cert_stateCertificateValidPreDomainChallengePending — ACME CNAME की प्रतीक्षा; DomainChallengeStarted — ACME challenge प्रगति में; AutoCertDomainRateLimited — Let’s Encrypt दर सीमा पहुंची (डेमो एनवायरनमेंट में अपेक्षित, HTTP LB प्रभावित नहीं होता)
Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \
| jq .

रिस्पॉन्स में एक scriptTag फ़ील्ड होता है जिसमें पूरा HTML <script> tag होता है जिसे लोड बैलेंसर page responses में inject करता है।

Terminal window
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}'

scripts endpoint के लिए epoch timestamps (Unix epoch के बाद से सेकंड) का उपयोग करके एक समय सीमा आवश्यक है। नीचे दिया गया उदाहरण पिछले 7 दिनों की query करता है।

Terminal window
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}]'

form fields endpoint के लिए epoch timestamps का उपयोग करके एक समय सीमा आवश्यक है, जो query parameters के रूप में पास की जाती है।

Terminal window
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'

चरण 1 साक्ष्य सारांश

Section titled “चरण 1 साक्ष्य सारांश”

सभी सत्यापन जांच पूरी करने के बाद, AI सहायक को एक consolidated status table प्रस्तुत करना चाहिए:

परीक्षण IDजांचअपेक्षितआवश्यकस्थिति
DNS-1A Record resolve होता हैVIP IP पता मिलाहाँPASS / FAIL
DNS-2ACME CNAME मौजूद है*.autocerts.ves.volterra.ioनहींPASS / PENDING
LB-1HTTP LB stateVIRTUAL_HOST_READYहाँPASS / PENDING
LB-2HTTPS LB stateVIRTUAL_HOST_READYनहींPASS / PENDING / INFO
TLS-1सर्टिफिकेट stateCertificateValidनहींPASS / PENDING / INFO
CSD-1JS कॉन्फ़िगरेशनscriptTag मौजूदहाँPASS / FAIL
CSD-2CSD स्थितिisEnabled: trueहाँPASS / FAIL
CSD-3संरक्षित domainDomain पंजीकृतहाँPASS / FAIL

यदि LB-1 PENDING दिखाता है, तो 4 iterations तक (कुल 2 मिनट) हर 30 सेकंड में poll करें। यदि 4 iterations के बाद भी LB-1 VIRTUAL_HOST_READY नहीं है, तो dig से DNS resolution जांचें और ऑपरेटर को रिपोर्ट करें — LB-1 READY होने तक आगे न बढ़ें। LB-2 और TLS-1 के लिए, 10 iterations तक (10 मिनट) हर 60 सेकंड में poll करें। यदि 10 iterations के बाद भी मध्यवर्ती state में हैं, तो वर्तमान state INFO के रूप में रिकॉर्ड करें और आगे बढ़ें — ये सूचनात्मक हैं और डेमो प्रगति को अवरुद्ध नहीं करते।


चरण 1 पूरा। आक्रमण सिमुलेशन चलाने के लिए चरण 2 — आक्रमण पर आगे बढ़ें।