Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: fluxcd/kustomize-controller
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.19.1
Choose a base ref
...
head repository: fluxcd/kustomize-controller
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.20.0
Choose a head ref

Commits on Jan 14, 2022

  1. Use patch instead of update when adding finalizers

    Signed-off-by: Kingdon Barrett <kingdon@weave.works>
    Kingdon Barrett committed Jan 14, 2022
    Copy the full SHA
    441b48a View commit details
  2. Merge pull request #535 from kingdonb/patch-finalizers

    Use patch instead of update when adding finalizers
    stefanprodan authored Jan 14, 2022
    Copy the full SHA
    b18584a View commit details
  3. Fuzzing: Initial commit

    Signed-off-by: AdamKorcz <adam@adalogics.com>
    AdamKorcz authored and Paulo Gomes committed Jan 14, 2022
    Copy the full SHA
    7f84416 View commit details
  4. Refactor fuzzing

    Structure the fuzz implementation to be closer to what go native will support.
    Add Makefile target to enable smoketesting fuzzers.
    Add smoketest as CI workflow.
    
    Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
    Paulo Gomes committed Jan 14, 2022
    Copy the full SHA
    50c043e View commit details
  5. Docs - Add var substitution operator escape syntax

    Signed-off-by: Gonzalo Villafañe Tapia <gvillafanetapia@gmail.com>
    gvillafanetapia committed Jan 14, 2022
    Copy the full SHA
    6c343e1 View commit details

Commits on Jan 17, 2022

  1. Merge pull request #537 from gvillafanetapia/doc-escape-vars

    Docs - Add var substitution operator escape syntax
    stefanprodan authored Jan 17, 2022
    Copy the full SHA
    0a6505f View commit details
  2. Merge pull request #536 from pjbgf/fuzz

    Refactor Fuzz implementation
    stefanprodan authored Jan 17, 2022
    Copy the full SHA
    c626836 View commit details

Commits on Jan 19, 2022

  1. drop capabilities, enable seccomp and enforce runAsNonRoot

    Further restricts the SecurityContext that the controller runs under, by enabling the default seccomp profile and dropping all linux capabilities.
    This was set at container-level to ensure backwards compatibility with use cases in which sidecars are injected into the source-controller pod
    without setting less restrictive settings.
    Add a uid and gid for the container to enforce runAsNonRoot and ensure
    the use of non root users.
    
    BREAKING CHANGES:
    1) The use of new seccomp API requires Kubernetes 1.19.
    2) the controller container is now executed under 65534:65534 (userid:groupid).
       This change may break deployments that hard-coded the user name 'controller' in their PodSecurityPolicy.
    
    Signed-off-by: Sanskar Jaiswal <sanskar.jaiswal@weave.works>
    Co-authored-by: Paulo Gomes <paulo.gomes@weave.works>
    Sanskar Jaiswal and Paulo Gomes committed Jan 19, 2022
    Copy the full SHA
    c0d5eee View commit details
  2. Update dev docs

    Signed-off-by: Yiannis <yiannis.triantafyllopoulos@gmail.com>
    yiannistri committed Jan 19, 2022
    Copy the full SHA
    7648733 View commit details
  3. Merge pull request #540 from yiannistri/dev-docs

    Update development documentation
    stefanprodan authored Jan 19, 2022
    Copy the full SHA
    91e96a2 View commit details
  4. add native support for sops decryption/encryption with Vault

    If implemented, the kustomize controller will be able to retrieve a
    secret containing a VAULT TOKEN and use it to decrypt the sops encrypted
    master key. It will then use it to decrypt the data key and finally use the data
    key to decrypt the final data.
    
    Signed-off-by: Soule BA <bah.soule@gmail.com>
    souleb committed Jan 19, 2022
    Copy the full SHA
    c579e71 View commit details

Commits on Jan 20, 2022

  1. Merge pull request #539 from aryan9600/aryan9600/security-context

    Drop capabilities, enable seccomp and enforce runAsNonRoot
    stefanprodan authored Jan 20, 2022
    Copy the full SHA
    12d9fab View commit details
  2. Merge pull request #538 from souleb/issue-516

    SOPS: Add support for HashiCorp Vault token-based authentication
    stefanprodan authored Jan 20, 2022
    Copy the full SHA
    6658d78 View commit details
  3. Publish SBOM and sign release artifacts

    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 20, 2022
    Copy the full SHA
    be87d12 View commit details
  4. Merge pull request #541 from fluxcd/cosign-sbom

    Publish SBOM and sign release artifacts
    stefanprodan authored Jan 20, 2022
    Copy the full SHA
    b6eeb14 View commit details
  5. Add Permissions to github Workflows

    Improve GITHUB_TOKEN permissions in the workflows.
    
    Signed-off-by: Soule BA <bah.soule@gmail.com>
    souleb committed Jan 20, 2022
    Copy the full SHA
    f1327dc View commit details
  6. Merge pull request #543 from souleb/token-permissions

    Add Permissions to github Workflows
    stefanprodan authored Jan 20, 2022
    Copy the full SHA
    593ac59 View commit details

Commits on Jan 21, 2022

  1. Fix preflight validation

    Validate that the resources built with kustomize conform to the Kubernetes API conventions before passing them to the server-side apply engine.
    
    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 21, 2022
    Copy the full SHA
    4ee01a2 View commit details
  2. Merge pull request #544 from fluxcd/validate-resouces

    Fix preflight validation
    stefanprodan authored Jan 21, 2022
    Copy the full SHA
    0b01831 View commit details

Commits on Jan 24, 2022

  1. Fix the missing protocol for the first port in manager config

    Signed-off-by: Maksym Voitko <max.voitko@gmail.com>
    mvoitko committed Jan 24, 2022
    Copy the full SHA
    7a511ef View commit details

Commits on Jan 25, 2022

  1. Merge pull request #547 from mvoitko/fix/missing-port-protocol-in-man…

    …ager-config
    
    Fix the missing protocol for the first port in manager config
    stefanprodan authored Jan 25, 2022
    Copy the full SHA
    d22f984 View commit details

Commits on Jan 26, 2022

  1. Allow disabling cross-namespace references

    Introduce the flag `--no-cross-namespace-refs` (defaults to false) for allowing cluster admins to disable cross-namespace references to sources.
    
    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 26, 2022
    Copy the full SHA
    518c8a0 View commit details

Commits on Jan 27, 2022

  1. Merge pull request #549 from fluxcd/no-cross-namespace-refs

    Allow disabling cross-namespace references
    stefanprodan authored Jan 27, 2022
    Copy the full SHA
    09e6c29 View commit details
  2. Allow setting a default service account for impersonation

    Introduce the flag `--default-service-account` for allowing cluster admins to enforce impersonation for resources reconciliation.
    
    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 27, 2022
    Copy the full SHA
    4d7cba9 View commit details

Commits on Jan 31, 2022

  1. Merge pull request #550 from fluxcd/default-service-account

    Allow setting a default service account for impersonation
    stefanprodan authored Jan 31, 2022
    Copy the full SHA
    4b59d77 View commit details
  2. Revoke kubectl managed fields ownership

    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 31, 2022
    Copy the full SHA
    3854107 View commit details
  3. Introduce a dedicated manager for status updates to avoid conflicts

    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 31, 2022
    Copy the full SHA
    f353ba4 View commit details
  4. Merge pull request #527 from fluxcd/ssa-override-kubectl-manager

    Revoke kubectl managed fields ownership
    stefanprodan authored Jan 31, 2022
    Copy the full SHA
    8e74f2c View commit details
  5. Update source-controller/api to v0.21.1

    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 31, 2022
    Copy the full SHA
    ea95f0c View commit details
  6. Merge pull request #551 from fluxcd/source-controller/api-v0.21.1

    Update source-controller/api to v0.21.1
    stefanprodan authored Jan 31, 2022
    Copy the full SHA
    cd6fff0 View commit details
  7. Ensure object are finalized under impersonation

    If the service account used for impersonation has been deleted, skip pruning, log the error and continue with finalization to allow tenants removals from clusters.
    
    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Jan 31, 2022
    Copy the full SHA
    65aaa1d View commit details
  8. Merge pull request #552 from fluxcd/impersonation-finalize

    Ensure object are finalized under impersonation
    stefanprodan authored Jan 31, 2022
    Copy the full SHA
    ceefe5a View commit details

Commits on Feb 1, 2022

  1. Release v0.20.0

    Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
    stefanprodan committed Feb 1, 2022
    Copy the full SHA
    d188195 View commit details
  2. Merge pull request #555 from fluxcd/release-v0.20.0

    Release v0.20.0
    stefanprodan authored Feb 1, 2022
    Copy the full SHA
    0d6f5af View commit details
Showing with 2,406 additions and 229 deletions.
  1. +24 −0 .github/workflows/cifuzz.yaml
  2. +26 −2 .github/workflows/e2e.yaml
  3. +3 −0 .github/workflows/nightly.yml
  4. +5 −0 .github/workflows/rebase.yml
  5. +33 −24 .github/workflows/release.yml
  6. +4 −0 .github/workflows/scan.yml
  7. +2 −1 .gitignore
  8. +39 −0 .goreleaser.yaml
  9. +63 −0 CHANGELOG.md
  10. +64 −13 DEVELOPMENT.md
  11. +1 −5 Dockerfile
  12. +21 −2 Makefile
  13. +1 −1 api/go.mod
  14. +3 −2 api/go.sum
  15. +2 −2 config/default/kustomization.yaml
  16. +7 −0 config/manager/deployment.yaml
  17. +1 −1 config/manager/kustomization.yaml
  18. +23 −0 config/testdata/managed-fields/podinfo.yaml
  19. +135 −0 controllers/kustomization_acl_test.go
  20. +87 −19 controllers/kustomization_controller.go
  21. +21 −5 controllers/kustomization_decryptor.go
  22. +39 −6 controllers/kustomization_decryptor_test.go
  23. +56 −59 controllers/kustomization_impersonation.go
  24. +210 −0 controllers/kustomization_impersonation_test.go
  25. +142 −0 controllers/kustomization_validation_test.go
  26. +81 −17 controllers/suite_test.go
  27. +29 −0 controllers/testdata/invalid/overlay/deployment.yaml
  28. +6 −0 controllers/testdata/invalid/overlay/kustomization.yaml
  29. +29 −0 controllers/testdata/invalid/plain/deployment.yaml
  30. +8 −0 controllers/testdata/sops/secret.vault.yaml
  31. +91 −6 docs/spec/v1beta2/kustomization.md
  32. +57 −29 go.mod
  33. +145 −34 go.sum
  34. +245 −0 internal/sops/hcvault/keysource.go
  35. +32 −1 internal/sops/keyservice/server.go
  36. +7 −0 main.go
  37. +6 −0 tests/fuzz/Dockerfile.builder
  38. +45 −0 tests/fuzz/README.md
  39. +47 −0 tests/fuzz/age_fuzzer.go
  40. +441 −0 tests/fuzz/controllers_fuzzer.go
  41. +5 −0 tests/fuzz/go.mod
  42. +61 −0 tests/fuzz/oss_fuzz_build.sh
  43. +20 −0 tests/fuzz/oss_fuzz_run.sh
  44. +39 −0 tests/fuzz/pgp_fuzzer.go
24 changes: 24 additions & 0 deletions .github/workflows/cifuzz.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: CIFuzz
on:
pull_request:
branches:
- main

permissions:
contents: read # for actions/checkout to fetch code

jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Restore Go cache
uses: actions/cache@v1
with:
path: /home/runner/work/_temp/_github_home/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Smoke test Fuzzers
run: make fuzz-smoketest
28 changes: 26 additions & 2 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
@@ -6,6 +6,9 @@ on:
branches:
- main

permissions:
contents: read # for actions/checkout to fetch code

jobs:
kind:
runs-on: ubuntu-latest
@@ -19,8 +22,6 @@ jobs:
- name: Setup Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
with:
buildkitd-flags: "--debug"
- name: Restore Go cache
uses: actions/cache@v1
with:
@@ -51,6 +52,8 @@ jobs:
uses: fluxcd/pkg/actions/kubectl@main
with:
version: 1.21.2
- name: Setup SOPS
uses: fluxcd/pkg/actions/sops@main
- name: Run controller tests
run: make test
- name: Check if working tree is dirty
@@ -92,6 +95,27 @@ jobs:
make dev-deploy IMG=test/kustomize-controller:latest
kubectl -n kustomize-system rollout status deploy/source-controller --timeout=1m
kubectl -n kustomize-system rollout status deploy/kustomize-controller --timeout=1m
- name: Run tests for removing kubectl managed fields
run: |
kubectl create ns managed-fields
kustomize build github.com/stefanprodan/podinfo//kustomize?ref=6.0.0 > /tmp/podinfo.yaml
kubectl -n managed-fields apply -f /tmp/podinfo.yaml
kubectl -n managed-fields apply -f ./config/testdata/managed-fields
kubectl -n managed-fields wait kustomization/podinfo --for=condition=ready --timeout=4m
OUTDATA=$(kubectl -n managed-fields get deploy podinfo --show-managed-fields -oyaml)
if echo "$OUTDATA" | grep -q "kubectl";then
echo "kubectl client-side manager not removed"
exit 1
fi
kubectl -n managed-fields apply --server-side --force-conflicts -f /tmp/podinfo.yaml
kubectl -n managed-fields annotate --overwrite kustomization/podinfo reconcile.fluxcd.io/requestedAt="$(date +%s)"
kubectl -n managed-fields wait kustomization/podinfo --for=condition=ready --timeout=4m
OUTDATA=$(kubectl -n managed-fields get deploy podinfo --show-managed-fields -oyaml)
if echo "$OUTDATA" | grep -q "kubectl";then
echo "kubectl server-side manager not removed"
exit 1
fi
kubectl delete ns managed-fields
- name: Run overlays tests
run: |
kubectl -n kustomize-system apply -k ./config/testdata/overlays
3 changes: 3 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -7,6 +7,9 @@ on:
env:
REPOSITORY: ${{ github.repository }}

permissions:
contents: read # for actions/checkout to fetch code

jobs:
build:
runs-on: ubuntu-latest
5 changes: 5 additions & 0 deletions .github/workflows/rebase.yml
Original file line number Diff line number Diff line change
@@ -6,6 +6,11 @@ on:
issue_comment:
types: [created]

permissions:
contents: read # for actions/checkout to fetch code
pull-requests: read
repository-projects: write

jobs:
rebase:
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && (github.event.comment.author_association == 'CONTRIBUTOR' || github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER')
57 changes: 33 additions & 24 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -10,6 +10,11 @@ on:
default: 'rc'
required: true

permissions:
contents: write # needed to write releases
id-token: write # needed for keyless signing
packages: write # needed for ghcr access

env:
CONTROLLER: ${{ github.event.repository.name }}

@@ -31,13 +36,9 @@ jobs:
echo ::set-output name=VERSION::${VERSION}
- name: Setup QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: all
- name: Setup Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
with:
buildkitd-flags: "--debug"
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
@@ -49,43 +50,51 @@ jobs:
with:
username: fluxcdbot
password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }}
- name: Publish multi-arch container image
- name: Generate images meta
id: meta
uses: docker/metadata-action@v3
with:
images: |
fluxcd/${{ env.CONTROLLER }}
ghcr.io/fluxcd/${{ env.CONTROLLER }}
tags: |
type=raw,value=${{ steps.prep.outputs.VERSION }}
- name: Publish images
uses: docker/build-push-action@v2
with:
push: true
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v7,linux/arm64
tags: |
ghcr.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
docker.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
labels: |
org.opencontainers.image.title=${{ github.event.repository.name }}
org.opencontainers.image.description=${{ github.event.repository.description }}
org.opencontainers.image.url=${{ github.event.repository.html_url }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }}
org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Check images
run: |
docker buildx imagetools inspect docker.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
docker buildx imagetools inspect ghcr.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
docker pull docker.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
docker pull ghcr.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
- name: Generate release manifests
- uses: sigstore/cosign-installer@main
- name: Sign images
env:
COSIGN_EXPERIMENTAL: 1
run: |
cosign sign fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
cosign sign ghcr.io/fluxcd/${{ env.CONTROLLER }}:${{ steps.prep.outputs.VERSION }}
- name: Generate release artifacts
if: startsWith(github.ref, 'refs/tags/v')
run: |
mkdir -p config/release
kustomize build ./config/crd > ./config/release/${{ env.CONTROLLER }}.crds.yaml
kustomize build ./config/manager > ./config/release/${{ env.CONTROLLER }}.deployment.yaml
- name: Create release
echo '[CHANGELOG](https://github.com/fluxcd/${{ env.CONTROLLER }}/blob/main/CHANGELOG.md)' > ./config/release/notes.md
- uses: anchore/sbom-action/download-syft@v0
- name: Create release and SBOM
if: startsWith(github.ref, 'refs/tags/v')
uses: ncipollo/release-action@v1
uses: goreleaser/goreleaser-action@v2
with:
prerelease: true
artifacts: "config/release/*.yaml"
artifactContentType: "text/plain"
body: |
[CHANGELOG](https://github.com/fluxcd/${{ env.CONTROLLER }}/blob/main/CHANGELOG.md)
token: ${{ secrets.GITHUB_TOKEN }}
version: latest
args: release --release-notes=config/release/notes.md --rm-dist --skip-validate
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4 changes: 4 additions & 0 deletions .github/workflows/scan.yml
Original file line number Diff line number Diff line change
@@ -8,6 +8,10 @@ on:
schedule:
- cron: '18 10 * * 3'

permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for codeQL to write security events

jobs:
fossa:
name: FOSSA
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -13,8 +13,9 @@

# Dependency directories (remove the comment below to include it)
# vendor/
testbin/
bin/
config/release/
config/crd/bases/gitrepositories.yaml
config/crd/bases/buckets.yaml

build/
39 changes: 39 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
project_name: kustomize-controller

builds:
- skip: true

release:
prerelease: "true"
extra_files:
- glob: config/release/*.yaml

checksum:
extra_files:
- glob: config/release/*.yaml

source:
enabled: true
name_template: "{{ .ProjectName }}_{{ .Version }}_source_code"

sboms:
- id: source
artifacts: source
documents:
- "{{ .ProjectName }}_{{ .Version }}_sbom.spdx.json"

# signs the checksum file
# all files (including the sboms) are included in the checksum
# https://goreleaser.com/customization/sign
signs:
- cmd: cosign
env:
- COSIGN_EXPERIMENTAL=1
certificate: "${artifact}.pem"
args:
- sign-blob
- "--output-certificate=${certificate}"
- "--output-signature=${signature}"
- "${artifact}"
artifacts: checksum
output: true
63 changes: 63 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -2,6 +2,69 @@

All notable changes to this project are documented in this file.

## 0.20.0

**Release date:** 2022-02-01

This prerelease comes with security improvements for multi-tenant clusters:
- Platform admins can enforce impersonation across the cluster using the `--default-service-account` flag.
When the flag is set, all `Kustomizations`, which don't have `spec.serviceAccountName` specified,
use the service account name provided by `--default-service-account=<SA Name>` in the namespace of the object.
- Platform admins can disable cross-namespace references with the `--no-cross-namespace-refs=true` flag.
When this flag is set, `Kustomizations` can only refer to sources (`GitRepositories` and `Buckets`)
in the same namespace as the `Kustomization` object, preventing tenants from accessing another tenant's repositories.

The controller container images are signed with
[Cosign and GitHub OIDC](https://github.com/sigstore/cosign/blob/22007e56aee419ae361c9f021869a30e9ae7be03/KEYLESS.md),
and a Software Bill of Materials in [SPDX format](https://spdx.dev) has been published on the release page.

Starting with this version, the controller deployment conforms to the
Kubernetes [restricted pod security standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted):
- all Linux capabilities were dropped
- the root filesystem was set to read-only
- the seccomp profile was set to the runtime default
- run as non-root was enabled
- the user and group ID was set to 65534

**Breaking changes**:
- The use of new seccomp API requires Kubernetes 1.19.
- The controller container is now executed under 65534:65534 (userid:groupid).
This change may break deployments that hard-coded the user ID of 'controller' in their PodSecurityPolicy.
- When both `spec.kubeConfig` and `spec.ServiceAccountName` are specified, the controller will impersonate
the service account on the target cluster, previously the controller ignored the service account.

Features:
- Allow setting a default service account for impersonation
[#550](https://github.com/fluxcd/kustomize-controller/pull/550)
- Allow disabling cross-namespace references
[#549](https://github.com/fluxcd/kustomize-controller/pull/549)
- SOPS: Add support for HashiCorp Vault token-based authentication
[#538](https://github.com/fluxcd/kustomize-controller/pull/538)

Improvements:
- Publish SBOM and sign release artifacts
[#541](https://github.com/fluxcd/kustomize-controller/pull/541)
- Drop capabilities, enable seccomp and enforce runAsNonRoot
[#539](https://github.com/fluxcd/kustomize-controller/pull/539)
- docs: Add var substitution operator escape syntax
[#537](https://github.com/fluxcd/kustomize-controller/pull/537)
- Update development documentation
[#540](https://github.com/fluxcd/kustomize-controller/pull/540)
- Refactor Fuzz implementation
[#536](https://github.com/fluxcd/kustomize-controller/pull/536)

Fixes:
* Revoke kubectl managed fields ownership
[#527](https://github.com/fluxcd/kustomize-controller/pull/527)
* Ensure object are finalized under impersonation
[#552](https://github.com/fluxcd/kustomize-controller/pull/552)
* Use patch instead of update when adding finalizers
[#535](https://github.com/fluxcd/kustomize-controller/pull/535)
* Fix preflight validation
[#544](https://github.com/fluxcd/kustomize-controller/pull/544)
* Fix the missing protocol for the first port in manager config
[#547](https://github.com/fluxcd/kustomize-controller/pull/547)

## 0.19.1

**Release date:** 2022-01-13
Loading