-
Notifications
You must be signed in to change notification settings - Fork 2k
Add support for backup directive for VS and TS #4653
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
59 commits
Select commit
Hold shift + click to select a range
e3edfa6
Update CRDS for service backup
jjngx ffe956d
Add VS validators for Backup
jjngx 132639a
Add backup validation for TS
jjngx a3d042a
Remove redundant test
jjngx 87accc5
Validate lb methods with params
jjngx ba17d62
Update lb validation test for TS
jjngx bdac84d
Add backup server to VS templates
jjngx 23b2646
Add tests for VS template executor
jjngx 1b684cf
Add backup to TS templates
jjngx 7dbc99d
Add TS templates tests
jjngx 37ce0a9
Add support for backup svc for VS and TS
jjngx a416f66
Resolved merge conflicts in TS and VS templates
jjngx d98eb4a
Update tests for VS backups service
jjngx 74c1215
Add negative tests for TS and VS backup name
jjngx ef077c5
Merge branch 'main' into feat/backup-service
jjngx 3f56740
Update check for nil backup
jjngx 86bd7ed
Add docs for backup directive
jjngx b5fe733
Add docs for backup directive
jjngx 9afc9de
Merge branch 'main' into feat/backup-service
jjngx 2d24bc6
Merge branch 'main' into feat/backup-service
jjngx d4e8a0b
Encapsulate backup generation logic in a func
jjngx 33f1a80
Merge branch 'main' into feat/backup-service
jjngx c04ec6b
WIP - backup directive examples
jjngx a383436
WIP - VS examples for Backup
jjngx cd243ad
Merge branch 'main' into feat/backup-service
jjngx 16c3a76
WIP - update TS backup example
jjngx c69ee92
WIP - update TS backup example
jjngx fd9813e
Increase test coverage
jjngx 014b38a
WIP Update TS backup examples
jjngx 224a38a
Merge branch 'main' into feat/backup-service
jjngx 46d1a72
WIP - update docs for TS
jjngx a1d8888
WIP - fix service name in TS example
jjngx eec0e90
Add cafe secret for the example app
jjngx 32875de
Merge branch 'main' into feat/backup-service
jjngx 01808c8
Combine yaml files
jjngx ff8c169
Update README for TS
jjngx a9cdc6e
Update ts and vs examples
shaun-nx 26b26f7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 58d7d57
Fix linting in README
shaun-nx 8512468
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] ed97663
Fix headings and indentations
shaun-nx 2e5f080
Don't create backup when resolver not configured
jjngx 23d5fb6
Merge branch 'main' into feat/backup-service
jjngx 6cf2473
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx 943bcb1
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx b3303be
Update docs/content/configuration/transportserver-resource.md
jjngx 1a3df82
Update docs/content/configuration/virtualserver-and-virtualserverrout…
jjngx ba8c2fc
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx 74d78fa
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx 6972b7f
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx e5d6d48
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx 905f0b3
Update examples/custom-resources/backup-directive/transport-server/RE…
jjngx c9d8b6e
Add functional tests for VS and TS
shaun-nx 101b9db
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 45c61ec
Fix markdown linting
jjngx 5b3b886
Remove updates to NIC OSS
jjngx 0c4a8ca
Fix merge conflict
jjngx 1612d9f
Sort upstream backups
jjngx 9942a71
Merge branch 'main' into feat/backup-service
jjngx File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
108 changes: 108 additions & 0 deletions
108
examples/custom-resources/backup-directive/transport-server/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| # Support for Backup Directive in Transport Server | ||
|
|
||
| F5 NGINX Ingress Controller supports routing requests to a service called `backup`. | ||
| `backup` is an [ExternalName](https://kubernetes.io/docs/concepts/services-networking/service/#externalname) service. | ||
|
|
||
| > [!NOTE] | ||
| > The [ExternalName](https://kubernetes.io/docs/concepts/services-networking/service/#externalname) service is only | ||
| available with NGINX Plus. | ||
|
|
||
| For this example, we will use two [tls-passthrough](/examples/custom-resources/tls-passthrough) configurations. | ||
| One will be deployed in the `default` namespace, and the other in the `external-ns` namespace. | ||
|
|
||
| The application in the `external-ns` namespace will respond to our requests when main application is unavailable. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| 1. Configure the F5 NGINX Ingress Controller deployment with the following flags: | ||
|
|
||
| ```shell | ||
| -enable-custom-resources | ||
| -enable-tls-passthrough | ||
| -watch-namespace=nginx-ingress,default | ||
| ``` | ||
|
|
||
| We configure the `-watch-namespace` flag to only watch the `nginx-ingress` and `default` namespaces. | ||
| This ensures that NGINX Ingress Controller will treat our service in the `external-ns` namespace | ||
| as an external service. | ||
|
|
||
| 2. Follow the [installation](https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/) | ||
| instructions to deploy NGINX Ingress Controller. | ||
|
|
||
| 3. Save the public IP address of the F5 NGINX Ingress Controller into a shell variable: | ||
|
|
||
| ```shell | ||
| IC_IP=XXX.YYY.ZZZ.III | ||
| ``` | ||
|
|
||
| 4. Save the HTTPS port of NGINX Ingress Controller into a shell variable: | ||
|
|
||
| ```shell | ||
| IC_HTTPS_PORT=<port number> | ||
| ``` | ||
|
|
||
| ## Deployment | ||
|
|
||
| ### 1. Deploy ConfigMap with defined resolver | ||
|
|
||
| ```shell | ||
| kubectl create -f nginx-config.yaml | ||
| ``` | ||
|
|
||
| ### 2. Deploy Backup ExternalName service | ||
|
|
||
| ```shell | ||
| kubectl create -f backup-svc.yaml | ||
| ``` | ||
|
|
||
| ### 3. Deploy the tls-passthrough application | ||
|
|
||
| ```shell | ||
| kubectl create -f secure-app.yaml | ||
| ``` | ||
|
|
||
| ### 4. Deploy TransportServer | ||
|
|
||
| ```shell | ||
| kubectl create -f transport-server-passthrough.yaml | ||
| ``` | ||
|
|
||
| ### 5. Test the Configuration | ||
|
|
||
| Run the below curl command to get a response from your application: | ||
|
|
||
| ```shell | ||
| curl --resolve app.example.com:$IC_HTTPS_PORT:$IC_IP https://app.example.com:$IC_HTTPS_PORT --insecure | ||
| ``` | ||
|
|
||
| ```shell | ||
| hello from pod secure-app-694bc784b-qh8ng | ||
| ``` | ||
|
|
||
| ### 6. Deploy the second tls-passthrough application to the external namespace | ||
|
|
||
| ```shell | ||
| kubectl apply -f external-secure-app.yaml | ||
| ``` | ||
|
|
||
| ### 7. Test the configuration using the backup service | ||
|
|
||
| 1. Scale down `secure-app` deployment to 0. | ||
| This is done to ensure that the external `backup` service will respond to our requests. | ||
|
|
||
| ```shell | ||
| kubectl scale deployment secure-app --replicas=0 | ||
| ``` | ||
|
|
||
| 2. Verify if the application is working by sending a request and check if the response is coming from the "external | ||
| backend pod" | ||
|
|
||
| ```shell | ||
| curl --resolve app.example.com:$IC_HTTPS_PORT:$IC_IP https://app.example.com:$IC_HTTPS_PORT --insecure | ||
| ``` | ||
|
|
||
| 3. Check response from the backup service | ||
|
|
||
| ```shell | ||
| HELLO FROM EXTERNAL APP pod secure-app-backup-7d98dd8d78-p8q7d | ||
| ``` |
7 changes: 7 additions & 0 deletions
7
examples/custom-resources/backup-directive/transport-server/backup-svc.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| kind: Service | ||
| apiVersion: v1 | ||
| metadata: | ||
| name: backup-svc-ts | ||
| spec: | ||
| type: ExternalName | ||
| externalName: secure-app-backup.external-ns.svc.cluster.local |
85 changes: 85 additions & 0 deletions
85
examples/custom-resources/backup-directive/transport-server/external-secure-app.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,85 @@ | ||
| apiVersion: v1 | ||
| kind: Namespace | ||
| metadata: | ||
| name: external-ns | ||
| namespace: external-ns | ||
| --- | ||
| apiVersion: apps/v1 | ||
| kind: Deployment | ||
| metadata: | ||
| name: secure-app-backup | ||
| namespace: external-ns | ||
| spec: | ||
| replicas: 1 | ||
| selector: | ||
| matchLabels: | ||
| app: secure-app-backup | ||
| template: | ||
| metadata: | ||
| labels: | ||
| app: secure-app-backup | ||
| spec: | ||
| containers: | ||
| - name: secure-app-backup | ||
| image: nginxdemos/nginx-hello:plain-text | ||
| ports: | ||
| - containerPort: 8443 | ||
| volumeMounts: | ||
| - name: secret | ||
| mountPath: /etc/nginx/ssl | ||
| readOnly: true | ||
| - name: config-volume | ||
| mountPath: /etc/nginx/conf.d | ||
| volumes: | ||
| - name: secret | ||
| secret: | ||
| secretName: app-tls-secret | ||
| - name: config-volume | ||
| configMap: | ||
| name: secure-config | ||
| --- | ||
| apiVersion: v1 | ||
| kind: Service | ||
| metadata: | ||
| name: secure-app-backup | ||
| namespace: external-ns | ||
| spec: | ||
| ports: | ||
| - port: 8443 | ||
| targetPort: 8443 | ||
| protocol: TCP | ||
| name: https | ||
| selector: | ||
| app: secure-app-backup | ||
| --- | ||
| apiVersion: v1 | ||
| kind: ConfigMap | ||
| metadata: | ||
| name: secure-config | ||
| namespace: external-ns | ||
| data: | ||
| app.conf: |- | ||
| server { | ||
| listen 8443 ssl; | ||
| listen [::]:8443 ssl; | ||
| server_name app.example.com; | ||
| ssl_certificate /etc/nginx/ssl/tls.crt; | ||
| ssl_certificate_key /etc/nginx/ssl/tls.key; | ||
| default_type text/plain; | ||
| location / { | ||
| return 200 "HELLO FROM EXTERNAL APP pod $hostname\n"; | ||
| } | ||
| } | ||
| --- | ||
| apiVersion: v1 | ||
| kind: Secret | ||
| metadata: | ||
| name: app-tls-secret | ||
| namespace: external-ns | ||
| data: | ||
| tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURGRENDQWZ3Q0NRQ3EzQWxhdnJiaWpqQU5CZ2txaGtpRzl3MEJBUXNGQURCTU1Rc3dDUVlEVlFRR0V3SlYKVXpFTE1Ba0dBMVVFQ0F3Q1EwRXhGakFVQmdOVkJBY01EVk5oYmlCR2NtRnVZMmx6WTI4eEdEQVdCZ05WQkFNTQpEMkZ3Y0M1bGVHRnRjR3hsTG1OdmJUQWVGdzB5TURBek1qTXlNekl3TkROYUZ3MHlNekF6TWpNeU16SXdORE5hCk1Fd3hDekFKQmdOVkJBWVRBbFZUTVFzd0NRWURWUVFJREFKRFFURVdNQlFHQTFVRUJ3d05VMkZ1SUVaeVlXNWoKYVhOamJ6RVlNQllHQTFVRUF3d1BZWEJ3TG1WNFlXMXdiR1V1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQTJCRXhZR1JPRkhoN2VPMVlxeCtWRHMzRzMrVEhyTEZULzdEUFFEQlkza3pDCi9oZlprWCt3OW1NNkQ1RU9uK2lpVlNhUWlQMm1aNFA3N29pR0dmd3JrNjJ0eEQ5cHphODM5NC9aSjF5Q0dXZ1QKK2NWUEVZbkxjQktzSTRMcktJZ21oWVIwUjNzWWRjR1JkSXJWUFZlNUVUQlk1Z1U0RGhhMDZOUEIraitmK0krWgphWGIvMlRBekJhNHozMWpIQzg2amVQeTFMdklGazFiY3I2cSsxRGR5eklxcWxkRDYvU3Q4Q2t3cDlOaDFCUGFhCktZZ1ZVd010UVBib2s1cFFmbVMrdDg4NHdSM0dTTEU4VkxRbzgyYnJhNUR3emhIamlzOTlJRGhzbUt0U3lWOXMKaWNJbXp5dHBnSXlhTS9zWEhRQU9KbVFJblFteWgyekd1WFhTQ0lkRGtRSURBUUFCTUEwR0NTcUdTSWIzRFFFQgpDd1VBQTRJQkFRQ0tsVkhOZ1k5VHZLaW9Xb0tvdllCdnNRMmYrcmFOOEJwdWNDcnRvRm15NUczcGIzU2lPTndaCkF2cnhtSm4vR3lsa3JKTHBpQVA1eUNBNGI2Y2lYMnRGa3pQRmhJVFZKRTVBeDlpaEF2WWZwTUFSdWVqM29HN2UKd0xwQk1iUnlGbHJYV29NWUVBMGxsV0JueHRQQXZYS2Y4SVZGYTRSSDhzV1JJSDB4M2hFdjVtQ3VUZjJTRTg0QwpiNnNjS3Z3MW9CQU5VWGxXRVZVYTFmei9rWWZBa1lrdHZyV2JUcTZTWGxodXRJYWY4WEYzSUMrL2x1b3gzZThMCjBBcEFQVE5sZ0JwOTkvcXMrOG9PMWthSmQ1TmV6TnlJeXhSdUtJMzlDWkxuQm9OYmkzdlFYY1NzRCtYU2lYT0cKcEVnTjNtci8xRms4OVZMSENhTnkyKzBqMjZ0eWpiclcKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= | ||
| tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFlFVEZnWkU0VWVIdDQKN1Zpckg1VU96Y2JmNU1lc3NWUC9zTTlBTUZqZVRNTCtGOW1SZjdEMll6b1BrUTZmNktKVkpwQ0kvYVpuZy92dQppSVlaL0N1VHJhM0VQMm5OcnpmM2o5a25YSUlaYUJQNXhVOFJpY3R3RXF3amd1c29pQ2FGaEhSSGV4aDF3WkYwCml0VTlWN2tSTUZqbUJUZ09GclRvMDhINlA1LzRqNWxwZHYvWk1ETUZyalBmV01jTHpxTjQvTFV1OGdXVFZ0eXYKcXI3VU4zTE1pcXFWMFByOUszd0tUQ24wMkhVRTlwb3BpQlZUQXkxQTl1aVRtbEIrWkw2M3p6akJIY1pJc1R4VQp0Q2p6WnV0cmtQRE9FZU9LejMwZ09HeVlxMUxKWDJ5SndpYlBLMm1Bakpveit4Y2RBQTRtWkFpZENiS0hiTWE1CmRkSUloME9SQWdNQkFBRUNnZ0VCQUxYaW16ODZrT1A0bkhBcTFPYVEyb2l3dndhQTczbTNlUytZSm84eFk4NFcKcmxyNXRzUWR5dGxPcEhTd05yQjBSQnNNTU1XeFNPQ0JJWlltUlVVZ200cGd2Uk9rRWl2OG9VOThQMkE4SnFTKwprWHBFRjVCNi84K2pXRmM0Z1Q4SWhlMEZtR0VJQllvelhYL08wejBsV0h4WXg2MHluWUoycU9vS1FKT3A5YjlsCmpiUVBkaC9mN2ErRWF0RzZNUFlrNG5xSEY3a0FzcmNsRXo2SGUvaEx6NmRkSTJ1N2RMRjB6QlN0QjM5WDFRZysKZ1JzTittOXg1S1FVTXYxMktvajdLc2hEelozOG5hSjd5bDgycGhBV1lGZzBOZHlzRlBRbmt0WmlNSUxOblFjNwpOeUt0cHNQaUxIRE9ha05hdEZLU2lOaUJrUk1lY1ZUMlJNMzMzUG54bFVFQ2dZRUEvYTY5MEEralU4VFJNbVZyCk4vRnlYWkxYa1c5b2NxVjBRbTA0TDMrSExybFNCTlRWSzk2U1pVT203VjViTzIxNmd4S2dJK3IwYm5kdE5GTUQKLzFncDhsdlJNcUlIeGZTeUo4SHpsSzViT0lnaUpxRGhzK3BKWTZmLytIVzZ1QkZyN3NGS3lxbVlIQlA0SC9BdApsT3lLeEVjMHFXazFlT2tCMWNNSGx0WDRwemtDZ1lFQTJncDhDVDVYWjNMSWRQN2M1SHpDS1YwczBYS1hGNmYyCkxzclhPVlZaTmJCN1NIS1NsOTBIU2VWVGx3czdqSnNxcC9yWFY2aHF0eUdEaTg4aTFZekthcEF6dXl3b0U3TnEKMUJpd2ZYSURQeTlPNUdGNXFYNXFUeENzSWNIcmo2Z21XMEZVQWhoS1lQcDRxd1JMdzFMZkJsd3U1VmhuN3I3ego0SkZBTEFpdlp4a0NnWUJicnpuKzVvZjdFSmtqQTdDYWlYTHlDczVLUzkrTi8rcGl6NktNMkNSOWFKRVNHZkhwClp3bTErNXRyRXIwYVgxajE0bGRxWTlKdjBrM3ZxVWs2a2h5bThUUk1mbThjeG5GVkdTMzF3SVpMaWpmOWlndkkKd0paQnBFaEkvaE83enVBWmJGYWhwR1hMVUJSUFJyalNxQ01IQ1UwcEpWTWtIZUtCNVhqcXRPNm5VUUtCZ0NJUAp6VHlzYm44TW9XQVZpSEJ4Uk91dFVKa1BxNmJZYUU3N0JSQkIwd1BlSkFRM1VjdERqaVh2RzFYWFBXQkR4VEFrCnNZdFNGZ214eEprTXJNWnJqaHVEbDNFLy9xckZOb1VYcmtxS2l4Tk4wcWMreXdDOWJPSVpHcXJUWG5jOHIzRkcKRFZlZWI5QWlrTU0ya3BkYTFOaHJnaS8xMVphb1lmVE0vQmRrNi9IUkFvR0JBSnFzTmFZYzE2clVzYzAzUEwybApXUGNzRnZxZGI3SEJyakVSRkhFdzQ0Vkt2MVlxK0ZWYnNNN1FTQVZ1V1llcGxGQUpDYzcrSEt1YjRsa1hRM1RkCndSajJLK2pOUzJtUXp1Y2hOQnlBZ1hXVnYveHhMZEE3NnpuWmJYdjl5cXhnTVVjTVZwZGRuSkxVZm9QVVZ1dTcKS0tlVVU3TTNIblRKUStrcldtbUxraUlSCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K |
7 changes: 7 additions & 0 deletions
7
examples/custom-resources/backup-directive/transport-server/nginx-config.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| kind: ConfigMap | ||
| apiVersion: v1 | ||
| metadata: | ||
| name: nginx-config | ||
| namespace: nginx-ingress | ||
| data: | ||
| resolver-addresses: "kube-dns.kube-system.svc.cluster.local" |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.