@@ -580,9 +580,47 @@ Check that all components are deployed successfully using _kubectl get_:
580580` ` ` shell
581581kubectl get pods -n <namespace>
582582kubectl get crds | grep appprotect.f5.com
583+ kubectl get pvc -n <namespace>
584+ kubectl get pv
583585kubectl get all -n <namespace>
584586` ` `
585587
588+ If you don't see a persistent volume claim in the namespace, first check that storage configuration in your values file is correct :
589+
590+ ` ` ` shell
591+ helm get values <release-name> -n <namespace>
592+ ` ` `
593+
594+ You should see a section named _appprotect.storage_ with the parameter _bundlesPvc.storageRequest_. If it's missing, use `helm upgrade` to add it :
595+
596+ ` ` ` shell
597+ helm upgrade <release-name> . --namespace <namespace> \
598+ --values /path/to/your/values.yaml \
599+ --set appprotect.policyController.enable=true \
600+ --set dockerConfigJson=$NGINX_REGISTRY_TOKEN \
601+ --set appprotect.config.nginxJWT=$JWT \
602+ --set appprotect.nginxRepo.nginxCrt=$NGINX_CERT \
603+ --set appprotect.nginxRepo.nginxKey=$NGINX_KEY \
604+ --set appprotect.storage.pvc.bundlesPvc.storageClass=manual \
605+ --set appprotect.storage.pvc.bundlesPvc.storageRequest=2Gi
606+ ` ` `
607+
608+ If the volume claim exists but shows "Pending", review the binding :
609+
610+ ` ` ` shell
611+ kubectl describe pvc -n <namespace>
612+ kubectl describe pv nginx-app-protect-shared-bundles-pv
613+ ` ` `
614+
615+ Ensure the `pv` _storageClassName_ matches the `pvc` requirements.
616+
617+ In totality, you should see the following :
618+
619+ - **Policy Controller pod**: `1/1 Running` status
620+ - **F5 WAF for NGINX pod**: `4/4 Running` status (nginx, waf-config-mgr, waf-enforcer, waf-ip-intelligence containers)
621+ - **All 4 CRDs**: Each CRD should be installed and show creation timestamps
622+ - **Service**: The NodePort service should be available with assigned port
623+
586624# # Use Policy lifecycle management
587625
588626# ## Create policy resources
@@ -752,32 +790,22 @@ The key information to review is the following:
752790 - ` ready` - Policy successfully compiled and available
753791 - ` processing` - Policy is being compiled
754792 - ` error` - Compilation failed (check Policy Controller logs)
755-
756793- **`Status.Bundle.Location`**: File path where the compiled policy bundle is stored
757-
758794- **`Status.Bundle.Compiler Version`**: Version of the WAF compiler used for compilation
759-
760795- **`Status.Bundle.Signatures`**: Timestamps showing when security signatures were last updated
761796 - ` Attack Signatures` - Attack signature update timestamp
762797 - ` Bot Signatures` - Bot signature update timestamp
763798 - ` Threat Campaigns` - Threat campaign signature update timestamp
764-
765799- **`Status.Processing.Is Compiled`**: Boolean indicating if compilation completed successfully
766-
767800- **`Status.Processing.Datetime`**: Timestamp of the last compilation attempt
768-
769801- **`Events`**: Shows any Kubernetes events related to the policy (usually none for successful policies)
770-
771802- **`status.bundle.signatures`**: Timestamps showing when security signatures were last updated
772803 - ` attackSignatures` - Attack signature update timestamp
773804 - ` botSignatures` - Bot signature update timestamp
774805 - ` threatCampaigns` - Threat campaign signature update timestamp
775-
776806- **`status.processing.isCompiled`**: Boolean indicating if compilation completed successfully
777-
778807- **`status.processing.datetime`**: Timestamp of the last compilation attempt
779808
780-
781809# ## Use specific security update versions
782810
783811Once Policy lifecycle management is deployed, you can define a specific security update version on a per-feature basis.
@@ -827,8 +855,6 @@ Apply one of the sample policy Custom Resources to verify PLM is working correct
827855kubectl apply -f dataguard-blocking-policy.yaml -n <namespace>
828856` ` `
829857
830-
831-
832858# ## Check policy compilation status
833859
834860Verify that the policy has been compiled successfully by checking the Custom Resource status :
@@ -908,13 +934,13 @@ Then open your `values.yaml` file in an editor and look for the policy directive
908934app_protect_policy_file app_protect_default_policy
909935` ` `
910936
911- Replace _app_protect_default_policy with the custom resource name, such as :
937+ Replace _app_protect_default_polic_y_ with the custom resource name, such as :
912938
913939` ` ` yaml
914940app_protect_policy_file dataguard-blocking;
915941` ` `
916942
917- Use `` helm upgrade` to apply the new configuration, replacing the name and namespace accordingly :
943+ Use `helm upgrade` to apply the new configuration, replacing the name and namespace accordingly :
918944
919945` ` ` shell
920946helm upgrade <release-name> . \
@@ -927,13 +953,13 @@ helm upgrade <release-name> . \
927953 --set appprotect.nginxRepo.nginxKey=$NGINX_KEY
928954` ` `
929955
930- You can then restart your Kubernetes deployment to load the new configuration changes :
956+ Restart your Kubernetes deployment to load the new configuration changes :
931957
932958` ` ` shell
933959kubectl rollout restart deployment <deployment-name> -n <namespace>
934960` ` `
935961
936- To test the change, send a request that should be blocked by the dataguard policy :
962+ Send a test request to trigger the dataguard policy :
937963
938964` ` ` shell
939965curl "http://[CLUSTER-IP]:80/?a=<script>"
@@ -1049,6 +1075,8 @@ helm install
10491075 ...
10501076` ` `
10511077
1078+ For more information relevant to this type of deployment, see the [Disconnected or air-gapped environments]({{< ref "/waf/install/disconnected-environment.md" >}}) topic.
1079+
10521080# # Possible issues
10531081
10541082**Policy Controller does not start**
0 commit comments