Skip to content

Commit 268803f

Browse files
committed
feat: final PLM detail
1 parent 96d352d commit 268803f

File tree

1 file changed

+44
-16
lines changed

1 file changed

+44
-16
lines changed

content/waf/policies/lifecycle-management.md

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -580,9 +580,47 @@ Check that all components are deployed successfully using _kubectl get_:
580580
```shell
581581
kubectl get pods -n <namespace>
582582
kubectl get crds | grep appprotect.f5.com
583+
kubectl get pvc -n <namespace>
584+
kubectl get pv
583585
kubectl 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

783811
Once 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
827855
kubectl apply -f dataguard-blocking-policy.yaml -n <namespace>
828856
```
829857

830-
831-
832858
### Check policy compilation status
833859

834860
Verify 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
908934
app_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
914940
app_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
920946
helm 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
933959
kubectl 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
939965
curl "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

Comments
 (0)