<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Flux – Blog</title><link>https://fluxcd.io/blog/</link><description>Recent content in Blog on Flux</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://fluxcd.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Stairway to GitOps: Scaling Flux at Morgan Stanley</title><link>https://fluxcd.io/blog/2026/03/stairway-to-gitops-morgan-stanley/</link><pubDate>Sun, 15 Mar 2026 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2026/03/stairway-to-gitops-morgan-stanley/</guid><description>
&lt;img src="https://fluxcd.io/blog/2026/03/stairway-to-gitops-morgan-stanley/featured-image_hu58eaf01012de3c16f8b6669226f97dbb_231142_640x0_resize_box_3.png" width="640" height="336"/>
&lt;p>One of the things we love most about this community is hearing how you take Flux and run with it - truly solving problems for teams at scale. At our inaugural FluxCon NA, &lt;strong>Tiffany Wang&lt;/strong> and &lt;strong>Simon Bourassa&lt;/strong> from &lt;strong>Morgan Stanley&lt;/strong> gave us a glimpse of their Flux environment.&lt;/p>
&lt;p>Their talk, &lt;strong>&amp;ldquo;Stairway to GitOps,&amp;rdquo;&lt;/strong> walked us through a five-year journey from push-based pipelines to a self-service GitOps platform managing over 500 clusters. Hearing the core principles of Flux - &lt;strong>Lean, Performant, Extensible, and Secure&lt;/strong> - validated by end-users at this scale matters a lot to us as maintainers. We think their lessons are worth sharing with all of you.&lt;/p>
&lt;p>&lt;img src="https://fluxcd.io/img/fluxcon-na-25/maintainers-5.png" alt="Flux maintainers together at FluxCon NA 2025">
&lt;em>Matheus Pimenta cracking a joke with the Flux team together at FluxCon NA 2025 - (Moments with all of these people in-person are rare!)&lt;/em>&lt;/p>
&lt;h2 id="the-early-days-pushing-limits">The Early Days: Pushing Limits&lt;/h2>
&lt;p>Like many teams, Morgan Stanley started with traditional push-based CI/CD pipelines. App teams used tools like Helm to push manifests directly to clusters. While functional for initial deployments, challenges emerged as they scaled. Familiar pain points crept in:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Configuration Drift:&lt;/strong> Without an agent continuously reconciling state, clusters drifted from the source of truth in Git. Manual changes and failed deployments left systems in an unknown state.&lt;/li>
&lt;li>&lt;strong>Fragile Recovery:&lt;/strong> Cluster rebuilds required heavy coordination. The platform team could restore infrastructure, but application teams had to manually redeploy their workloads. (Not a great place to be at 2 AM in another team&amp;rsquo;s timezone)&lt;/li>
&lt;/ul>
&lt;p>At &amp;ldquo;Step 0&amp;rdquo; of their Stairway to GitOps, they realized they needed to decouple delivery from the pipeline and embrace continuous reconciliation.&lt;/p>
&lt;h2 id="step-1-security-and-self-service">Step 1: Security and Self-Service&lt;/h2>
&lt;p>In a highly regulated financial environment, security isn&amp;rsquo;t optional. The team chose Flux to fit their strict multi-tenancy model.&lt;/p>
&lt;p>Morgan Stanley leveraged &lt;strong>Flux&amp;rsquo;s service account impersonation&lt;/strong> and native Kubernetes RBAC to enforce least-privilege access. Controllers reconciling manifests for one team had zero visibility into another team&amp;rsquo;s resources. Granular, secure multi-tenancy is a first priority part of Flux&amp;rsquo;s design, so this is the golden path, but implementing it always involves deciding what teams get what permissions, and they put in that work.&lt;/p>
&lt;p>To streamline adoption, they built a &lt;strong>self-service onboarding platform&lt;/strong>. Instead of requiring developers to manage low-level Kubernetes details, they created tooling that:&lt;/p>
&lt;ol>
&lt;li>Automated entitlement checks and change control processes.&lt;/li>
&lt;li>Registered services in their CMDB.&lt;/li>
&lt;li>&amp;ldquo;Primed&amp;rdquo; the target namespace with the necessary Flux &lt;code>GitRepository&lt;/code> and &lt;code>Kustomization&lt;/code> resources.&lt;/li>
&lt;li>Scaffolded a ready-to-use application repository.&lt;/li>
&lt;/ol>
&lt;p>This approach demonstrates Flux&amp;rsquo;s extensibility. Flux can serve as the glue between systems. Developers interact with their normal tooling, while company specific systems like CMDB&amp;rsquo;s (which likely predate Kubernetes adoption at all) integrate smoothly into the GitOps flow.&lt;/p>
&lt;h2 id="step-2-operating-at-scale">Step 2: Operating at Scale&lt;/h2>
&lt;p>As adoption grew, so did the deployment footprint. Tiffany shared some numbers from their environment:&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>&amp;ldquo;And now we have over 500 clusters, over 2,000 nodes, over 100,000 containers, and tens of thousands of Flux resources.&amp;rdquo;&lt;/em> (13:34)&lt;/p>
&lt;/blockquote>
&lt;p>Operating at this magnitude brings challenges around performance. The team shared how they tuned Flux to handle this load without overwhelming the Kubernetes control plane.&lt;/p>
&lt;h3 id="tuning-for-performance">Tuning for Performance&lt;/h3>
&lt;p>With tens of thousands of resources reconciling, the team started some performance tuning. Their focus areas:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Reconciliation Intervals:&lt;/strong> They increased their platform defaults, tuning intervals to balance responsiveness with load.&lt;/li>
&lt;li>&lt;strong>Controller Concurrency:&lt;/strong> By adjusting the &lt;code>--concurrent&lt;/code> flags on Flux controllers, they increased how many reconciliations could happen in parallel.&lt;/li>
&lt;li>&lt;strong>Resource Management:&lt;/strong> They monitored and adjusted resource limits for Flux components to ensure reliability under sustained load.&lt;/li>
&lt;/ul>
&lt;p>We put a lot of thought into making these knobs available. Flux should run well on a Raspberry Pi and on a fleet of 500 clusters alike. The platform team taking ownership of Flux&amp;rsquo;s runtime in this manner shows operational excellence.&lt;/p>
&lt;h3 id="moving-from-git-to-s3">Moving from Git to S3&lt;/h3>
&lt;p>The team also moved from a self-hosted Git provider to &lt;strong>S3 buckets&lt;/strong> as the source of truth for their clusters. Driven by high availability and compliance requirements, they built a mechanism to push artifacts from CI to S3. Because Flux&amp;rsquo;s &lt;code>Source Controller&lt;/code> supports various sources - Git, Helm repositories, OCI Repositories, and S3-compatible buckets - this transition was possible. The &lt;strong>GitOps Toolkit&lt;/strong> architecture makes this kind of swap straightforward. You change the source layer but keep the delivery pipeline.&lt;/p>
&lt;h2 id="step-3-observability-and-feedback-loops">Step 3: Observability and Feedback Loops&lt;/h2>
&lt;p>Managing 500 clusters requires effective observability. The team built a centralized Grafana dashboard providing a unified view of their fleet.&lt;/p>
&lt;p>They extended the open-source Flux dashboards with custom metrics from &lt;code>kube-state-metrics&lt;/code>, tailored to their developers&amp;rsquo; needs. At a glance, they could see which reconciliations were failing and why.&lt;/p>
&lt;p>They also closed the developer experience loop by integrating Flux&amp;rsquo;s &lt;strong>Notification Controller&lt;/strong> - sending success and failure notifications directly to the pipelines and tools developers were already using.&lt;/p>
&lt;h2 id="looking-ahead">Looking Ahead&lt;/h2>
&lt;p>The team also shared what&amp;rsquo;s next on their roadmap:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Flux Sharding:&lt;/strong> Exploring sharding Flux controllers to distribute load across multiple instances within a cluster.&lt;/li>
&lt;li>&lt;strong>OCI Artifacts:&lt;/strong> Considering OCI artifacts as the primary source of truth, aligning with the &amp;ldquo;Git-less GitOps&amp;rdquo; model for improved performance and security.&lt;/li>
&lt;li>&lt;strong>Progressive Delivery:&lt;/strong> Planning to adopt &lt;strong>Flagger&lt;/strong> for canary and blue-green deployments, helping de-risk releases.&lt;/li>
&lt;/ul>
&lt;p>It&amp;rsquo;s cool to see a team that&amp;rsquo;s been running Flux for five years still finding new ways to push it further. This is a sophisticated environment, and these improvements could win some performance and improve their developer experience further.&lt;/p>
&lt;h2 id="watch-the-full-talk">Watch the Full Talk&lt;/h2>
&lt;p>For the full story, including the architectural decisions and lessons learned, watch the recording:&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/3bLonriwi6g" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Thank you to Tiffany, Simon, and the team at Morgan Stanley for sharing their journey so openly. Stories like theirs remind us why we build Flux - what we build for the Raspberry Pi&amp;rsquo;s in our closets at home is the same software that is so widely deployed all around us at enterprise scale. We can&amp;rsquo;t help but wonder what wild stories we&amp;rsquo;ll hear from you all next week at FluxCon and KubeCon!&lt;/p>
&lt;h2 id="join-us-at-fluxcon-europe-2026">Join Us at FluxCon Europe 2026&lt;/h2>
&lt;p>Inspired by Morgan Stanley&amp;rsquo;s infra? Come connect with the community and learn from teams running Flux in production. &lt;strong>
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/co-located-events/fluxcon/" target="_blank">FluxCon Europe&lt;/a>&lt;/strong> is happening on &lt;strong>March 23, 2026&lt;/strong> at &lt;strong>RAI Amsterdam&lt;/strong>, co-located with KubeCon. Speakers from KLM, NatWest Group, Orange, and more will be sharing their Flux stories.&lt;/p>
&lt;p>We&amp;rsquo;d love to see you there &amp;ndash; come say hi! 🙂
We&amp;rsquo;ll also be in the Project Pavilion all week. Catch up with us at
&lt;a href="https://fluxcd.io/kubecon" target="_blank">fluxcd.io/kubecon&lt;/a> 👋&lt;/p></description></item><item><title>Blog: Announcing Flux 2.8 GA</title><link>https://fluxcd.io/blog/2026/02/flux-v2.8.0/</link><pubDate>Tue, 24 Feb 2026 11:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2026/02/flux-v2.8.0/</guid><description>
&lt;img src="https://fluxcd.io/blog/2026/02/flux-v2.8.0/featured-image_hu2678bc1273f30d966760c2cfdf3890dd_250090_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.8.0" target="_blank">Flux v2.8.0&lt;/a>!
In this post, we highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.8 comes with Helm v4 support, bringing server-side apply and enhanced health checking to Helm releases.
Big thanks to the Helm maintainers for their work on Helm v4 and for collaborating with us to ensure a smooth integration with Flux!&lt;/p>
&lt;p>In this release, we have also introduced several new features to the Flux controllers:&lt;/p>
&lt;ul>
&lt;li>Reduced the mean time to recovery of Flux-managed applications&lt;/li>
&lt;li>Readiness evaluation of Helm-managed objects with CEL expressions&lt;/li>
&lt;li>ArtifactGenerator support for extracting and modifying Helm charts&lt;/li>
&lt;li>Support for commenting on Pull Requests directly from Flux notifications&lt;/li>
&lt;li>Custom SSA apply stages for ordering resource application in kustomize-controller&lt;/li>
&lt;li>Automatic GitHub App installation ID lookup from the repository owner&lt;/li>
&lt;li>Support for Cosign v3 for verifying OCI artifacts and container images&lt;/li>
&lt;/ul>
&lt;p>In ecosystem news, there is a new release of
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
that comes with a dedicated
&lt;a href="https://fluxoperator.dev/web-ui/" target="_blank">Flux Web UI&lt;/a> and new providers for preview environments.&lt;/p>
&lt;h2 id="helm-v4-support">Helm v4 Support&lt;/h2>
&lt;p>Flux now ships with Helm v4. This brings two major improvements to how Flux manages Helm releases:
server-side apply and kstatus-based health checking.&lt;/p>
&lt;p>With server-side apply, the API server takes ownership of merging fields, rather than the client.
This means fewer conflicts when multiple controllers or tools manage overlapping resources, and
more accurate drift detection out of the box.&lt;/p>
&lt;p>Health checking now defaults to
&lt;a href="https://github.com/fluxcd/cli-utils/tree/master/pkg/kstatus" target="_blank">kstatus&lt;/a>,
the same library used by the kustomize-controller. Instead of relying on Helm&amp;rsquo;s legacy readiness
logic, Flux can now understand the actual rollout status of Deployments, StatefulSets, Jobs, and
other resources — including custom resources that follow standard status conventions. For teams
that rely on custom readiness logic, Flux now supports
&lt;a href="https://fluxcd.io/flux/cheatsheets/cel-healthchecks/" target="_blank">CEL-based health check expressions&lt;/a> on
HelmReleases, giving you the same flexibility already available in the Kustomization API.&lt;/p>
&lt;p>Both server-side apply and kstatus health checking are the new defaults. Because Helm persists
the apply method in its release storage, existing HelmReleases will continue to use client-side
apply until explicitly opted in. Health checking, on the other hand, will switch to kstatus for
all HelmReleases. For teams that prefer Helm v3&amp;rsquo;s behavior across the board, the &lt;code>UseHelm3Defaults&lt;/code>
feature gate restores the previous defaults.&lt;/p>
&lt;p>Finally, HelmReleases now track an inventory of managed resources in &lt;code>.status.inventory&lt;/code>,
giving you full visibility into what Flux has deployed — useful for debugging, auditing, and
building tooling on top of Flux.&lt;/p>
&lt;h2 id="faster-recovery-from-failed-deployments">Faster recovery from failed deployments&lt;/h2>
&lt;p>A common pain point with GitOps is the wait time after pushing a fix for a broken deployment. When a
release fails health checks, Flux would previously wait for the full timeout before acting — even if
a new revision was already available. This delay directly impacts the mean time to recovery (MTTR).&lt;/p>
&lt;p>In Flux 2.7, the kustomize-controller introduced the &lt;code>CancelHealthCheckOnNewRevision&lt;/code> feature gate,
allowing ongoing health checks to be canceled when a new source revision is detected. With Flux 2.8,
this capability has been extended to helm-controller and expanded to react to more kinds of changes:&lt;/p>
&lt;ul>
&lt;li>Changes in the resource spec (e.g. path, patches, images, values)&lt;/li>
&lt;li>Changes in referenced ConfigMaps and Secrets (var substitutions, SOPS decryption keys, Kubeconfig)&lt;/li>
&lt;li>Reconciliations triggered manually with &lt;code>flux reconcile&lt;/code> or via notification-controller receivers&lt;/li>
&lt;/ul>
&lt;p>In all these cases, Flux cancels the ongoing health checks and immediately starts reconciling the
new state. Instead of waiting several minutes for a failing release to time out, the fix is picked
up as soon as it lands.&lt;/p>
&lt;p>For observability, a new &lt;code>HealthCheckCanceled&lt;/code> reason is added to the &lt;code>Ready&lt;/code> condition when this
happens.&lt;/p>
&lt;p>This feature gate is opt-in for now, and we plan to enable it by default once the implementation is
stable across both controllers.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
When enabling &lt;code>CancelHealthCheckOnNewRevision&lt;/code> for helm-controller, enabling
&lt;code>DefaultToRetryOnFailure&lt;/code> together is recommended. HelmReleases are more prone to get
stuck after the cancellation when using the default retry configuration (no retries).
&lt;/div>
&lt;h2 id="ecosystem-news">Ecosystem News&lt;/h2>
&lt;h3 id="flux-operator-web-ui">Flux Operator Web UI&lt;/h3>
&lt;p>At KubeCon Atlanta 2025, the Flux maintainers from ControlPlane
gave a sneak peek of the new Flux Web UI, which is now available
in the latest release of Flux Operator.&lt;/p>
&lt;p>The Flux Web UI provides a modern and user-friendly interface for managing and
monitoring your Flux-managed clusters. It offers a comprehensive view of your GitOps resources,
including:&lt;/p>
&lt;ul>
&lt;li>Cluster dashboard with sync statistics and overall system health&lt;/li>
&lt;li>Deep-dive views for ResourceSets, HelmReleases and Kustomizations&lt;/li>
&lt;li>Workload monitoring from deployment rollouts to pod statuses&lt;/li>
&lt;li>Powerful search and filtering&lt;/li>
&lt;li>Favorites for quick access to critical resources&lt;/li>
&lt;li>SSO support via OIDC &amp;amp; Kubernetes RBAC for multi-tenant clusters&lt;/li>
&lt;li>GitOps Graphs for visualizing the delivery pipeline&lt;/li>
&lt;li>GitOps Actions guarded by RBAC for manual interventions and incident response&lt;/li>
&lt;/ul>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-4857f48b2006deaad0ac3a72e5512a43-1-wrapper" class="gallery-wrapper">
&lt;div id="gallery-4857f48b2006deaad0ac3a72e5512a43-1" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-home-light.png"
class="galleryImg"
>
&lt;img
width="900" height="877"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAB8AIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APW&amp;#43;kn7pVLjJPqKkRpjneCPpSAB5cA9OWGzr&amp;#43;NSqrKevHoBigVhuW9W/KmHzQ6hVGzuTwR&amp;#43;GKkAkDElsjsPSkKyb87/l/u4FAWIWQNPjLZ91OPzqQRMOjgfTP&amp;#43;NGFDl97fL1GTj8qcZVAByOenFMYgSRTkOv45P9akydvOM47Uc&amp;#43;gprOAQpwCaQH/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-home-light_hu4c4acea523c7ba7b4a015b7965b4ef32_243513_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-helmrelease-light.png"
class="galleryImg"
>
&lt;img
width="848" height="900"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIACAAHgMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APWgQkoKhR13MBzU25v7x/KmhwkhyW5PrnFTAY75&amp;#43;tBNiMkkYJJ/CmAy7zwMdj3/AJVIrTFuYlUf73/1qcc45AH0NA7EWCJc7W5PXJx&amp;#43;VTgcc4P4VFyCcD8&amp;#43;f607f6pn8v8AGmMI3D54xinMOKbv/wBg/p/jRnI&amp;#43;7igD/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-helmrelease-light_hubf5be3182a1eef0de03b8438fda180ee_346759_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-graph-light.png"
class="galleryImg"
>
&lt;img
width="772" height="900"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIACAAGwMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APWlWUTExiPH8RGN1Tfvff8ASnCIBtwZue2eKTfhymzOO&amp;#43;RzVXFYawlxwMntnFC&amp;#43;aFAbAPtUw6dKY3WlcAaVYyqt1bpTfK3SlyFI&amp;#43;nP50jp5jowYjZ&amp;#43;tSrwKBjI5lccdqc33qasaou0dPwpT1oA//9k="
class="lazy"
data-src="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-graph-light_hua01f7e6fdbc23ed62096da6831993316_214175_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-favorites-light.png"
class="galleryImg"
>
&lt;img
width="900" height="664"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APV/tEUUr7lcMCeUhY/rtp/9oQ/9Nv8Avw/&amp;#43;FKmDKQGLH&amp;#43;7uOBRMVWQAsVGOgJ5pak&amp;#43;8MbU4FOD5/wCFvIf/AGWnwXUdxnyg/wAuM74mT8sipJs&amp;#43;WP4OeoNOUfKTtI&amp;#43;pP9aa8yuhEhbzMEbVx1BNLIW8wFBkdz6U7vRQISX7nyZY&amp;#43;jZpUJ2/Ox3egJxRQOooGj//2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2026/02/flux-v2.8.0/images/flux-status-favorites-light_hu72b723d01daa46eb070b3e9a3bc66651_242080_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-4857f48b2006deaad0ac3a72e5512a43-1");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;p>Get started by installing the latest version of Flux Operator and following the
&lt;a href="https://fluxoperator.dev/web-ui/" target="_blank">Flux Web UI documentation&lt;/a>.&lt;/p>
&lt;h3 id="preview-environments">Preview environments&lt;/h3>
&lt;p>Flux Operator&amp;rsquo;s
&lt;a href="https://fluxoperator.dev/docs/crd/resourceset/" target="_blank">ResourceSet API&lt;/a> makes it easy to
deploy ephemeral preview environments from GitHub Pull Requests and GitLab Merge Requests. With
Flux 2.8, closing the feedback loop on these environments is now much simpler thanks to new
notification-controller provider types: &lt;code>githubpullrequestcomment&lt;/code>, &lt;code>gitlabmergerequestcomment&lt;/code>
and &lt;code>giteapullrequestcomment&lt;/code>.&lt;/p>
&lt;p>Previously, posting deployment status on a Pull Request required setting up a &lt;code>githubdispatch&lt;/code>
provider and a GitHub Actions workflow to parse the event payload and post a comment. With the new
providers, notification-controller posts and updates comments directly on the PR or MR page — no
CI workflow needed. Comments are automatically deduplicated, so the PR stays clean with a single
status comment that gets updated on each deployment.&lt;/p>
&lt;p>In addition, commit status reporting now works with any Flux API — not just Kustomizations and
GitRepositories. This means HelmReleases deployed for preview environments can now report their
status as commit checks on the PR, giving developers immediate visibility into whether their
changes deployed successfully.&lt;/p>
&lt;p>To annotate your Flux resources for these providers, use the standard event metadata keys:&lt;/p>
&lt;ul>
&lt;li>&lt;code>event.toolkit.fluxcd.io/change_request&lt;/code> — identifies the PR/MR number for comment providers&lt;/li>
&lt;li>&lt;code>event.toolkit.fluxcd.io/commit&lt;/code> — identifies the commit SHA for commit status providers&lt;/li>
&lt;/ul>
&lt;p>For complete setup guides, see the Flux Operator documentation:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxoperator.dev/docs/resourcesets/github-pull-requests/" target="_blank">Ephemeral Environments for GitHub Pull Requests&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxoperator.dev/docs/resourcesets/gitlab-merge-requests/" target="_blank">Ephemeral Environments for GitLab Merge Requests&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.5 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.8 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.33, 1.34, 1.35&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.20&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Enterprise support&lt;/strong> Note that the CNCF Flux project offers support only for the latest three minor versions of Kubernetes.
Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide enterprise support for Flux.&lt;/p>
&lt;/blockquote>
&lt;h2 id="upgrade-procedure">Upgrade Procedure&lt;/h2>
&lt;p>Note that in Flux v2.8, the following APIs have reached end-of-life and have been removed from the CRDs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>source.toolkit.fluxcd.io/v1beta2&lt;/code>&lt;/li>
&lt;li>&lt;code>kustomize.toolkit.fluxcd.io/v1beta2&lt;/code>&lt;/li>
&lt;li>&lt;code>helm.toolkit.fluxcd.io/v2beta2&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Before upgrading to Flux v2.8, make sure to migrate all your resources to the stable APIs
using the
&lt;a href="https://fluxcd.io/flux/cmd/flux_migrate/">flux migrate&lt;/a> command.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Upgrade Procedure for Flux v2.8&lt;/h4>
We have published a dedicated step-by-step upgrade guide, please follow the instructions from
&lt;a href="https://github.com/fluxcd/flux2/discussions/5572" target="_blank">Upgrade Procedure for Flux v2.7+&lt;/a>.
&lt;/div>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Announcing Flux 2.7 GA</title><link>https://fluxcd.io/blog/2025/09/flux-v2.7.0/</link><pubDate>Tue, 30 Sep 2025 06:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/09/flux-v2.7.0/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/09/flux-v2.7.0/featured-image_hu0a3d34a1286ca95e0c20a1ae8ebfb057_608626_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.7.0" target="_blank">Flux v2.7.0&lt;/a>!
In this post, we highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.7 marks the General Availability (GA) of the image update automation features
and comes with new APIs &lt;code>ExternalArtifact&lt;/code> and &lt;code>ArtifactGenerator&lt;/code>
for advanced source
&lt;a href="#artifact-generators">composition and decomposition&lt;/a> patterns.&lt;/p>
&lt;p>In this release, we have also introduced several new features to the Flux controllers,
including watching for changes in ConfigMaps and Secrets references,
extended readiness evaluation of dependencies with CEL expressions,
and support for OpenTelemetry tracing for Flux &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> reconciliation.&lt;/p>
&lt;p>In ecosystem news, there is a new release of
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
that comes with
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/image-automation/" target="_blank">in-cluster image update automation&lt;/a>
features, that can be used for GitLess GitOps workflows.&lt;/p>
&lt;h2 id="general-availability-of-image-update-automation">General availability of Image Update Automation&lt;/h2>
&lt;p>This release marks the General Availability (GA) of Flux
&lt;a href="https://fluxcd.io/flux/components/image/">Image Automation&lt;/a>
APIs and controllers. The image-reflector-controller and image-automation-controller work together to
update Kubernetes manifests in Git repositories when new container images are available in
container registries.&lt;/p>
&lt;p>The following APIs have been promoted to stable v1:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/image/imagerepositories/">ImageRepository&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/image/imagepolicies/">ImagePolicy&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/image/imageupdateautomations/">ImageUpdateAutomation&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>ImagePolicy&lt;/code> API now supports the &lt;code>.spec.suspend&lt;/code> field to pause and resume the policy evaluation.&lt;/p>
&lt;p>The &lt;code>ImageUpdateAutomation&lt;/code> API gains support for Git sparse checkout. To enable this optimization,
the image-automation-controller can be configured with the &lt;code>--feature-gates=GitSparseCheckout=true&lt;/code> flag.&lt;/p>
&lt;p>In addition, the image-automation-controller can now be configured to use Kubernetes Workload Identity
for authenticating with AzureDevOps repositories.&lt;/p>
&lt;p>&lt;strong>Breaking changes&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>The image-reflector-controller &lt;code>autologin&lt;/code> flags which were deprecated since 2023 are now removed.
Users should set &lt;code>ImageRepository.spec.provider&lt;/code> to the appropriate cloud provider for their container registry.&lt;/li>
&lt;li>The &lt;code>ImageUpdateAutomation&lt;/code> commit template fields &lt;code>.Updated&lt;/code> and &lt;code>.Changed.ImageResult&lt;/code> which were deprecated since 2024 are now removed.
Users should migrate to:
&lt;ul>
&lt;li>&lt;code>.Changed.FileChanges&lt;/code> for detailed change tracking&lt;/li>
&lt;li>&lt;code>.Changed.Objects&lt;/code> for object-level changes&lt;/li>
&lt;li>&lt;code>.Changed.Changes&lt;/code> for a flat list of changes&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="watching-for-changes-in-configmaps-and-secrets">Watching for changes in ConfigMaps and Secrets&lt;/h2>
&lt;p>Starting with Flux v2.7, the &lt;code>kustomize-controller&lt;/code>, &lt;code>helm-controller&lt;/code> and &lt;code>notification-controller&lt;/code>
gain support for reacting to changes in ConfigMaps and Secrets references.&lt;/p>
&lt;p>The following references are now watched for changes:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Kustomization.spec.postBuild.substituteFrom&lt;/code>&lt;/li>
&lt;li>&lt;code>Kustomization.spec.decryption.secretRef&lt;/code>&lt;/li>
&lt;li>&lt;code>Kustomization.spec.kubeConfig.secretRef&lt;/code>&lt;/li>
&lt;li>&lt;code>Kustomization.spec.kubeConfig.configMapRef&lt;/code>&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.valuesFrom&lt;/code>&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.kubeConfig.secretRef&lt;/code>&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.kubeConfig.configMapRef&lt;/code>&lt;/li>
&lt;li>&lt;code>Receiver.spec.secretRef&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>When a referenced ConfigMap or Secret changes, the controller will immediately trigger a reconciliation
if the referenced object is labelled with &lt;code>reconcile.fluxcd.io/watch: Enabled&lt;/code>.&lt;/p>
&lt;p>To enable the watching of all referenced objects without the need to label them,
the controllers can be configured with the &lt;code>--watch-configs-label-selector=owner!=helm&lt;/code> flag.&lt;/p>
&lt;h2 id="workload-identity-authentication-for-remote-clusters">Workload Identity Authentication for Remote Clusters&lt;/h2>
&lt;p>Starting with Flux v2.7, you can configure workload identity at the object level
in the &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> resources to authenticate with cloud providers
when running Flux in the hub-and-spoke model.&lt;/p>
&lt;p>This feature allows cluster admins to use cloud identities on the hub cluster to
configure Flux authentication to spoke clusters, without the need to create and manage
static &lt;code>kubeconfig&lt;/code> Secrets.&lt;/p>
&lt;p>For more details on how to configure secret-less authentication to remote clusters,
please refer to the following guides:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#secret-less-authentication">Kustomization - remote cluster apply&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#secret-less-authentication">HelmRelease - remote cluster apply&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="object-level-workload-identity">Object-level Workload Identity&lt;/h2>
&lt;p>In Flux v2.7, we have completed the integration of Kubernetes Workload Identity
at the object level for all Flux APIs that support authentication with cloud providers.&lt;/p>
&lt;p>This includes the following resources:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Bucket.spec.serviceAccountName&lt;/code> for authenticating with AWS S3, Azure Blob Storage and Google Cloud Storage.&lt;/li>
&lt;li>&lt;code>GitRepository.spec.serviceAccountName&lt;/code> for authenticating with Azure DevOps.&lt;/li>
&lt;li>&lt;code>OCIRepository.spec.serviceAccountName&lt;/code> for authenticating with AWS ECR, Azure Container Registry and Google Artifact Registry.&lt;/li>
&lt;li>&lt;code>ImageRepository.spec.serviceAccountName&lt;/code> for authenticating with AWS ECR, Azure Container Registry and Google Artifact Registry.&lt;/li>
&lt;li>&lt;code>Kustomization.spec.decryption.serviceAccountName&lt;/code> for authenticating with AWS KMS, Azure Key Vault and Google KMS.&lt;/li>
&lt;li>&lt;code>Kustomization.spec.kubeConfig.configMapRef.name&lt;/code> for authenticating with remote clusters on AWS EKS, Azure AKS and Google GKE.&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.kubeConfig.configMapRef.name&lt;/code> for authenticating with remote clusters on AWS EKS, Azure AKS and Google GKE.&lt;/li>
&lt;li>&lt;code>Provider.spec.serviceAccountName&lt;/code> for authenticating with Azure DevOps, Azure Event Hub and Google Pub/Sub.&lt;/li>
&lt;/ul>
&lt;p>For more details on how to configure object-level workload identity for Flux, see the following docs:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/integrations/aws/">AWS workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/integrations/azure/">Azure workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/integrations/gcp/">GCP workload identity&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="opentelemetry-tracing">OpenTelemetry Tracing&lt;/h2>
&lt;p>Starting with Flux v2.7, users can enable OpenTelemetry tracing for Flux reconciliations
by configuring a Provider of type &lt;code>otel&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>notification.toolkit.fluxcd.io/v1beta3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Provider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>jaeger&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>otel&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>http://jaeger-collector.jaeger:4318/v1/traces&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The notification-controller converts Flux events into OTEL spans with proper trace relationships
based on the Flux object hierarchy. Source objects (&lt;code>GitRepository&lt;/code>, &lt;code>HelmChart&lt;/code>, &lt;code>OCIRepository&lt;/code>, &lt;code>Bucket&lt;/code>)
create root spans, while &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> objects create child spans within the same trace.
Each span includes event metadata as attributes and uses the alert name and namespace as the service identifier.&lt;/p>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-1fba03f4fc4c04a0a3c39bc0fd775312-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-1fba03f4fc4c04a0a3c39bc0fd775312-0" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2025/09/flux-v2.7.0/images/flux-helm-otel-trace.png"
class="galleryImg"
>
&lt;img
width="900" height="458"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABAAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APXREB7/APARSfMrYDYH&amp;#43;7Thn3qJ2Il61CepTJ8E/wAf6UhRj/H&amp;#43;lRhyf4qa7sD944qyT//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2025/09/flux-v2.7.0/images/flux-helm-otel-trace_hu6644b3959ea5e4b93bf8f62c92227629_173474_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2025/09/flux-v2.7.0/images/flux-git-otel-trace.png"
class="galleryImg"
>
&lt;img
width="900" height="398"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAA4AIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APUwAOvPvT0Rm6Sso9BmmD3o3SBvlOB/n2q2c8Hd6lj7O3/PdqBAwzmUn6io1eUj73b1/wDrU1nm67zj6/8A1qk107H/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2025/09/flux-v2.7.0/images/flux-git-otel-trace_hu32154de07f5c0095c3b8a5a7e44614c3_136661_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-1fba03f4fc4c04a0a3c39bc0fd775312-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;p>For more details on how to configure OpenTelemetry tracing for Flux, please refer to the
&lt;a href="https://fluxcd.io/flux/components/notification/providers/#otel">notification-controller documentation&lt;/a>.&lt;/p>
&lt;h2 id="controller-improvements">Controller Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>GitRepository&lt;/code> API gains support for mTLS in GitHub App authentication.&lt;/li>
&lt;li>The &lt;code>Kustomization&lt;/code> API now supports
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#dependency-ready-expression">CEL expressions&lt;/a> for extended readiness evaluation of dependencies.&lt;/li>
&lt;li>The &lt;code>Kustomization&lt;/code> API gains a new field &lt;code>.spec.ignoreMissingComponents&lt;/code> for ignoring missing Kustomize components in the source.&lt;/li>
&lt;li>The kustomize-controller now supports global SOPS decryption for Age keys, allowing centralized management of decryption keys.&lt;/li>
&lt;li>The kustomize-controller can be configured to cancel ongoing health checks when a new source revision is detected with the &lt;code>--feature-gates=CancelHealthCheckOnNewRevision=true&lt;/code> flag.&lt;/li>
&lt;li>The &lt;code>HelmRelease&lt;/code> API now supports
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#dependency-ready-expression">CEL expressions&lt;/a> for extended readiness evaluation of dependencies.&lt;/li>
&lt;li>The &lt;code>HelmRelease&lt;/code> API gains a new strategy called &lt;code>RetryOnFailure&lt;/code> for better handling of release failures.&lt;/li>
&lt;li>The &lt;code>Provider&lt;/code> API now supports setting proxy via &lt;code>spec.proxySecretRef&lt;/code> and mTLS via &lt;code>spec.certSecretRef&lt;/code>.&lt;/li>
&lt;li>The &lt;code>Provider&lt;/code> API has been extended with support for Zulip and OpenTelemetry tracing.&lt;/li>
&lt;/ul>
&lt;h2 id="cli-improvements">CLI Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>flux bootstrap&lt;/code> and &lt;code>flux install&lt;/code> commands now support the &lt;code>--components-extra=source-watcher&lt;/code> flag to enable the new source-watcher component.&lt;/li>
&lt;li>A new &lt;code>flux migrate&lt;/code> command has been added to migrate Flux resources stored in Kubernetes etcd to their latest API version.&lt;/li>
&lt;li>The &lt;code>flux debug&lt;/code> command gains a new &lt;code>--show-history&lt;/code> flag to display the reconciliation history of Flux objects.&lt;/li>
&lt;li>The &lt;code>flux diff&lt;/code> command now handles the &lt;code>kustomize.toolkit.fluxcd.io/force: Enabled&lt;/code> annotation.&lt;/li>
&lt;li>The &lt;code>flux create hr&lt;/code> command gains a new &lt;code>--storage-namespace&lt;/code> flag for changing the namespace of Helm storage objects.&lt;/li>
&lt;li>New commands were added for &lt;code>ImagePolicy&lt;/code> resources:
&lt;ul>
&lt;li>&lt;code>flux reconcile image policy&lt;/code>&lt;/li>
&lt;li>&lt;code>flux suspend image policy&lt;/code>&lt;/li>
&lt;li>&lt;code>flux resume image policy&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>New commands were added for &lt;code>ArtifactGenerator&lt;/code> resources:
&lt;ul>
&lt;li>&lt;code>flux get artifact generator&lt;/code>&lt;/li>
&lt;li>&lt;code>flux export artifact generator&lt;/code>&lt;/li>
&lt;li>&lt;code>flux tree artifact generator&lt;/code>&lt;/li>
&lt;li>&lt;code>flux events --for ArtifactGenerator/&amp;lt;name&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="artifact-generators">Artifact Generators&lt;/h2>
&lt;p>Flux v2.7 comes with a new component that can be enabled at bootstrap time
with the &lt;code>--components-extra=source-watcher&lt;/code> flag.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/fluxcd/source-watcher" target="_blank">source-watcher&lt;/a> controller
implements the
&lt;a href="https://fluxcd.io/flux/components/source/artifactgenerators/">ArtifactGenerator&lt;/a> API which allows Flux users to:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Compose&lt;/strong> multiple Flux sources (GitRepository, OCIRepository, Bucket) into a single deployable artifact&lt;/li>
&lt;li>&lt;strong>Decompose&lt;/strong> monorepos into multiple independent artifacts with separate deployment lifecycles&lt;/li>
&lt;li>&lt;strong>Optimize&lt;/strong> reconciliation by only triggering updates when specific paths change&lt;/li>
&lt;li>&lt;strong>Structure&lt;/strong> complex deployments from distributed sources maintained by different teams&lt;/li>
&lt;/ul>
&lt;h3 id="multiple-source-composition">Multiple Source Composition&lt;/h3>
&lt;p>The &lt;code>ArtifactGenerator&lt;/code> can be used to combine multiple sources into a single deployable artifact,
for example, you can combine upstream Helm charts from OCI registries
with your organization&amp;rsquo;s custom values and configuration overrides stored in Git:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.extensions.fluxcd.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ArtifactGenerator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sources&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">alias&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>chart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-chart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">alias&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>repo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-values&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">artifacts&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-composite&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">originRevision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@chart&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@chart/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@repo/charts/podinfo/values.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/podinfo/values.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">strategy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Overwrite&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@repo/charts/podinfo/values-prod.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/podinfo/values.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">strategy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Merge&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">releaseName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ExternalArtifact&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-composite&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="monorepo-decomposition">Monorepo Decomposition&lt;/h3>
&lt;p>The &lt;code>ArtifactGenerator&lt;/code> can be used to decompose a monorepo into multiple independent artifacts
with separate deployment lifecycles. For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.extensions.fluxcd.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ArtifactGenerator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>app-decomposer&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sources&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">alias&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>git&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>monorepo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">artifacts&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">originRevision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git/deploy/frontend/**&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">originRevision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git/deploy/backend/**&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend-service&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ExternalArtifact&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend-service&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ExternalArtifact&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Each service gets its own &lt;code>ExternalArtifact&lt;/code> with an independent revision.
Changes to &lt;code>deploy/backend/&lt;/code> only trigger the reconciliation of the backend-service &lt;code>Kustomization&lt;/code>,
leaving other services untouched.&lt;/p>
&lt;p>For more details on how to use the &lt;code>ArtifactGenerator&lt;/code> API, please refer to the
&lt;a href="https://fluxcd.io/flux/components/source/artifactgenerators/">source-watcher documentation&lt;/a>.&lt;/p>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.4 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.7 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.32, 1.33, 1.34&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.19&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Enterprise support&lt;/strong> Note that the CNCF Flux project offers support only for the latest three minor versions of Kubernetes.
Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide enterprise support for Flux.&lt;/p>
&lt;/blockquote>
&lt;h2 id="upgrade-procedure">Upgrade Procedure&lt;/h2>
&lt;p>Note that in Flux v2.7, the following APIs have reached end-of-life and have been removed from the CRDs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>source.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>kustomize.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>helm.toolkit.fluxcd.io/v2beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>image.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>notification.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Before upgrading to Flux v2.7, make sure to migrate all your resources to the stable APIs
using the
&lt;a href="https://fluxcd.io/flux/cmd/flux_migrate/">flux migrate&lt;/a> command.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Upgrade Procedure for Flux v2.7+&lt;/h4>
We have published a dedicated step-by-step upgrade guide, please follow the instructions from
&lt;a href="https://github.com/fluxcd/flux2/discussions/5572" target="_blank">Upgrade Procedure for Flux v2.7+&lt;/a>.
&lt;/div>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Time-based deployments with Flux Operator</title><link>https://fluxcd.io/blog/2025/07/time-based-deployments/</link><pubDate>Mon, 07 Jul 2025 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/07/time-based-deployments/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/07/time-based-deployments/featured-image_hu4d2f40587f850d3f31bb1c5a3038f0ad_154744_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce time-based deployments, a feature long-awaited by Flux users, in
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator/releases/tag/v0.23.0" target="_blank">Flux Operator v0.23.0&lt;/a>!&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;p>Organizations using Flux for GitOps deployments frequently require sophisticated control over when
changes are applied to production systems, particularly in regulated industries or critical business
environments. Key requirements include adhering to Change Advisory Board (CAB) approval windows,
enforcing &amp;ldquo;No Deploy Fridays&amp;rdquo; policies, and restricting deployments during peak business hours to
ensure service stability.&lt;/p>
&lt;p>Maintenance windows become critical when managing helm upgrades, where teams need to skip reconciliation
unless the current time falls within a specified interval. In regulated environments like medical device
companies, automated deployments must be controlled to prevent unexpected disruptions during critical
operational periods. Large telecommunications providers and ISVs managing multiple client clusters need
gating mechanisms to control application rollouts, allowing tenants to consume platform updates when ready.&lt;/p>
&lt;p>In this post, we show how to use time-based deployment with Flux Operator
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/introduction/" target="_blank">&lt;code>ResourceSets&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="how-it-works">How it works&lt;/h2>
&lt;p>The Flux Operator ResourceSet API allows defining bundles of Flux objects by
templating a set of resources with inputs provided by the ResourceSetInputProvider API.&lt;/p>
&lt;p>The ResourceSetInputProvider API allows pulling inputs from external sources, such as
GitHub pull requests, branches and tags. For example, on the reconciliation of a
ResourceSetInputProvider of type &lt;code>GitHubTag&lt;/code>, the operator will list the tags of
a GitHub repository, filter them according to a semver range, and export a set of
inputs for each matching tag in the ResourceSetInputProvider &lt;code>.status.exportedInputs&lt;/code>
field. For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">status&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">exportedInputs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">id&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;48955639&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">tag&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;6.0.4&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sha&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>11cf36d83818e64aaa60d523ab6438258ebb6009&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Starting with Flux Operator v0.23.0, the ResourceSetInputProvider API now has the field
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesetinputprovider/#schedule" target="_blank">&lt;code>.spec.schedule&lt;/code>&lt;/a>,
which allows defining a cron-based schedule for the reconciliation of the ResourceSetInputProvider.
For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">schedule&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># Every day-of-week from Monday through Thursday&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># between 10:00 to 16:00&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">cron&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;0 10 * * 1-4&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeZone&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;Europe/London&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">window&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;6h&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># Every Friday from 10:00 to 13:00&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">cron&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;0 10 * * 5&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeZone&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;Europe/London&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">window&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;3h&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>With this configuration, reconciliations of the ResourceSetInputProvider object
would only be allowed to run within the specified time windows. When the window
is active, the reconciliation happens normally, according to the interval defined
in the &lt;code>fluxcd.controlplane.io/reconcileEvery&lt;/code> annotation.&lt;/p>
&lt;h2 id="a-complete-example">A complete example&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Define a ResourceSetInputProvider&lt;/strong>: This provider will scan a Git branch or tag
for changes and export the commit SHA as an input.&lt;/li>
&lt;li>&lt;strong>Configure schedule&lt;/strong>: The provider will have a reconciliation schedule
that defines when it should check for changes in the Git repository.&lt;/li>
&lt;li>&lt;strong>Define a ResourceSet&lt;/strong>: The ResourceSet will use the inputs from the provider
to create a &lt;code>GitRepository&lt;/code> and &lt;code>Kustomization&lt;/code> that deploys the application
at the specified commit SHA.&lt;/li>
&lt;/ul>
&lt;h3 id="resourcesetinputprovider-definition">ResourceSetInputProvider Definition&lt;/h3>
&lt;p>Assuming the Kubernetes deployment manifests for an application are stored in a Git repository,
you can define a input provider that scans a branch for changes
and exports the commit SHA:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fluxcd.controlplane.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ResourceSetInputProvider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app-main&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">app.kubernetes.io/name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">annotations&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">fluxcd.controlplane.io/reconcileEvery&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;10m&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">fluxcd.controlplane.io/reconcileTimeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;1m&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">schedule&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">cron&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;0 8 * * 1-5&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeZone&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;Europe/London&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">window&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>8h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitHubBranch&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># or GitLabBranch&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/my-org/my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>gh-app-auth&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">filter&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">includeBranch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;^main$&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">defaultValues&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">env&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;production&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For when Git tags are used to version the application, you can define an input provider
that scans the Git tags and exports the latest tag according to a semantic versioning:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fluxcd.controlplane.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ResourceSetInputProvider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app-release&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">app.kubernetes.io/name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">annotations&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">fluxcd.controlplane.io/reconcileEvery&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;10m&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">fluxcd.controlplane.io/reconcileTimeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;1m&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">schedule&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">cron&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;0 8 * * 1-5&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeZone&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;Europe/London&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">window&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>8h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitHubTag&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># or GitLabTag&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/my-org/my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>gh-auth&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">filter&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;&amp;gt;=1.0.0&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">limit&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">1&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="resourceset-definition">ResourceSet Definition&lt;/h3>
&lt;p>The exported inputs can then be used in a &lt;code>ResourceSet&lt;/code> to deploy the application
using the commit SHA from the input provider:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fluxcd.controlplane.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ResourceSet&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">inputsFrom&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ResourceSetInputProvider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">selector&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">matchLabels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">app.kubernetes.io/name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">resources&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;&amp;lt; inputs.provider.namespace &amp;gt;&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>12h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/my-org/my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">commit&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;&amp;lt; inputs.sha &amp;gt;&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>gh-auth&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sparseCheckout&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- deploy&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;&amp;lt; inputs.provider.namespace &amp;gt;&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">wait&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>deploy/&amp;lt;&amp;lt; inputs.env &amp;gt;&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the &lt;code>ResourceSetInputProvider&lt;/code> runs according to its schedule, if it finds a new commit,
the &lt;code>ResourceSet&lt;/code> will be automatically updated with the new commit SHA which will trigger
an application deployment for the new version.&lt;/p>
&lt;h2 id="further-reading">Further reading&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/time-based-delivery/" target="_blank">Complete Guide&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/introduction/" target="_blank">ResourceSets Introduction&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourceset/" target="_blank">ResourceSets Documentation&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesetinputprovider/#schedule" target="_blank">Schedule Documentation&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesetinputprovider/#schedule-status" target="_blank">Schedule Status Documentation&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Blog: FluxCon NA 2025</title><link>https://fluxcd.io/blog/2025/06/fluxcon-na-2025/</link><pubDate>Thu, 05 Jun 2025 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/06/fluxcon-na-2025/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/06/fluxcon-na-2025/featured-image_hu3027b215f85c24cf338a4f0ceb47d901_147083_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>&lt;img src="featured-image.png" alt="FluxCon-horizontal-color logo">&lt;/p>
&lt;p>This year at KubeCon NA in Atlanta, we&amp;rsquo;ll be hosting the first-ever
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/fluxcon/" target="_blank">FluxCon&lt;/a>!
We&amp;rsquo;re so excited to have a space specifically for Flux end-users to share their stories.
FluxCon will be taking place on &lt;strong>November 10th&lt;/strong>, 2025.&lt;/p>
&lt;p>We&amp;rsquo;ve added a number of new features to Flux and continue to stabilize API&amp;rsquo;s
for a stable, scalable lifetime.
FluxCon is a great way to learn about new use-cases, hear about Flux at scale, and connect with other
Flux practitioners.&lt;/p>
&lt;h2 id="call-for-papers">Call for Papers&lt;/h2>
&lt;p>Are you using Flux in your org? We&amp;rsquo;d love to hear your story.
You can
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/fluxcon/#call-for-proposals" target="_blank">submit your talk proposal&lt;/a> before &lt;strong>June 30th&lt;/strong>, 2025.&lt;/p>
&lt;h2 id="new-use-cases">New Use-Cases&lt;/h2>
&lt;p>Flux is used in retail stores, massive datacenters, trains, cell-towers, satellites, tractors, and so many more places. Practitioners choose Flux because it&amp;rsquo;s performant, flexible, and secure. Over the years, we&amp;rsquo;ve heard so many use-cases for Flux&amp;rsquo;s uniquely extensible continuous delivery API&amp;rsquo;s.&lt;/p>
&lt;p>This year we&amp;rsquo;re advocating for Gitless GitOps, experimenting with AI-assisted GitOps, and showing object-level identity for external API&amp;rsquo;s. The ecosystem of projects innovating around Flux is also healthy. The Headlamp project builds UI tools for Flux users, and there are a number of vendors offering SaaS and support for Flux in their products. We can&amp;rsquo;t wait to hear what people are doing next at FluxCon.&lt;/p>
&lt;h2 id="connect-with-the-community">Connect with the Community&lt;/h2>
&lt;p>The most important part of the Flux project is our community. Yes, our software is beautiful, and simple, and incredibly principled, but we build Flux purely for the love of our community of practitioners. We created GitOps to change the way we work, and meeting each other and sharing our stories is the only way to do so.&lt;/p>
&lt;p>You can expect to meet other users, talk directly with Flux maintainers (represented by multiple companies), and hear more about how we&amp;rsquo;re moving GitOps forward.&lt;/p>
&lt;p>Please consider this a warm invitation to come join us at FluxCon this November.
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/fluxcon/" target="_blank">We&amp;rsquo;ll see you there!&lt;/a>&lt;/p></description></item><item><title>Blog: Announcing Flux 2.6 GA</title><link>https://fluxcd.io/blog/2025/05/flux-v2.6.0/</link><pubDate>Thu, 29 May 2025 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/05/flux-v2.6.0/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/05/flux-v2.6.0/featured-image_hu0a3d34a1286ca95e0c20a1ae8ebfb057_608764_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.6.0" target="_blank">Flux v2.6.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.6 marks the General Availability (GA) of the Flux Open Container Initiative (OCI) Artifacts features.
The OCI artifacts support was first introduced in 2022, and since then we&amp;rsquo;ve been evolving Flux towards
a &lt;strong>Gitless GitOps&lt;/strong> model. In this model, the Flux controllers are fully decoupled from Git,
relying solely on container registries as the source of truth for the desired state of Kubernetes clusters.&lt;/p>
&lt;p>In the last couple of years, the OCI feature-set has matured, and we&amp;rsquo;ve seen major financial institutions
and enterprises adopting Flux and OCI as their preferred way of managing production deployments.
To see it in action, you can check the reference architecture guide made by ControlPlane
on how highly regulated industries can securely implement
&lt;a href="https://control-plane.io/posts/d2-reference-architecture-guide/" target="_blank">Gitless GitOps with Flux and OCI&lt;/a>.&lt;/p>
&lt;p>In this release, we have also introduced several new features to the Flux controllers,
including digest pinning in image automation, object-level workload identity for container registries
and KMS services authentication, and various improvements to notifications.&lt;/p>
&lt;p>In ecosystem news, there is a new release of
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
that comes with a Model Context Protocol (MCP) implementation for allowing AI assistants to interact with Flux.
For more details on the Flux MCP Server, see the
&lt;a href="https://fluxcd.io/blog/2025/05/ai-assisted-gitops/" target="_blank">AI-Assisted GitOps blog post&lt;/a>.&lt;/p>
&lt;h2 id="general-availability-of-flux-oci-artifacts">General availability of Flux OCI Artifacts&lt;/h2>
&lt;p>This release marks the General Availability (GA) of Flux
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/">OCIRepository&lt;/a>
API, which allows storing the desired state of Kubernetes clusters in OCI container registries.&lt;/p>
&lt;p>The &lt;code>OCIRepository&lt;/code> v1 API comes with new features including:&lt;/p>
&lt;ul>
&lt;li>Support for
&lt;a href="#object-level-workload-identity">Object-Level Workload Identity&lt;/a>,
which allows Flux to use different cloud identities for accessing container registries on multi-tenant clusters.&lt;/li>
&lt;li>Caching of registry credentials for cloud providers, which allows Flux to reuse the OIDC tokens
for subsequent requests to the same registry, reducing the number of authentication requests.&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>OCIRepository&lt;/code> v1 API is backward compatible with the previous v1beta2 API, users can upgrade
by changing the &lt;code>apiVersion&lt;/code> in the YAML files that contain &lt;code>OCIRepository&lt;/code> definitions from
&lt;code>source.toolkit.fluxcd.io/v1beta2&lt;/code> to &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>.&lt;/p>
&lt;p>The Flux CLI commands for working with OCI artifacts have been promoted to stable:&lt;/p>
&lt;ul>
&lt;li>&lt;code>flux build artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux push artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux pull artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux tag artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux diff artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux list artifacts&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The Flux custom media types used for OCI artifacts produced by the Flux CLI are now stable:&lt;/p>
&lt;ul>
&lt;li>config media type &lt;code>application/vnd.cncf.flux.config.v1+json&lt;/code>&lt;/li>
&lt;li>content media type &lt;code>application/vnd.cncf.flux.content.v1.tar+gzip&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="breaking-changes">Breaking changes&lt;/h3>
&lt;p>Prior to &lt;code>v2.6.0&lt;/code>, the &lt;code>OCIRepository&lt;/code> and &lt;code>ImageRepository&lt;/code> APIs allowed the &lt;code>spec.provider&lt;/code> field
to be set to a value that did not necessarily match the repository URL. In these cases the controllers
would simply ignore the &lt;code>spec.provider&lt;/code>, not configuring OIDC authentication for the repository.&lt;/p>
&lt;p>For example, the repository &lt;code>public.ecr.aws/aws-controllers-k8s&lt;/code> never matched Flux&amp;rsquo;s regular expression
for the &lt;code>aws&lt;/code> provider, but the controller would still allow the &lt;code>spec.provider&lt;/code> to be set to &lt;code>aws&lt;/code> in
this case and would simply ignore it. This specific configuration would work correctly because this
particular repository is public and does not require authentication.&lt;/p>
&lt;p>Similarly, a private repository that did not match any of Flux&amp;rsquo;s validations for the three container
registry providers (&lt;code>aws&lt;/code>, &lt;code>azure&lt;/code>, &lt;code>gcp&lt;/code>) would also work with the &lt;code>spec.provider&lt;/code> set to one of
these values, as long as it was also configured with one of the &lt;code>spec.secretRef&lt;/code> or
&lt;code>spec.serviceAccountName&lt;/code> fields for using image pull secrets. In these cases, the controller
would simply ignore the &lt;code>spec.provider&lt;/code> and use the image pull secret instead.&lt;/p>
&lt;p>Starting with &lt;code>v2.6.0&lt;/code>, Flux is fixing this behavior. The repository URL must now match the provider
set in &lt;code>spec.provider&lt;/code>, otherwise the controller will reject the configuration and return an error.
For automatic OIDC authentication, the &lt;code>spec.provider&lt;/code> must be set to one of the three container
registry providers (&lt;code>aws&lt;/code>, &lt;code>azure&lt;/code>, &lt;code>gcp&lt;/code>). For public repositories or authentication using image
pull secrets, the &lt;code>spec.provider&lt;/code> must not be set, or set to &lt;code>generic&lt;/code>. These configuration
instructions were explicit in the Flux docs since many releases, but are only now in &lt;code>v2.6.0&lt;/code>
being strictly enforced by the controllers.&lt;/p>
&lt;h2 id="image-automation-digest-pinning">Image Automation Digest Pinning&lt;/h2>
&lt;p>In Flux v2.6, the image automation has been enhanced to support digest pinning
for container images. This feature allows users to configure the &lt;code>ImagePolicy&lt;/code>
to track the latest digest of a container image, and the &lt;code>ImageUpdateAutomation&lt;/code>
to update the manifests in the Git repository with the new digest.&lt;/p>
&lt;p>The &lt;code>ImagePolicy&lt;/code> can now be configured to select the latest image digest
with &lt;code>.spec.digestReflectionPolicy&lt;/code> set to &lt;code>Always&lt;/code>.
Once a policy is set to track the latest digest, the manifests in the Git repository
will be updated with digest references in the format &lt;code>&amp;lt;registry&amp;gt;/&amp;lt;name&amp;gt;:&amp;lt;tag&amp;gt;@&amp;lt;digest&amp;gt;&lt;/code>.&lt;/p>
&lt;p>A new marker has been introduced to allow setting the digest in custom resources
where &lt;code>repository&lt;/code>, &lt;code>tag&lt;/code> and &lt;code>digest&lt;/code> are separate values:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">image&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">repository&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>docker.io/my-org/my-app&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;flux-system:my-app:name&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">tag&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>latest &lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;flux-system:my-app:tag&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">digest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:ec0119...&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;flux-system:my-app:digest&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details on how to configure image automation digest pinning,
see the following
&lt;a href="https://fluxcd.io/flux/guides/image-update/#digest-pinning">guide&lt;/a>.&lt;/p>
&lt;h2 id="object-level-workload-identity">Object-level Workload Identity&lt;/h2>
&lt;p>Starting with Flux v2.6, you can configure workload identity at the object level
in the &lt;code>Kustomization&lt;/code> API for SOPS decryption with KMS services, and in the
&lt;code>OCIRepository&lt;/code> and &lt;code>ImageRepository&lt;/code> APIs for accessing container registries.&lt;/p>
&lt;p>This feature allows cluster admins to use different cloud identities on multi-tenant
clusters. Instead of relying on static Secrets that require manual rotation,
you can now assign cloud identities per tenant by leveraging Kubernetes Workload Identity.&lt;/p>
&lt;p>To use this feature, cluster admins have to enable the feature gate
&lt;code>ObjectLevelWorkloadIdentity&lt;/code> which is opt-in from Flux v2.6.&lt;/p>
&lt;p>For more details on how to configure object-level workload identity for Flux,
see the following docs:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/integrations/aws/">AWS workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/integrations/azure/">Azure workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/integrations/gcp/">GCP workload identity&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="github-app-authentication">GitHub App Authentication&lt;/h2>
&lt;p>In Flux v2.6, we have completed the integration of GitHub App authentication for Git repositories.
This feature was introduced in
&lt;a href="https://fluxcd.io/blog/2025/02/flux-v2.5.0/#github-app-authentication-for-git-repositories" target="_blank">Flux v2.5&lt;/a>,
and it is now fully supported across all Flux APIs.&lt;/p>
&lt;p>The GitHub App authentication tokens are now cached by the Flux controllers
and reused for subsequent requests for the duration of the token lifetime.&lt;/p>
&lt;p>The notification-controller has also been updated to support GitHub App authentication
when updating
&lt;a href="https://fluxcd.io/flux/components/notification/providers/#git-commit-status-updates">Git commit statuses&lt;/a>
and for triggering
&lt;a href="flux/components/notification/providers/#github-dispatch">GitHub Actions workflows&lt;/a>.&lt;/p>
&lt;h2 id="notifications-improvements">Notifications Improvements&lt;/h2>
&lt;p>Starting with Flux v2.6, users can customize the
&lt;a href="https://fluxcd.io/flux/components/notification/providers/#git-commit-status-updates">Git commit status&lt;/a>
identifier in the notifications sent to Git providers by using Common Expression Language (CEL) expressions.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>notification.toolkit.fluxcd.io/v1beta3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Provider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github-status&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/my-gh-org/my-gh-repo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github-app-auth&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">commitStatusExpr&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;(event.involvedObject.kind + &amp;#39;/&amp;#39; + event.involvedObject.name + &amp;#39;/&amp;#39; + event.metadata.clusterName)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Customizing the commit status ID is particularly useful when using a monorepo for a fleet of Kubernetes clusters,
as it allows you to differentiate the commit statuses for each cluster.&lt;/p>
&lt;p>Other improvements include:&lt;/p>
&lt;ul>
&lt;li>The notification-controller can now use Azure Workload Identity when sending notifications to Azure Event Hub.&lt;/li>
&lt;li>The &lt;code>github&lt;/code> and &lt;code>githubdispatch&lt;/code> providers now support authenticating with a GitHub App.&lt;/li>
&lt;/ul>
&lt;h2 id="controller-improvements">Controller Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>GitRepository&lt;/code> v1 API now supports sparse checkout by setting a list of directories in the &lt;code>.spec.sparseCheckout&lt;/code> field.
This allows for optimizing the amount of data fetched from the Git repository.&lt;/li>
&lt;li>The &lt;code>GitRepository&lt;/code> v1 API gains supports mTLS authentication for HTTPS Git repositories.&lt;/li>
&lt;li>The &lt;code>Kustomization&lt;/code> v1 API now supports the value &lt;code>WaitForTermination&lt;/code> for the &lt;code>.spec.deletionPolicy&lt;/code> field.
This instructs the controller to wait for the deletion of all resources managed by the Kustomization
before allowing the Kustomization itself to be deleted.&lt;/li>
&lt;li>The helm-controller v1.3.0 comes with a new feature gate called &lt;code>DisableChartDigestTracking&lt;/code>,
which allows disabling appending the digest of OCI Helm charts to the chart version.
This is useful for charts that do not follow Helm&amp;rsquo;s recommendation of using the app version
instead of the chart version as a label in the manifests.&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.3 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.6 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.31, 1.32, 1.33&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.18&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Enterprise support&lt;/strong> Note that the CNCF Flux project offers support only for the latest three minor versions of Kubernetes.
Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide enterprise support for Flux.&lt;/p>
&lt;/blockquote>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: AI-Assisted GitOps with Flux Operator MCP Server</title><link>https://fluxcd.io/blog/2025/05/ai-assisted-gitops/</link><pubDate>Wed, 14 May 2025 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/05/ai-assisted-gitops/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/05/ai-assisted-gitops/featured-image_hu758f39f2897d9b09922a59b22a7c36a6_613874_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;p>In this blog post, we introduce the Flux MCP Server, a new component of the
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a> project
that connects AI assistants directly to your Kubernetes clusters, enabling seamless interaction
through natural language. It serves as a bridge between AI tools and your GitOps pipelines,
allowing you to analyze the cluster state, troubleshoot deployment issues,
and perform operations using conversational prompts.&lt;/p>
&lt;h2 id="bringing-ai-to-gitops">Bringing AI to GitOps&lt;/h2>
&lt;p>The GitOps movement started with the Flux community back in 2016, and since then,
it has gained immense popularity in the Kubernetes ecosystem as a way to manage
infrastructure and application deployments declaratively. But as the GitOps pipelines
grow in complexity, so does the cognitive load required to troubleshoot issues,
understand resource relationships, and perform routine operations.&lt;/p>
&lt;p>That&amp;rsquo;s where the Flux MCP Server comes in. By connecting AI assistants to Kubernetes clusters
and the desired state in Git, it allows operators to:&lt;/p>
&lt;ul>
&lt;li>Debug GitOps pipelines end-to-end from Flux resources to application logs&lt;/li>
&lt;li>Get accurate root cause analysis for failed deployments&lt;/li>
&lt;li>Compare Flux configurations and Kubernetes resources between clusters&lt;/li>
&lt;li>Visualize Flux dependencies with diagrams generated from the cluster state&lt;/li>
&lt;li>Instruct Flux to perform operations using conversational prompts&lt;/li>
&lt;li>Get up-to-date information and recommendations using the latest Flux official docs&lt;/li>
&lt;/ul>
&lt;h2 id="how-it-works">How It Works&lt;/h2>
&lt;p>The Flux MCP Server implements the Model Context Protocol (MCP),
providing purpose-built tools that allow AI assistants to interact with your clusters.
When you ask a question or make a request, the AI model uses these tools to gather information,
analyze configurations, and even perform operations based on your instructions.&lt;/p>
&lt;p>The AI assistants leveraging the Flux MCP Server can trace issues from high-level GitOps resources
like ResourceSets, HelmReleases, and Kustomizations all the way down to Kubernetes deployments
and pod logs.&lt;/p>
&lt;p>&lt;img src="fluxcd-ai-assisted-gitops.png" alt="AI-Assisted GitOps with Flux">&lt;/p>
&lt;p>In addition, the MCP Server enables the AI to search the Flux documentation
and provide accurate, up-to-date guidance based on the latest features and best practices,
rather than relying solely on its training data.&lt;/p>
&lt;h2 id="getting-started">Getting Started&lt;/h2>
&lt;p>Setting up the Flux MCP Server is straightforward. The server is written in Go and
statically compiled as a single binary with no external dependencies.&lt;/p>
&lt;p>You can install it using Homebrew:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>brew install controlplaneio-fluxcd/tap/flux-operator-mcp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Alternatively, you can download pre-built binaries for Linux, macOS,
and Windows, for more details refer to the
&lt;a href="https://fluxcd.control-plane.io/mcp/install/" target="_blank">installation guide&lt;/a>.&lt;/p>
&lt;p>Once installed, you can configure your AI assistant to use the Flux MCP Server.
For Claude, Cursor, Windsurf, or GitHub Copilot add the following configuration to the MCP settings:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#062873;font-weight:bold">&amp;#34;flux-operator-mcp&amp;#34;&lt;/span>:{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#062873;font-weight:bold">&amp;#34;command&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;flux-operator-mcp&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#062873;font-weight:bold">&amp;#34;args&amp;#34;&lt;/span>:[&lt;span style="color:#4070a0">&amp;#34;serve&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#062873;font-weight:bold">&amp;#34;env&amp;#34;&lt;/span>:{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#062873;font-weight:bold">&amp;#34;KUBECONFIG&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;/path/to/.kube/config&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Make sure to replace &lt;code>/path/to/.kube/config&lt;/code> with the absolute path to your kubeconfig file.&lt;/p>
&lt;h2 id="setting-up-ai-instructions">Setting Up AI Instructions&lt;/h2>
&lt;p>For the best experience with the Flux MCP Server, it&amp;rsquo;s crucial to provide your AI assistant
with proper instructions on how to interact with Kubernetes clusters and the Flux resources.
These instructions help the AI understand the context and make appropriate tool calls.&lt;/p>
&lt;p>The Flux MCP Server comes with a set of predefined instructions that you can copy from the
&lt;a href="https://raw.githubusercontent.com/controlplaneio-fluxcd/distribution/refs/heads/main/docs/mcp/instructions.md" target="_blank">instructions.md&lt;/a>
file.&lt;/p>
&lt;p>It&amp;rsquo;s recommended to enhance these instructions with information specific to your clusters, such as:&lt;/p>
&lt;ul>
&lt;li>Kubernetes distribution details (EKS, GKE, AKS, etc.)&lt;/li>
&lt;li>Cloud-specific services integrated with your clusters&lt;/li>
&lt;li>Types of applications deployed&lt;/li>
&lt;li>Secret management approaches&lt;/li>
&lt;/ul>
&lt;p>For detailed guidance on how to configure these instructions with different AI assistants,
refer to the
&lt;a href="https://fluxcd.control-plane.io/mcp/prompt-engineering/#ai-instructions" target="_blank">AI Instructions&lt;/a>
section of the documentation.&lt;/p>
&lt;h2 id="practical-applications">Practical Applications&lt;/h2>
&lt;p>Let&amp;rsquo;s look at some practical ways the Flux MCP Server can enhance your GitOps experience:&lt;/p>
&lt;h3 id="1-quick-health-assessment">1. Quick Health Assessment&lt;/h3>
&lt;p>Instead of running multiple kubectl and flux commands to check the status of your GitOps pipeline, you can simply ask:&lt;/p>
&lt;blockquote>
&lt;p>Analyze the Flux installation in my current cluster and report the status of all components and ResourceSets.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="flux-mcp-cluster-state.png" alt="">&lt;/p>
&lt;p>The AI assistant will gather information about your Flux Operator installation, controllers,
and managed resources, providing a comprehensive health assessment.&lt;/p>
&lt;h3 id="2-gitops-pipeline-visualization">2. GitOps Pipeline Visualization&lt;/h3>
&lt;p>Understanding the relationships between various GitOps resources can be challenging. The Flux MCP Server makes it easy:&lt;/p>
&lt;blockquote>
&lt;p>List the Flux Kustomizations and draw a Mermaid diagram for the depends on relationship.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="flux-mcp-diagram.png" alt="">&lt;/p>
&lt;p>The AI will generate a visual representation of your GitOps pipeline, showing the dependency
relationships between Flux Kustomizations and helping you understand the deployment order and potential bottlenecks.&lt;/p>
&lt;h3 id="3-cross-cluster-comparisons">3. Cross-Cluster Comparisons&lt;/h3>
&lt;p>When managing multiple environments, comparing configurations can be tedious. With Flux MCP Server:&lt;/p>
&lt;blockquote>
&lt;p>Compare the podinfo HelmRelease between production and staging clusters.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="flux-mcp-diff.png" alt="">&lt;/p>
&lt;p>The AI will switch contexts, gather the relevant information, and highlight the differences between the two environments.&lt;/p>
&lt;h3 id="3-root-cause-analysis">3. Root Cause Analysis&lt;/h3>
&lt;p>When deployments fail, finding the root cause can involve digging through multiple resources and logs:&lt;/p>
&lt;blockquote>
&lt;p>Perform a root cause analysis of the last failed Helm release in the frontend namespace.&lt;/p>
&lt;/blockquote>
&lt;p>The AI assistant will trace through dependencies, check resource statuses, analyze logs,
and provide a detailed explanation of what went wrong and how to fix it.&lt;/p>
&lt;h3 id="4-gitops-operations">4. GitOps Operations&lt;/h3>
&lt;p>You can even perform GitOps operations directly through natural language:&lt;/p>
&lt;blockquote>
&lt;p>Resume all the suspended Flux resources in the current cluster and verify their status.&lt;/p>
&lt;/blockquote>
&lt;p>The AI will identify suspended resources, resume them, and report on the results.&lt;/p>
&lt;h3 id="5-kubernetes-operations">5. Kubernetes Operations&lt;/h3>
&lt;p>The Flux MCP Server enables complex Kubernetes operations with simple instructions:&lt;/p>
&lt;blockquote>
&lt;p>Create a namespace called test, then copy the podinfo Helm release and its source.
Change the Helm values for ingress to test.podinfo.com&lt;/p>
&lt;/blockquote>
&lt;p>The AI will generate and apply the necessary Kubernetes resources,
handling the details of creating namespaces, cloning Helm releases,
and modifying configuration values - all through a single conversational request.&lt;/p>
&lt;h2 id="security-considerations">Security Considerations&lt;/h2>
&lt;p>As with any tool that interacts with your clusters, security should be a top priority.
The Flux MCP Server includes several security features to ensure safe operations:&lt;/p>
&lt;ul>
&lt;li>Operates with your existing kubeconfig permissions&lt;/li>
&lt;li>Supports service account impersonation for limited access&lt;/li>
&lt;li>Masks sensitive information in Kubernetes Secret values&lt;/li>
&lt;li>Provides a read-only mode for observation without affecting the cluster state&lt;/li>
&lt;/ul>
&lt;p>For more details on security settings, please refer to the
&lt;a href="https://fluxcd.control-plane.io/mcp/config/" target="_blank">configuration guide&lt;/a>.&lt;/p>
&lt;h2 id="the-future-of-ai-assisted-gitops">The Future of AI-Assisted GitOps&lt;/h2>
&lt;p>The Flux MCP Server is currently an experimental feature, and it&amp;rsquo;s being actively developed based
on user feedback and real-world use cases.&lt;/p>
&lt;p>We plan to enhance the server with the following features in future releases:&lt;/p>
&lt;ul>
&lt;li>Integration with Kubernetes metrics-server and other observability tools&lt;/li>
&lt;li>Improved the documentation search capabilities&lt;/li>
&lt;li>More advanced troubleshooting capabilities&lt;/li>
&lt;li>Support for staged rollout/rollback of apps across clusters&lt;/li>
&lt;/ul>
&lt;p>All feedback is welcome, please reach out to us on
&lt;a href="https://github.com/fluxcd/flux2/discussions/5352" target="_blank">GitHub Discussions&lt;/a>.&lt;/p></description></item><item><title>Blog: GitHub App bootstrap with Flux Operator</title><link>https://fluxcd.io/blog/2025/04/flux-operator-github-app-bootstrap/</link><pubDate>Mon, 14 Apr 2025 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/04/flux-operator-github-app-bootstrap/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/04/flux-operator-github-app-bootstrap/featured-image_hu758f39f2897d9b09922a59b22a7c36a6_607567_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;p>In this blog post, we will showcase how
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
can be used to bootstrap Kubernetes clusters using the GitHub App authentication method
introduced in
&lt;a href="https://fluxcd.io/blog/2025/02/flux-v2.5.0/" target="_blank">Flux 2.5.0&lt;/a>.&lt;/p>
&lt;p>Prior to Flux 2.5.0, the GitHub repository authentication methods were based on using a
secret that is tied to a GitHub user, be it a personal access token (PAT) or an SSH deploy key.
When the user leaves the organization, the GitHub deploy keys are revoked
resulting in Flux losing access to all repositories. To restore access, the cluster
administrators have to generate new GitHub deploy keys tied to a different user
and rotate the secret in all clusters.&lt;/p>
&lt;p>To avoid this situation, the recommendation was for organizations to create a dedicated
GitHub user for Flux, but this is also not ideal since an extra user affects billing.
The login credentials and MFA code have to be stored in an external secret management system
like 1Password, increasing the complexity of the cluster bootstrap process.&lt;/p>
&lt;p>Starting with Flux 2.5.0, the GitHub App authentication method allows organizations to create a GitHub App
with access to the repositories from where Flux syncs the desired state of Kubernetes clusters.
Instead of using the credentials of a GitHub user, Flux running on the clusters will use the GitHub App
private key to authenticate with the GitHub API, acquiring a short-lived access token to perform
Git operations.&lt;/p>
&lt;h2 id="flux-operator">Flux Operator&lt;/h2>
&lt;p>The
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a> offers an alternative
to the Flux CLI bootstrap procedure. It removes the operational burden of managing Flux across fleets
of clusters by fully automating the installation, configuration, and upgrade of the Flux controllers
based on a declarative API called &lt;code>FluxInstance&lt;/code>.&lt;/p>
&lt;p>The
&lt;a href="https://fluxcd.control-plane.io/operator/fluxinstance/" target="_blank">FluxInstance&lt;/a> custom resource defines
the desired state of the Flux components and allows the configuration of the
&lt;a href="https://fluxcd.control-plane.io/operator/flux-sync/" target="_blank">cluster state syncing&lt;/a>
from Git repositories, OCI artifacts and S3-compatible storage.&lt;/p>
&lt;p>When using a GitHub repository as the source of truth, the Flux instance can be configured
to use the GitHub App authentication method by referencing a Kubernetes secret that contains
the app ID, the installation ID and the private key of the GitHub App.&lt;/p>
&lt;p>What follows is a step-by-step guide on how to install the Flux Operator and bootstrap
a cluster using the GitHub App authentication.&lt;/p>
&lt;h3 id="bootstrap-using-flux-operator-and-helm">Bootstrap using Flux Operator and Helm&lt;/h3>
&lt;p>First, install the Flux Operator using the Helm chart:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>helm install flux-operator oci://ghcr.io/controlplaneio-fluxcd/charts/flux-operator &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --namespace flux-system &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --create-namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Next, create a GitHub App secret using the &lt;code>flux&lt;/code> CLI (see docs on how to create a GitHub App
&lt;a href="#github-app-docs">here&lt;/a>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create secret githubapp flux-system &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-id&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#40a070">1&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-installation-id&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#40a070">2&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-private-key&lt;span style="color:#666">=&lt;/span>./path/to/private-key-file.pem
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Finally, bootstrap the cluster by creating a &lt;code>FluxInstance&lt;/code> custom resource in the &lt;code>flux-system&lt;/code> namespace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fluxcd.controlplane.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>FluxInstance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">distribution&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">registry&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;ghcr.io/fluxcd&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">components&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- source-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- kustomize-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- helm-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- notification-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- image-reflector-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- image-automation-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cluster&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kubernetes&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">multitenant&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">false&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">networkPolicy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">domain&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;cluster.local&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sync&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;https://github.com/my-org/my-fleet.git&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;refs/heads/main&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;clusters/my-cluster&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">pullSecret&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;flux-system&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the &lt;code>FluxInstance&lt;/code> is applied on the cluster, the operator will automatically deploy the Flux controllers
and configure them to sync the cluster state from the specified repository using GitHub App authentication.
Similarly to the Flux CLI bootstrap, the operator generates a Flux &lt;code>GitRepository&lt;/code> and &lt;code>Kustomization&lt;/code> named
&lt;code>flux-system&lt;/code> that points to the &lt;code>clusters/my-cluster&lt;/code> path inside the Git repository.&lt;/p>
&lt;p>The Flux instance can be customized in various ways including multi-tenancy lockdown,
sharding, horizontal and vertical scaling, persistent storage, and fine-tuning
the Flux controllers with Kustomize patches.
For more information on the available options, please refer
to the
&lt;a href="https://fluxcd.control-plane.io/operator/flux-config/" target="_blank">Flux Operator documentation&lt;/a>.&lt;/p>
&lt;h3 id="bootstrap-using-flux-operator-and-terraform">Bootstrap using Flux Operator and Terraform&lt;/h3>
&lt;p>Alternatively, you can use Terraform or OpenTofu to install the Flux Operator and
the &lt;code>FluxInstance&lt;/code>. A Terraform example is available in the
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator/blob/main/config/terraform/README.md" target="_blank">Flux Operator repository&lt;/a>.&lt;/p>
&lt;p>The command for applying this Terraform example with a GitHub App would be the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">export&lt;/span> &lt;span style="color:#bb60d5">GITHUB_APP_PEM&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">`&lt;/span>cat path/to/app.private-key.pem&lt;span style="color:#4070a0">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>terraform apply &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">flux_version&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;2.x&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">flux_registry&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;ghcr.io/fluxcd&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">github_app_id&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;1&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">github_app_installation_id&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;2&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">github_app_pem&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>&lt;span style="color:#bb60d5">$GITHUB_APP_PEM&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">git_url&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;https://github.com/my-org/my-fleet.git&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">git_ref&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;refs/heads/main&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> -var &lt;span style="color:#bb60d5">git_path&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;clusters/production&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="github-app-docs">GitHub App Docs&lt;/h3>
&lt;ul>
&lt;li>
&lt;a href="https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app" target="_blank">Registering a GitHub App&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps" target="_blank">Managing private keys for GitHub Apps&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://docs.github.com/en/apps/using-github-apps/installing-your-own-github-app" target="_blank">Installing your GitHub App&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>After installing your GitHub App in your organization you can find the &lt;em>installation ID&lt;/em> like this:&lt;/p>
&lt;ol>
&lt;li>Go to the Organization settings&lt;/li>
&lt;li>Click on &amp;lsquo;GitHub Apps&amp;rsquo; under &amp;lsquo;Third-party Access&amp;rsquo;&lt;/li>
&lt;li>If there are multiple GitHub apps, choose your App and click on &amp;lsquo;Configure&amp;rsquo;&lt;/li>
&lt;li>Once your GitHub App is selected check the URL for obtaining &amp;lsquo;GitHub App Installation ID&amp;rsquo;&lt;/li>
&lt;/ol>
&lt;p>The URL looks like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>https://github.com/organizations/&amp;lt;Organization-name&amp;gt;/settings/installations/&amp;lt;ID&amp;gt;
&lt;/code>&lt;/pre>&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Using the GitHub App authentication method with Flux Operator offers a more secure
way of bootstrapping Flux on Kubernetes clusters, as it eliminates the need for managing
GitHub user credentials and deploy keys. This approach ensures that Flux can
continue to operate seamlessly even when users leave the organization or change their access
permissions.&lt;/p>
&lt;p>Migrating clusters that have been bootstrapped with the Flux CLI to the Flux Operator
is a straightforward process. For more information on how to do this, please refer to the
&lt;a href="https://fluxcd.control-plane.io/operator/flux-bootstrap-migration/" target="_blank">Flux Operator bootstrap migration guide&lt;/a>.&lt;/p></description></item><item><title>Blog: Announcing Flux 2.5 GA</title><link>https://fluxcd.io/blog/2025/02/flux-v2.5.0/</link><pubDate>Thu, 20 Feb 2025 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2025/02/flux-v2.5.0/</guid><description>
&lt;img src="https://fluxcd.io/blog/2025/02/flux-v2.5.0/featured-image_hu01632177776d3af78deffdce84473b92_598056_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.5.0" target="_blank">Flux v2.5.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.5 marks a significant milestone in the project&amp;rsquo;s evolution, we have integrated Common Expression Language (CEL)
with the Flux controllers to enable long-awaited features such as custom health checks and webhook receiver filters.
Moreover, we have added support for GitHub App authentication, custom event metadata for notifications and Flux CLI helpers
for troubleshooting Flux resources.&lt;/p>
&lt;p>In ecosystem news, the
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a> v0.14 release brings
one of the most requested features: deploy app code and/or config changes made in a GitHub Pull Request
or GitLab Merge Request to an ephemeral environment for testing and validation.&lt;/p>
&lt;p>The Flux Operator has the ability to create, update and delete application instances on-demand based
on the
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/introduction/" target="_blank">ResourceSet&lt;/a>
definitions and Pull/Merge Requests state.&lt;/p>
&lt;p>For more details on how to use the ephemeral environments feature, see the following guides:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/github-pull-requests/" target="_blank">Ephemeral Environments for GitHub Pull Requests&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/gitlab-merge-requests/" target="_blank">Ephemeral Environments for GitLab Merge Requests&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="health-checks-for-custom-resources">Health Checks for Custom Resources&lt;/h3>
&lt;p>In this release, we have extended the Flux
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/">Kustomization&lt;/a> API
with support for defining custom health checks using Common Expression Language (CEL).
The health checks are used to verify the readiness of the resources managed by Flux and are a key feature
for ensuring that the desired state of the cluster is achieved.&lt;/p>
&lt;p>While Flux performs a series of built-in health checks for Kubernetes core resources, the new feature
allows users to teach Flux how to check the health of Kubernetes custom resources.
This is particularly useful for custom resources that do not subscribe to the Kubernetes API conventions
or for resources that require additional logic to determine if they reached the desired state.&lt;/p>
&lt;p>A common use case for custom health checks is to verify the status of &lt;code>Cluster&lt;/code> objects reconciled by
the
&lt;a href="https://cluster-api.sigs.k8s.io/" target="_blank">Cluster API&lt;/a> controllers. When Flux is used to manage a fleet
of Kubernetes clusters, the health checks can be used to ensure that the clusters are ready before
deploying cluster addons and applications.&lt;/p>
&lt;p>Example of a Kustomization with a custom health check for Cluster API:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prod-clusters&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>infra&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fleet&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;./production&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">wait&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">healthCheckExprs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>cluster.x-k8s.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Cluster&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">failed&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;status.conditions.filter(e, e.type == &amp;#39;Ready&amp;#39;).all(e, e.status == &amp;#39;False&amp;#39;)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">current&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;status.conditions.filter(e, e.type == &amp;#39;Ready&amp;#39;).all(e, e.status == &amp;#39;True&amp;#39;)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above example configures Flux to wait for all the &lt;code>Cluster&lt;/code> objects to reach the Ready state
before proceeding with the reconciliation of other Kustomizations that have a
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#dependencies">dependsOn&lt;/a> relationship
defined for the &lt;code>prod-clusters&lt;/code>.&lt;/p>
&lt;p>We have published a
&lt;a href="https://fluxcd.io/flux/cheatsheets/cel-healthchecks/">health check library&lt;/a> that contains CEL
expressions for popular custom resources. The library is community-maintained, and we encourage
users to contribute new health checks.&lt;/p>
&lt;p>Other kustomize-controller improvements include:&lt;/p>
&lt;ul>
&lt;li>Fine-grained control of garbage collection with
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#deletion-policy" target="_blank">.spec.deletionPolicy&lt;/a>.&lt;/li>
&lt;li>SOPS support for decryption of Kubernetes secrets generated by Kustomize components.&lt;/li>
&lt;/ul>
&lt;h3 id="github-app-authentication-for-git-repositories">GitHub App Authentication for Git Repositories&lt;/h3>
&lt;p>Starting with Flux v2.5, you can configure source-controller and image-automation-controller
to authenticate against GitHub repositories using a GitHub App installation.&lt;/p>
&lt;p>Instead of relying on personal access tokens or SSH keys that require manual rotation,
you can now configure Flux to authenticate against GitHub repositories using an identity
that is not tied to a specific user account.&lt;/p>
&lt;p>We have added a new command to the Flux CLI that can be used to create the Kubernetes Secret
required for the GitHub App authentication.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create secret githubapp github-auth &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-id&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#40a070">1&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-installation-id&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#40a070">2&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-private-key&lt;span style="color:#666">=&lt;/span>~/private-key.pem
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Kubernetes Secret generated by the above command can be referenced in a &lt;code>GitRepository&lt;/code>
and &lt;code>ImageUpdateAutomation&lt;/code> with &lt;code>.spec.secretRef.name&lt;/code>.&lt;/p>
&lt;p>For more details on how to configure the GitHub App authentication, see the
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#github" target="_blank">GitRepository API documentation&lt;/a>.&lt;/p>
&lt;h3 id="custom-event-metadata-for-notifications">Custom event metadata for notifications&lt;/h3>
&lt;p>Starting with Flux v2.5, users can enrich the metadata of the events sent by the notification-controller
by adding annotations on the Flux &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> resources.
The metadata is included in the notifications sent to the configured providers, such as Slack, Microsoft Teams, etc.,
and can be used to provide additional context about a particular application or environment.&lt;/p>
&lt;p>One highly requested feature was the ability to include the image tag in the notifications send when
Flux image automation updates the container image tag in HelmRelease values.&lt;/p>
&lt;p>Example of a HelmRelease with custom event metadata containing the image tag:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">annotations&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">event.toolkit.fluxcd.io/image&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>docker.io/org/my-app:1.0.0&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;apps:my-app&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">image&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">tag&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">1.0.0&lt;/span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;apps:my-app:tag&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the image automation updates the &lt;code>my-app&lt;/code> HelmRelease with a new image tag e.g. &lt;code>1.0.1&lt;/code>,
the notification sent after the Helm release upgrade will include &lt;code>image: docker.io/org/my-app:1.0.1&lt;/code>
in message body.&lt;/p>
&lt;p>For more details on how to configure custom event metadata, see the
&lt;a href="https://fluxcd.io/flux/components/notification/alerts/#event-metadata-from-object-annotations" target="_blank">Alert API documentation&lt;/a>.&lt;/p>
&lt;p>Other notifications improvements include:&lt;/p>
&lt;ul>
&lt;li>The notification-controller is now capable of updating
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/#git-commit-status-updates" target="_blank">Git commit statuses&lt;/a>
from events about Kustomizations that consume OCIRepositories.&lt;/li>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/notification/receivers/#filtering-reconciled-objects-with-cel" target="_blank">Receiver API&lt;/a>
now supports filtering the declared resources that match a given Common Expression Language (CEL) expression.&lt;/li>
&lt;/ul>
&lt;h3 id="cli-improvements">CLI Improvements&lt;/h3>
&lt;p>To help users troubleshoot Flux, we&amp;rsquo;ve added a new &lt;code>flux debug&lt;/code> command the following subcommands:&lt;/p>
&lt;ul>
&lt;li>&lt;code>flux debug kustomization --show-vars&lt;/code> used to inspect the final variables values by merging the Flux &lt;code>Kustomization&lt;/code>
inline vars with the vars coming from Kubernetes ConfigMaps/Secrets.&lt;/li>
&lt;li>&lt;code>flux debug helmrelease --show-values&lt;/code> used to inspect the final Helm values by merging the &lt;code>HelmRelease&lt;/code>
inline values with the values coming from Kubernetes ConfigMaps/Secrets.&lt;/li>
&lt;/ul>
&lt;p>Note that these commands will print sensitive information if Kubernetes Secrets are referenced in
the Flux &lt;code>Kustomization&lt;/code> or &lt;code>HelmRelease&lt;/code> resources.&lt;/p>
&lt;p>Other CLI improvements include:&lt;/p>
&lt;ul>
&lt;li>A new command was added, &lt;code>flux create secret githubapp&lt;/code> that can be used to generate a Kubernetes Secret
for GitHub App authentication.&lt;/li>
&lt;li>The &lt;code>flux create source git&lt;/code> command now supports the &lt;code>--provider=github&lt;/code> flag to configure GitHub App authentication
for Git repositories.&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.2 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.5 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.30, 1.31, 1.32&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.17&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Enterprise support&lt;/h4>
&lt;p>Note that the CNCF Flux project offers support only for the latest
three minor versions of Kubernetes.&lt;/p>
&lt;p>Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors
such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide
enterprise support for Flux.&lt;/p>
&lt;/div>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Announcing Flux 2.4 GA</title><link>https://fluxcd.io/blog/2024/09/flux-v2.4.0/</link><pubDate>Mon, 30 Sep 2024 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2024/09/flux-v2.4.0/</guid><description>
&lt;img src="https://fluxcd.io/blog/2024/09/flux-v2.4.0/featured-image_hub25ad32b7d77a2743cffc7dca43de13f_611199_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.4.0" target="_blank">Flux v2.4.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="general-availability-of-flux-s3-compatible-source-api">General availability of Flux S3-compatible Source API&lt;/h2>
&lt;p>This release marks the General Availability (GA) of Flux &lt;code>Bucket&lt;/code> API which allows storing
the desired state of Kubernetes clusters in S3-compatible storage services such as
Amazon S3, Azure Blob Storage, Google Cloud Storage, Alibaba Cloud, MinIO, and others.&lt;/p>
&lt;p>The &lt;code>Bucket&lt;/code> v1 API comes with new features including: proxy support, mTLS and custom STS
configuration for AWS S3 and MinIO LDAP authentication.&lt;/p>
&lt;p>New fields in the &lt;code>source.toollkit.fluxcd.io/v1&lt;/code> API:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.spec.proxySecretRef&lt;/code> allows configuring HTTP/S Proxy authentication for the S3-compatible storage service.&lt;/li>
&lt;li>&lt;code>.spec.certSecretRef&lt;/code> allows custom TLS client certificate and CA for secure communication with the S3-compatible storage service.&lt;/li>
&lt;li>&lt;code>.spec.sts&lt;/code> allows custom STS configuration for AWS S3 and MinIO LDAP authentication.&lt;/li>
&lt;/ul>
&lt;p>For more details, please see the
&lt;a href="https://fluxcd.io/flux/components/source/buckets/">Bucket documentation&lt;/a>.&lt;/p>
&lt;p>To upgrade, make sure the new CRDs and controllers are deployed, and then change the manifests in Git:&lt;/p>
&lt;ol>
&lt;li>Set &lt;code>apiVersion: source.toolkit.fluxcd.io/v1&lt;/code> in the YAML files that contain &lt;code>Bucket&lt;/code> definitions.&lt;/li>
&lt;li>Commit, push and reconcile the API version changes.&lt;/li>
&lt;/ol>
&lt;p>Bumping the APIs version in manifests can be done gradually.
It is advised to not delay this procedure as the deprecated versions will be removed after 6 months.&lt;/p>
&lt;h2 id="azure-devops-oidc-authentication">Azure DevOps OIDC Authentication&lt;/h2>
&lt;p>Starting with Flux v2.4, you can configure source-controller and image-automation-controller
to authenticate against Azure DevOps repositories using AKS Workload Identity.&lt;/p>
&lt;p>Instead of using Azure personal access tokens or SSH keys that require manual rotation,
you can now use OIDC tokens to authenticate against Azure DevOps repositories by leveraging
Kubernetes Workload Identity.&lt;/p>
&lt;p>For more details on how to configure the Azure DevOps OIDC authentication, see the
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#provider" target="_blank">GitRepository API documentation&lt;/a>.&lt;/p>
&lt;h2 id="controller-improvements">Controller Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>OCIRepository&lt;/code> v1beta2 API gains support for proxy configuration thus allowing
dedicated
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#proxy-secret-reference">HTTP/S Proxy&lt;/a>
authentication on multi-tenant Kubernetes clusters.&lt;/li>
&lt;li>The &lt;code>HelmRelease&lt;/code> v2 API gains support for disabling JSON schema validation of the Helm release values
during installation and upgrade. And allows adopting existing Kubernetes resources during Helm release
installation.&lt;/li>
&lt;li>The notification-controller allows transitioning the Microsoft Teams alerting from the deprecated
Office 365 connector to MS Workflows and the
&lt;a href="https://fluxcd.io/flux/components/notification/providers/#microsoft-teams">Adaptive Card format&lt;/a>.&lt;/li>
&lt;li>The Flux Kustomization and HelmRelease APIs now support defining dependencies between resources
managed by different controller shards.&lt;/li>
&lt;/ul>
&lt;h2 id="cli-improvements">CLI Improvements&lt;/h2>
&lt;ul>
&lt;li>A new command was added, &lt;code>flux create secret proxy&lt;/code> that can be used to generate a Kubernetes Secret
for HTTP/S Proxy authentication referenced by &lt;code>Bucket&lt;/code>, &lt;code>GitRepository&lt;/code> and &lt;code>OCIRepository&lt;/code>.&lt;/li>
&lt;li>The &lt;code>flux create source git&lt;/code> command now supports the &lt;code>--provider=azure&lt;/code> flag to configure OIDC authentication
for Azure DevOps repositories.&lt;/li>
&lt;li>The &lt;code>flux diff kustomization&lt;/code> command now supports the &lt;code>--recursive&lt;/code> flag to recursively diff encountered Kustomizations.&lt;/li>
&lt;li>On Windows, the Flux CLI can now be installed using the WinGet tool by running &lt;code>winget install -e --id FluxCD.Flux&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.1 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.4 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.29, 1.30, 1.31&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.16&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Enterprise support&lt;/h4>
&lt;p>Note that the CNCF Flux project offers support only for the latest
three minor versions of Kubernetes.&lt;/p>
&lt;p>Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors
such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide
enterprise support for Flux.&lt;/p>
&lt;/div>
&lt;h2 id="flux-operator-and-openshift-compatibility">Flux Operator and OpenShift Compatibility&lt;/h2>
&lt;p>Flux can be installed on Red Hat OpenShift cluster directly from
&lt;a href="https://operatorhub.io/operator/flux-operator" target="_blank">OperatorHub&lt;/a> or by using the
&lt;a href="https://artifacthub.io/packages/helm/flux-operator/flux-operator" target="_blank">Flux Operator Helm chart&lt;/a>.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
is an open-source project developed by ControlPlane that offers an alternative to the
Flux Bootstrap procedure, it removes the operational burden of managing Flux across
fleets of clusters by fully automating the installation, configuration, and upgrade
of the Flux controllers based on a declarative API.&lt;/p>
&lt;p>The operator simplifies the configuration of Flux multi-tenancy lockdown, sharding,
horizontal and vertical scaling, persistent storage, and allows fine-tuning
the Flux controllers with Kustomize patches. The operator streamlines the
transition from Git as the delivery mechanism for the cluster desired state
to OCI artifacts and S3-compatible storage.&lt;/p>
&lt;p>After installing the Flux Operator on OpenShift, you can deploy the Flux controllers
using the &lt;code>FluxInstance&lt;/code> custom resource e.g.:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fluxcd.controlplane.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>FluxInstance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">distribution&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">registry&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;ghcr.io/fluxcd&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">artifact&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests:latest&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">components&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- source-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- kustomize-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- helm-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- notification-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- image-reflector-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- image-automation-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cluster&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>openshift&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">multitenant&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">networkPolicy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">domain&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;cluster.local&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sharding&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">shards&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;shard1&amp;#34;&lt;/span>,&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;shard2&amp;#34;&lt;/span>&lt;span style="color:#bbb"> &lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sync&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;oci://ghcr.io/my-org/my-fleet-manifests&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;latest&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;clusters/my-cluster&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">pullSecret&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;flux-system&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details on how to use configure Flux using the operator, please see the
&lt;a href="https://fluxcd.control-plane.io/operator/" target="_blank">Flux Operator documentation&lt;/a>.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Announcing Flux 2.3 GA</title><link>https://fluxcd.io/blog/2024/05/flux-v2.3.0/</link><pubDate>Mon, 13 May 2024 12:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2024/05/flux-v2.3.0/</guid><description>
&lt;img src="https://fluxcd.io/blog/2024/05/flux-v2.3.0/featured-image_hue07ae75357d039bdf47d8003dd7d4c65_254854_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.3.0" target="_blank">Flux v2.3.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="general-availability-of-flux-helm-features-and-apis">General availability of Flux Helm features and APIs&lt;/h2>
&lt;p>This release marks a significant milestone for the Flux project, after almost four years of development,
the helm-controller and the Helm related APIs have reached general availability.&lt;/p>
&lt;p>The following Kubernetes CRDs have been promoted to GA:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/">HelmRelease&lt;/a> - &lt;code>helm.toolkit.fluxcd.io/v2&lt;/code>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/">HelmChart&lt;/a> - &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/">HelmRepository&lt;/a> - &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The Helm features and APIs have been battle-tested by the community in production and are now considered stable.
Future changes to the Helm APIs will be made in a backwards compatible manner,
and we will continue to support and maintain them for the foreseeable future.&lt;/p>
&lt;h3 id="enhanced-helm-oci-support">Enhanced Helm OCI support&lt;/h3>
&lt;p>The &lt;code>HelmRelease&lt;/code> v2 API comes with a new field
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#chart-reference">&lt;code>.spec.chartRef&lt;/code>&lt;/a>
that adds support for referencing &lt;code>OCIRepository&lt;/code> and &lt;code>HelmChart&lt;/code> objects in a &lt;code>HelmRelease&lt;/code>.
When using &lt;code>.spec.chartRef&lt;/code> instead of &lt;code>.spec.chart&lt;/code>, the controller allows the reuse
of a Helm chart version across multiple &lt;code>HelmRelease&lt;/code> resources.&lt;/p>
&lt;p>Starting with this version, the recommended way of referencing Helm charts stored
in container registries is through
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/">OCIRepository&lt;/a>.&lt;/p>
&lt;p>Using &lt;code>OCIRepository&lt;/code> objects instead of &lt;code>HelmRepository&lt;/code>
improves the controller&amp;rsquo;s performance and simplifies the debugging process.
The &lt;code>OCIRepository&lt;/code> provides more flexibility in managing Helm charts,
as it allows targeting a Helm chart version by &lt;code>tag&lt;/code>, &lt;code>semver&lt;/code> or OCI &lt;code>digest&lt;/code> pinning.
If a chart version gets overwritten in the container registry, the controller
will detect the change in the upstream OCI digest and reconcile the &lt;code>HelmRelease&lt;/code>
resources accordingly.&lt;/p>
&lt;p>Example of a &lt;code>HelmRelease&lt;/code> referencing an &lt;code>OCIRepository&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>10m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiService&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">create&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>12h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">layerSelector&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mediaType&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;application/vnd.cncf.helm.chart.content.v1.tar+gzip&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">operation&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>copy&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://docker.io/bitnamicharts/metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;&amp;gt;=7.0.0&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="improved-observability-of-helm-releases">Improved observability of Helm releases&lt;/h3>
&lt;p>By popular demand, the helm-controller now emits Kubernetes events annotated with the Helm chart &lt;code>appVersion&lt;/code>
in addition to the &lt;code>version&lt;/code> info. When configuring
&lt;a href="https://fluxcd.io/flux/components/notification/alerts/">alerts&lt;/a> for Helm releases,
the &lt;code>appVersion&lt;/code> is now available as a field in the alert metadata and is displayed in the notification messages.
The &lt;code>appVersion&lt;/code> field is also included in the &lt;code>HelmRelease&lt;/code> status, and in the &lt;code>gotk_resource_info&lt;/code> Prometheus metrics.&lt;/p>
&lt;p>When using an &lt;code>OCIRepository&lt;/code> as the &lt;code>HelmRelease&lt;/code> chart source, the controller will also include the OCI
digest of the Helm chart artifact in the Kubernetes events and the &lt;code>HelmRelease&lt;/code> status.&lt;/p>
&lt;h3 id="benchmark-results">Benchmark results&lt;/h3>
&lt;p>To measure the real world impact of the helm-controller GA, we have set up benchmarks that measure
Mean Time To Production (MTTP). The MTTP benchmark measures the time it takes for Flux to deploy
application changes into production. Below are the results of the benchmark that ran on a GitHub
hosted runner (Ubuntu, 16 cores):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Objects&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Flux component&lt;/th>
&lt;th>Duration&lt;/th>
&lt;th>Max Memory&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>25s&lt;/td>
&lt;td>40Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>28s&lt;/td>
&lt;td>190Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>45s&lt;/td>
&lt;td>68Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>2m45s&lt;/td>
&lt;td>250Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>1m30s&lt;/td>
&lt;td>110Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>8m1s&lt;/td>
&lt;td>490Mi&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Compared to Flux v2.2, in this version the memory consumption of the helm-controller
has improved a lot, especially when the cluster has hundreds of CRDs registered.
In Flux v2.2, helm-controller on Kubernetes v1.28 runs out of memory
with only 100 CRDs registered. Whereas, in Flux v2.3 on Kubernetes v1.29, it can handle
500+ CRDs without issues. Given these results, it is recommended
to upgrade the Kubernetes control plane to v1.29 and Flux to v2.3.&lt;/p>
&lt;h2 id="image-update-automation-improvements">Image update automation improvements&lt;/h2>
&lt;p>The &lt;code>ImageUpdateAutomation&lt;/code> API has been promoted to v1beta2 and
the image-automation-controller has been refactored to enhance the reconciliation process.&lt;/p>
&lt;p>The v1beta2 API comes with a new
&lt;a href="https://fluxcd.io/flux/components/image/imageupdateautomations/#message-template">template model&lt;/a>
that can be used to customize the commit message when the controller updates the
image references in the Git repository. The commit template supports old and new values
for the changes made to the files containing the policy markers.
In addition, the commit message is included in the Kubernetes events emitted by the controller,
offering better visibility into the automation process.&lt;/p>
&lt;p>The &lt;code>ImageUpdateAutomation&lt;/code> API now supports selecting &lt;code>ImagePolicies&lt;/code> using label selectors
in the new field
&lt;a href="https://fluxcd.io/flux/components/image/imageupdateautomations/#policyselector">&lt;code>.spec.policySelector&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="migration-to-v1beta2-template-model">Migration to v1beta2 template model&lt;/h3>
&lt;p>To migrate to the v1beta2 API,
update the &lt;code>apiVersion&lt;/code> field in the &lt;code>ImageUpdateAutomation&lt;/code> resources to &lt;code>image.toolkit.fluxcd.io/v1beta2&lt;/code>,
and modify the &lt;code>messageTemplate&lt;/code> to use the &lt;code>Changed&lt;/code> template data.&lt;/p>
&lt;p>Example template:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>image.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ImageUpdateAutomation&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;automation-name&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">git&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">commit&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">messageTemplate&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|-&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> Automated image update
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> Changes:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ range .Changed.Changes -}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - {{ .OldValue }} -&amp;gt; {{ .NewValue }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ end -}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> Files:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ range $filename, $_ := .Changed.FileChanges -}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - {{ $filename }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ end -}}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Example generated commit message:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Automated image update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Changes:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- docker.io/nginx:1.25.4 -&amp;gt; docker.io/nginx:1.25.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- docker.io/org/app:1.0.0 -&amp;gt; docker.io/org/app:1.0.1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Files:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- apps/my-app/deployment.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more examples and details,
see the
&lt;a href="https://fluxcd.io/flux/components/image/imageupdateautomations/#message-template">ImageUpdateAutomation documentation&lt;/a>.&lt;/p>
&lt;h2 id="signatures-verification-with-notation">Signatures verification with Notation&lt;/h2>
&lt;p>The Flux source-controller now supports verifying the authenticity of OCI artifacts signed with
&lt;a href="https://github.com/notaryproject/notation" target="_blank">Notation&lt;/a> (CNCF Notary project).&lt;/p>
&lt;p>To enable Notation signature verification, please see the following documentation:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/#notation">HelmChart verify&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#notation">OCIRepository verify&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>In addition, the Flux CLI now supports generating Kubernetes secrets with Notation trust policies,
using the &lt;code>flux create secret notation&lt;/code> command.&lt;/p>
&lt;p>Big thanks to Microsoft for contributing to the development of this feature!&lt;/p>
&lt;h2 id="terraform-provider-improvements">Terraform provider improvements&lt;/h2>
&lt;p>The
&lt;a href="https://github.com/fluxcd/terraform-provider-flux" target="_blank">Flux Terraform provider&lt;/a> has undergone a major refactoring
and now supports air-gapped bootstrap, drift detection and correction for Flux components, and the ability to
upgrade and restore the Flux controllers in-cluster. Starting with this release, the provider is fully
compatible with OpenTofu.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/fluxcd/terraform-provider-flux?tab=readme-ov-file#guides" target="_blank">provider documentation&lt;/a>
has been updated with examples and detailed usage instructions.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">New maintainer&lt;/h4>
We are very happy to announce that
&lt;a href="https://github.com/swade1987" target="_blank">Steven Wade&lt;/a> has joined the Flux project
as a maintainer of the Terraform provider. Steven has been a long-time contributor to the Flux project
and we are excited to have him on board!
&lt;/div>
&lt;h2 id="controllers-improvements">Controllers improvements&lt;/h2>
&lt;ul>
&lt;li>The Flux &lt;code>Kustomization&lt;/code> API gains two optional fields &lt;code>.spec.namePrefix&lt;/code> and &lt;code>.spec.nameSuffix&lt;/code>
that can be used to specify a prefix and suffix to be added to the names of all managed resources.&lt;/li>
&lt;li>The kustomize-controller now supports the &lt;code>--feature-gates=StrictPostBuildSubstitutions=true&lt;/code>
flag, when enabled the post-build substitutions will fail if a variable without a default value is
declared in files but is missing from the input vars.&lt;/li>
&lt;li>The notification-controller &lt;code>Receiver&lt;/code> API has been extended to support
&lt;a href="https://fluxcd.io/flux/components/notification/receivers/#cdevents">CDEvents&lt;/a>.&lt;/li>
&lt;li>The &lt;code>OCIRepository&lt;/code> API has been extended with support for
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#semverfilter-example">semver filtering&lt;/a>.&lt;/li>
&lt;li>The &lt;code>HelmChart&lt;/code> API v1 comes with a new optional field
&lt;a href="https://fluxcd.io/flux/components/source//helmcharts/#ignore-missing-values-files">&lt;code>.spec.ignoreMissingValuesFiles&lt;/code>&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="cli-improvements">CLI improvements&lt;/h2>
&lt;ul>
&lt;li>The bootstrap capabilities have been extended to support
&lt;a href="https://fluxcd.io/flux/installation/bootstrap/oracle-vbs-git-repositories/">Oracle VBS&lt;/a> repositories.&lt;/li>
&lt;li>The bootstrap procedure for
&lt;a href="https://fluxcd.io/flux/installation/bootstrap/azure-devops/#bootstrap-using-ssh-keys">Azure DevOps&lt;/a> repositories has been update with support for SSH RSA SHA-2 keys.&lt;/li>
&lt;li>The &lt;code>flux bootstrap&lt;/code> command gains a new flag &lt;code>--ssh-hostkey-algos&lt;/code> that can be used to specify the host key algorithms to be used for SSH connections.&lt;/li>
&lt;li>The &lt;code>flux bootstrap&lt;/code> and &lt;code>flux install&lt;/code> commands now support the &lt;code>--registry-creds&lt;/code> flag that can be used for generating an image pull secret for container images stored in private registries.&lt;/li>
&lt;li>A new command was added, &lt;code>flux envsubst&lt;/code> that can be used to replicate the behavior of the Flux &lt;code>Kustomization&lt;/code> post-build substitutions.&lt;/li>
&lt;li>The &lt;code>flux create source oci&lt;/code> command now supports the &lt;code>--verify-subject&lt;/code> and &lt;code>--verify-issuer&lt;/code> for cosign keyless verification.&lt;/li>
&lt;li>New commands were added for managing HelmChart objects: &lt;code>flux create|delete|export source chart&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="breaking-changes-and-deprecations">Breaking changes and deprecations&lt;/h2>
&lt;p>Deprecated fields have been removed from the &lt;code>HelmRelease&lt;/code> v2 API:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.spec.chart.spec.valuesFile&lt;/code> replaced by &lt;code>.spec.chart.spec.valuesFiles&lt;/code>&lt;/li>
&lt;li>&lt;code>.spec.postRenderers.kustomize.patchesJson6902&lt;/code> replaced by &lt;code>.spec.postRenderers.kustomize.patches&lt;/code>&lt;/li>
&lt;li>&lt;code>.spec.postRenderers.kustomize.patchesStrategicMerge&lt;/code> replaced by &lt;code>.spec.postRenderers.kustomize.patches&lt;/code>&lt;/li>
&lt;li>&lt;code>.status.lastAppliedRevision&lt;/code> replaced by &lt;code>.status.history.chartVersion&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The following APIs have been deprecated and will be removed in a future release:&lt;/p>
&lt;ul>
&lt;li>&lt;code>HelmRelease&lt;/code> v2beta2 and v2beta1&lt;/li>
&lt;li>&lt;code>HelmChart&lt;/code> v1beta2 and v1beta1&lt;/li>
&lt;li>&lt;code>HelmRepository&lt;/code> v1beta2 and v1beta1&lt;/li>
&lt;li>&lt;code>ImageUpdateAutomation&lt;/code> v1beta1&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported versions&lt;/h2>
&lt;p>Flux v2.0 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.3 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.28, 1.29, 1.30&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.15&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Flux v2.3 is the first release end-to-end tested on OpenShift. Big thanks to
&lt;a href="https://www.replicated.com/" target="_blank">Replicated&lt;/a> for sponsoring the Flux project
with on-demand OpenShift clusters. For more information on how to bootstrap Flux on OpenShift,
see the
&lt;a href="https://fluxcd.io/flux/installation/configuration/openshift/">OpenShift installation guide&lt;/a>.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Enterprise support&lt;/h4>
&lt;p>Note that the CNCF Flux project offers support only for the latest
three minor versions of Kubernetes.&lt;/p>
&lt;p>Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors
such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide
enterprise support for Flux.&lt;/p>
&lt;/div>
&lt;h2 id="installing-or-upgrading-flux">Installing or upgrading Flux&lt;/h2>
&lt;p>To install Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/installation/" target="_blank">installation&lt;/a> and
&lt;a href="https://fluxcd.io/flux/get-started/" target="_blank">get started&lt;/a> guides.&lt;/p>
&lt;p>To upgrade Flux from &lt;code>v2.x&lt;/code> to &lt;code>v2.3.0&lt;/code>, either
&lt;a href="https://fluxcd.io/flux/installation/#bootstrap-upgrade" target="_blank">rerun &lt;code>flux bootstrap&lt;/code>&lt;/a>
or use the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>To upgrade the APIs in the manifests stored in Git:&lt;/p>
&lt;ol>
&lt;li>Before upgrading, ensure that the &lt;code>HelmRelease&lt;/code> v2beta2 YAML manifests
are not using deprecated fields. Search for &lt;code>valuesFile&lt;/code> and replace it with &lt;code>valuesFiles&lt;/code>,
replace &lt;code>patchesJson6902&lt;/code> and &lt;code>patchesStrategicMerge&lt;/code> with &lt;code>patches&lt;/code>.&lt;/li>
&lt;li>Commit and push the changes to the Git repository, then wait for Flux to reconcile the changes.&lt;/li>
&lt;li>Upgrade the controllers and CRDs on the cluster using Flux v2.3 release.&lt;/li>
&lt;li>Update the &lt;code>apiVersion&lt;/code> field of the &lt;code>HelmRelease&lt;/code> resources to &lt;code>helm.toolkit.fluxcd.io/v2&lt;/code>.&lt;/li>
&lt;li>Update the &lt;code>apiVersion&lt;/code> field of the &lt;code>HelmRepository&lt;/code> resources to &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>.&lt;/li>
&lt;li>Update the &lt;code>apiVersion&lt;/code> field of the &lt;code>ImageUpdateAutomation&lt;/code> resources to &lt;code>image.toolkit.fluxcd.io/v1beta2&lt;/code>.&lt;/li>
&lt;li>Commit and push the changes to the Git repository.&lt;/li>
&lt;/ol>
&lt;p>Bumping the APIs version in manifests can be done gradually.
It is advised to not delay this procedure as the deprecated versions will be removed after 6 months.&lt;/p>
&lt;h2 id="whats-next-for-flux">What&amp;rsquo;s next for Flux?&lt;/h2>
&lt;p>The next milestone for the Flux project is v2.4, which is planned for Q3 2024
and will focus on the image automation APIs and S3-compatible storage APIs.
For more details on the upcoming features and improvements, see the
&lt;a href="https://fluxcd.io/roadmap/">Flux project roadmap&lt;/a>.&lt;/p>
&lt;p>After the introduction of OCI Artifacts in 2022, we had a recurring ask from users about improving
the UX of running Flux fully decoupled from Git. In response, we made a proposal for a
&lt;code>flux bootstrap oci&lt;/code> command and a new Terraform/OpenTofu provider that relies on
container registries as the unified data storage for the desired state of Kubernetes clusters.
The RFC can be found at
&lt;a href="https://github.com/fluxcd/flux2/pull/4749" target="_blank">fluxcd/flux2#4749&lt;/a> and we
welcome feedback from the community.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Flux project gains New Corporate Support and Ecosystem in 2024</title><link>https://fluxcd.io/blog/2024/03/flux-project-gains-new-corporate-support-and-ecosystem-in-2024/</link><pubDate>Tue, 19 Mar 2024 08:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2024/03/flux-project-gains-new-corporate-support-and-ecosystem-in-2024/</guid><description>
&lt;p>The CNCF graduated Flux project is proud to announce that it will receive
enhanced support from dedicated companies in 2024.
These organizations are committed to the ongoing maintenance
and development of Flux GitOps tools.
&lt;a href="https://fluxcd.io/kubecon/" target="_blank">At KubeCon EU 2024 in Paris, the Flux project has keynote highlights, sessions, and a booth.&lt;/a>&lt;/p>
&lt;h2 id="vendors-and-clouds-are-stepping-up-contributions">Vendors and clouds are stepping up contributions&lt;/h2>
&lt;p>Major vendors are ramping up their ecosystem involvement in Flux moving forward.
&lt;a href="https://about.gitlab.com/blog/2024/03/05/the-continued-support-of-fluxcd-at-gitlab/" target="_blank">GitLab announced its continued support for Flux&lt;/a> and working with partners.
In early 2023, GitLab integrated Flux with its agent for Kubernetes offering as the recommended GitOps solution.&lt;/p>
&lt;p>Similarly, Flux continues to be the GitOps engine for cloud vendors such as Microsoft and AWS.
Lachie Evenson at Microsoft affirms that &amp;ldquo;Flux is the engine that powers several GitOps
experiences on Azure as well as in our customer’s environments&amp;rsquo; and that Microsoft
is committed to upstream contributions.&lt;/p>
&lt;blockquote>
&lt;p>Flux is the engine that powers several GitOps experiences on Azure
as well as in our customer’s environments. We will continue to invest
in Flux through upstream contributions for the long-term health and
support of the project, and downstream partnerships to help customers&lt;/p>
&lt;p>Lachie Evenson, Principal PDM Manager – Cloud Native Ecosystem, Microsoft&lt;/p>
&lt;/blockquote>
&lt;p>Both Azure and AWS use Flux to streamline
Kubernetes cluster and application management, adopting GitOps principles
for enhanced automation, security, and reliability in cloud-native application
deployments for Azure Arc Kubernetes and EKS-Anywhere.&lt;/p>
&lt;h2 id="new-enterprise-adopters-silva-project-cisco-tchibo-and-more">New Enterprise adopters: Silva project, Cisco, Tchibo, and more&lt;/h2>
&lt;p>Flux’s significant benefits show in its widespread adoption by large-scale
enterprises across various sectors, including telecommunications and financial services.
The new Sylva project showcases
&lt;a href="https://sylva-projects.gitlab.io/release-note/" target="_blank">the critical role of Flux for its complex telecom cloud native environments&lt;/a>.
Sylva streamlines the management of Kubernetes workload clusters, specifically designed
to deploy Containerized Network Functions (CNF) provided by both external CNF vendors
and telecom operators&amp;rsquo; in-house services. As Orange VP of Software Engineering affirms,
Flux’s security, modularity, resilience, and community all contribute to how it is the GitOps framework of choice.&lt;/p>
&lt;blockquote>
&lt;p>We are really happy to observe new big tech shops bringing their support to Flux.
It should give to everyone the confidence to keep committing and investing.
The level of quality and security, and the modularity of Flux have been prime
reasons for our decision to use it two years ago to automate the deployment
and lifecycle management of network functions. Our Linux Foundation Sylva-based
cloud native infrastructure relies on the strength and resilience of the Flux community.
Flux’s technology and community make it the GitOps framework in our Telco networks.&lt;/p>
&lt;p>Philippe Ensarguet, VP Software Engineering, Orange&lt;/p>
&lt;/blockquote>
&lt;p>Other long-time Flux
&lt;a href="https://fluxcd.io/adopters/" target="_blank">adopters&lt;/a> who have added themselves to the public
list recently include Cisco and German retailer, Tchibo.&lt;/p>
&lt;h2 id="new-support-and-ecosystem-hirings-and-value-add-extensions">New Support and Ecosystem: Hirings and Value-Add Extensions&lt;/h2>
&lt;p>While several ecosystem companies are coordinating to step up as maintainers,
contributors, and supporters of Flux,
&lt;a href="https://control-plane.io/posts/controlplane-backs-the-cncf-flux-project-by-employing-maintainers/" target="_blank">ControlPlane was first to hire Stefan Prodan&lt;/a> (Flux project maintainer and architect as well as Flagger creator)
and Soulé Ba (core maintainer) to continue their contributions.
As ControlPlane CEO, Andrew Martin, has reinforced their commitment to help maintain the project,
which is part of their offering of an enterprise-grade distribution of Flux,
including support services for critical system.&lt;/p>
&lt;blockquote>
&lt;p>ControlPlane is delighted to continue supporting the Flux project for all users,
and to provide organisations utilising Flux with access to a hardened,
FIPS-compliant, enterprise-grade distribution of Flux.&lt;/p>
&lt;p>Andrew Martin, CEO, ControlPlane&lt;/p>
&lt;/blockquote>
&lt;p>In addition, companies such as Aviator, OpsMX, OpsWorks Group,
OSO and Teracloud began providing support for Flux among their offerings.&lt;/p>
&lt;p>At KubeCon EU 2024 in Paris, these and other companies in the ecosystem
will meet at a
&lt;a href="https://kccnceu2024.sched.com/event/1akzm?iframe=no" target="_blank">Birds of a Feather meeting&lt;/a>
to kick off further commitments
to add value to Flux’s extensibility and ecosystem reach.&lt;/p>
&lt;h2 id="cloud-native-computing-foundation-exemplar-project">Cloud Native Computing Foundation Exemplar Project&lt;/h2>
&lt;p>At this juncture, the Flux project is a strong graduated project within the
Cloud Native Computing Foundation with continued recognition from CNCF CTO,
Chris Aniszczyk, who states how Flux exemplifies the strength and resilience of the community.
Flux reached General Availability in December 2023 and blew through its
second security audit with the CNCF with no CVEs.
The project’s published
&lt;a href="https://fluxcd.io/blog/2023/12/flux-v2.2.0/#benchmark-results" target="_blank">benchmarks&lt;/a>
results demonstrate why cloud vendors
and enterprises alike have been trusting Flux with their needs for scale.&lt;/p>
&lt;blockquote>
&lt;p>I am glad to see the continued support across the open source cloud native community for Flux.
I encourage other organizations to get involved as there&amp;rsquo;s never a bad time to contribute
to an open source project you depend on. Also, this is a great example of the strength
and resilience of our community and we look forward to Flux&amp;rsquo;s continued evolution and growth.&lt;/p>
&lt;p>Chris Aniszczyk, CTO, CNCF&lt;/p>
&lt;/blockquote>
&lt;p>If you’re at KubeCon in Paris this week, visit the
&lt;a href="https://fluxcd.io/kubecon/" target="_blank">Flux project booth and the many sessions,&lt;/a>
including Stefan’s maintainer talk on the
&lt;a href="https://github.com/fluxcd/flux2/discussions/4663" target="_blank">Flux roadmap&lt;/a> at the event.&lt;/p></description></item><item><title>Blog: Introducing Capacitor, a general purpose UI for Flux</title><link>https://fluxcd.io/blog/2024/02/introducing-capacitor/</link><pubDate>Tue, 27 Feb 2024 18:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2024/02/introducing-capacitor/</guid><description>
&lt;!--
Have a look at these documents
- internal_docs/how-to-do-the-monthly-update.md
online: https://github.com/fluxcd/website/blob/main/internal_docs/how-to-do-the-monthly-update.md
- internal_docs/how-to-write-a-blog-post.md
online: https://github.com/fluxcd/website/blob/main/internal_docs/how-to-write-a-blog-post.md
to get more background on how to publish this blog post.
-->
&lt;p>Flux has been one of the most popular gitops tools available for years. Yet, it only existed as a CLI tool until now. Capacitor is a GUI that acts as a dashboard for Flux where you can get quick overview about your Flux resources and application deployments to debug issues quickly.&lt;/p>
&lt;p>&lt;img src="images/capacitor.png" alt="Capacitor, a general purpose UI for Flux">&lt;/p>
&lt;h2 id="a-word-from-laszlo-the-maintainer-of-capacitor">A word from Laszlo, the maintainer of Capacitor&lt;/h2>
&lt;blockquote>
&lt;p>“Hello Flux blog,&lt;/p>
&lt;p>Long time Flux user here, although I haven&amp;rsquo;t been very active in the community so far. The maintainers have been doing an amazing job with Flux. We’re standing on the shoulders of giants 🙌.&lt;/p>
&lt;p>There is an odd fact though: there was no de facto Flux GUI until now. How come?
I thought we could make one, hence we made Capacitor.&lt;/p>
&lt;p>Why?
Because it is not easy to observe Kustomization and HelmRelease states in the cluster. Even with tools that show Custom Resources, it is not obvious to make the connection between application deployments and Flux resources.&lt;/p>
&lt;p>The goal with Capacitor is to create the right context for developers to debug their deployments. Whether the error is related to Flux or not.&lt;/p>
&lt;p>We hope you’re going to find the tool useful.”&lt;/p>
&lt;/blockquote>
&lt;h2 id="use-cases">Use cases&lt;/h2>
&lt;h3 id="commandless-flux-observation">Commandless Flux observation&lt;/h3>
&lt;p>The GUI substitutes for interacting with Flux resources and runtime via flux CLI commands.&lt;/p>
&lt;p>&lt;img src="images/capacitor-flux-resources.png" alt="Flux resources in the footer">&lt;/p>
&lt;h3 id="connecting-application-deployments-with-flux-resources">Connecting application deployments with Flux resources&lt;/h3>
&lt;p>Application deployments show which Flux Kustomization or HelmRelease deployed them.&lt;/p>
&lt;p>With a click of a button you can jump to the Flux resource and check the reconsiliation state.&lt;/p>
&lt;p>&lt;img src="images/click2.gif" alt="Clicking references">&lt;/p>
&lt;h3 id="application-deployment-debugging">Application deployment debugging&lt;/h3>
&lt;p>Application deployments have controls to perform routine tasks, like checking logs, describing deployments, pods, configmaps.&lt;/p>
&lt;p>With these controls Capacitor can become your daily driver for your Kubernetes dashboarding needs.&lt;/p>
&lt;p>&lt;img src="images/servicecard.png" alt="Application deployment controls">&lt;/p>
&lt;p>&lt;img src="images/application-logs.png" alt="Application logs">&lt;/p>
&lt;h2 id="whats-supported">What’s supported?&lt;/h2>
&lt;p>Flux resources:&lt;/p>
&lt;ul>
&lt;li>Kustomization&lt;/li>
&lt;li>HelmRelease&lt;/li>
&lt;li>GitRepository&lt;/li>
&lt;li>OCIRepositories&lt;/li>
&lt;li>Buckets&lt;/li>
&lt;/ul>
&lt;p>Kubernetes resources:&lt;/p>
&lt;ul>
&lt;li>Deployment&lt;/li>
&lt;li>Pod&lt;/li>
&lt;li>Service&lt;/li>
&lt;li>Ingress&lt;/li>
&lt;li>Configmap&lt;/li>
&lt;li>Secret&lt;/li>
&lt;/ul>
&lt;h2 id="who-made-capacitor">Who made Capacitor?&lt;/h2>
&lt;p>Capacitor is an open-source project backed by
&lt;a href="https://gimlet.io" target="_blank">Gimlet&lt;/a>, a team that creates a Flux-based IDP.&lt;/p>
&lt;p>Gimlet is our opinionated project, Capacitor is our un-opinionated take.&lt;/p>
&lt;h2 id="how-to-get-started">How to get started?&lt;/h2>
&lt;p>Capacitor doesn’t come with Flux natively, you’ll need to set it up separately.&lt;/p>
&lt;p>Deploy the latest Capacitor release in the flux-system namespace by adding the following manifests to your Flux repository:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capacitor&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>12h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://ghcr.io/gimlet-io/capacitor-manifests&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;&amp;gt;=0.1.0&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capacitor&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">targetNamespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>1h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>2m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">wait&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;./&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>capacitor&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that Flux will check for Capacitor releases every 12 hours and will automatically deploy the new version if it is available.&lt;/p>
&lt;p>Access Capacitor UI with port-forwarding:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n flux-system port-forward svc/capacitor 9000:9000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="where-is-the-project-hosted">Where is the project hosted?&lt;/h2>
&lt;p>It is hosted on Github:
&lt;a href="https://github.com/gimlet-io/capacitor" target="_blank">gimlet-io/capacitor&lt;/a>&lt;/p></description></item><item><title>Blog: Announcing Flux 2.2 GA</title><link>https://fluxcd.io/blog/2023/12/flux-v2.2.0/</link><pubDate>Tue, 12 Dec 2023 15:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/12/flux-v2.2.0/</guid><description>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.2.0" target="_blank">Flux v2.2.0&lt;/a>! In this post, we will highlight some of the new features and improvements included in this release, with the primary theme being the many changes made to the
&lt;a href="https://fluxcd.io/flux/components/helm/" target="_blank">helm-controller&lt;/a>.&lt;/p>
&lt;p>This new release will also be demoed by Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi and Max Werner on Monday, December 18. To attend this demo and ask any questions,
&lt;a href="https://www.meetup.com/weave-user-group/events/297818586/" target="_blank">you can register here&lt;/a>.&lt;/p>
&lt;h2 id="important-things-first-api-changes">Important things first: API changes&lt;/h2>
&lt;p>This release is accompanied by a series of (backwards compatible) API changes and introductions. Please refer to the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.2.0" target="_blank">release notes&lt;/a> for a comprehensive list, and make sure to read them before updating your Flux installation.&lt;/p>
&lt;h2 id="enhanced-helmrelease-reconciliation-model">Enhanced &lt;code>HelmRelease&lt;/code> reconciliation model&lt;/h2>
&lt;p>The reconciliation model of the helm-controller has been rewritten to be able to better determine the state a Helm release is in, to then decide what Helm action should be performed to reach the desired state.&lt;/p>
&lt;p>Effectively, this means that the controller is now capable of continuing where it left off, and to run
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#test-configuration" target="_blank">Helm tests&lt;/a> as soon as they are enabled without a Helm upgrade having to take place first.&lt;/p>
&lt;p>In addition, it now takes note of releases &lt;em>while they are happening&lt;/em>, instead of making observations &lt;em>afterward&lt;/em>. Ensuring that when performing a rollback remediation, the version we revert to is always exactly the same as the one previously released by the controller. In cases where it is uncertain about state, it will always decide to (reattempt to) perform a Helm upgrade.&lt;/p>
&lt;p>This also allows it with certainty to only count release attempts that did cause a mutation to the Helm storage as failures towards retry attempts, improving continuity due to it retrying instantly instead of remediating first.&lt;/p>
&lt;h2 id="improved-observability-of-helm-releases">Improved observability of Helm releases&lt;/h2>
&lt;p>An additional thing the enhanced reconciliation model allowed us to work on is making improvements to how we report state back to you, as a user.&lt;/p>
&lt;p>The improvements range from the introduction of &lt;code>Reconciling&lt;/code> and &lt;code>Stalled&lt;/code> Condition types to become
&lt;a href="https://github.com/kubernetes-sigs/cli-utils/tree/master/pkg/kstatus" target="_blank">&lt;code>kstatus&lt;/code> compatible&lt;/a>, to an enriched overview of Helm releases up to the previous successful release in the Status, and more informative Kubernetes Event and Condition messages.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-console" data-lang="console">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">Events:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type Reason Age From Message
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> ---- ------ ---- ---- -------
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal HelmChartCreated 25s helm-controller Created HelmChart/demo/demo-podinfo with SourceRef &amp;#39;HelmRepository/demo/podinfo&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal InstallSucceeded 20s helm-controller Helm install succeeded for release demo/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal TestSucceeded 12s helm-controller Helm test succeeded for release demo/podinfo.v1 with chart podinfo@6.5.3: 3 test hooks completed successfully
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details around these changes, refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#helmrelease-status" target="_blank">Status section&lt;/a> in the HelmRelease v2beta2 specification.&lt;/p>
&lt;h2 id="recovery-from-pending--helm-release-state">Recovery from &lt;code>pending-*&lt;/code> Helm release state&lt;/h2>
&lt;p>A much-reported issue was the helm-controller being unable to recover from &lt;code>another operation (install/upgrade/rollback) is in progress&lt;/code> errors, which could occur when the controller Pod was forcefully killed. From this release on, the controller will recover from such errors by unlocking the Helm release from a &lt;code>pending-*&lt;/code> to a &lt;code>failed&lt;/code> state, and retrying it with a Helm upgrade.&lt;/p>
&lt;h2 id="helm-release-drift-detection-and-correction">Helm Release drift detection and correction&lt;/h2>
&lt;p>Around April we launched cluster state drift detection and correction for Helm releases as an experimental feature. At that time, it could only be enabled using a controller global feature flag, making it impractical to use at scale due to the wide variability in charts and unpredictability of the effects on some Helm charts.&lt;/p>
&lt;p>For charts with lifecycle hooks, or cluster resources like Horizontal/Vertical Pod Autoscalers for which controllers may write updates back into their own spec, those updates would always be considered as drift by the helm-controller unless the resource would be ignored in full.&lt;/p>
&lt;p>To address the above pain points, Helm drift detection can now be enabled on the &lt;code>HelmRelease&lt;/code> itself, while also allowing you to ignore specific fields using
&lt;a href="https://datatracker.ietf.org/doc/html/rfc6901" target="_blank">JSON Pointers&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignore&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">paths&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;/spec/replicas&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using these settings, any drift detected will now be corrected by recreating and patching the Kubernetes objects (instead of doing a Helm upgrade) while changes to the &lt;code>.spec.replicas&lt;/code> fields for Deployments will be ignored.&lt;/p>
&lt;p>For more information, refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#drift-detection" target="_blank">drift detection section&lt;/a> in the HelmRelease v2beta2 specifiation.&lt;/p>
&lt;h2 id="forcing-and-retrying-helm-releases">Forcing and retrying Helm releases&lt;/h2>
&lt;p>Another much-reported issue was the impractical steps one had to take to recover from &amp;ldquo;retries exhausted&amp;rdquo; errors. To instruct the helm-controller to retry installing or upgrading a Helm release when it is out of retries, you can now either:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Instruct it to reset the failure counts, allowing it to retry the number of times as configured in the remediation strategy&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;release&amp;gt; --reset
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Instruct it to force a one-off Helm install or upgrade&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;release&amp;gt; --force
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>For in-depth explanations about these new command options, refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#resetting-remediation-retries" target="_blank">&amp;ldquo;resetting remediation retries&amp;rdquo;&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#forcing-a-release" target="_blank">&amp;ldquo;forcing a release&amp;rdquo;&lt;/a> sections in the HelmRelease v2beta2 specification.&lt;/p>
&lt;h2 id="benchmark-results">Benchmark results&lt;/h2>
&lt;p>To measure the real world impact of the helm-controller overhaul, we have set up benchmarks that measure Mean Time To Production (MTTP). The MTTP benchmark measures the time it takes for Flux to deploy application changes into production. Below are the results of the benchmark that ran on a GitHub hosted runner (Ubuntu, 16 cores):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Objects&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Flux component&lt;/th>
&lt;th>Duration&lt;/th>
&lt;th>Max Memory&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>OCIRepository&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>25s&lt;/td>
&lt;td>38Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>Kustomization&lt;/td>
&lt;td>kustomize-controller&lt;/td>
&lt;td>27s&lt;/td>
&lt;td>32Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>25s&lt;/td>
&lt;td>40Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>31s&lt;/td>
&lt;td>140Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>OCIRepository&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>45s&lt;/td>
&lt;td>65Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>Kustomization&lt;/td>
&lt;td>kustomize-controller&lt;/td>
&lt;td>2m2s&lt;/td>
&lt;td>72Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>45s&lt;/td>
&lt;td>68Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>2m55s&lt;/td>
&lt;td>350Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>OCIRepository&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>1m30s&lt;/td>
&lt;td>67Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>Kustomization&lt;/td>
&lt;td>kustomize-controller&lt;/td>
&lt;td>4m15s&lt;/td>
&lt;td>112Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>1m30s&lt;/td>
&lt;td>110Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>8m2s&lt;/td>
&lt;td>620Mi&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>The benchmark uses a single application (
&lt;a href="https://github.com/stefanprodan/podinfo" target="_blank">podinfo&lt;/a>) for all tests with intervals set to &lt;code>60m&lt;/code>. The results may change when deploying Flux objects with a different configuration.&lt;/p>
&lt;/blockquote>
&lt;p>For more information about the benchmark setup and how you can run them on your machine, check out the
&lt;a href="https://github.com/fluxcd/flux-benchmark" target="_blank">fluxcd/flux-benchmark&lt;/a> repository.&lt;/p>
&lt;h2 id="breaking-changes-to-kustomizations">Breaking changes to Kustomizations&lt;/h2>
&lt;p>All Flux components have been updated from Kustomize v5.0.3 to
&lt;a href="https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.3.0" target="_blank">v5.3.0&lt;/a>.&lt;/p>
&lt;p>You should be aware that this update comes with a breaking change in Kustomize, as components are now applied after generators. If you use Kustomize components or &lt;code>.spec.components&lt;/code> in Kustomizations along with generators, then please make necessary changes before upgrading to avoid any undesirable behavior. For more information, see the relevant
&lt;a href="https://github.com/kubernetes-sigs/kustomize/issues/5141" target="_blank">Kustomize issue&lt;/a>.&lt;/p>
&lt;h2 id="other-notable-changes">Other notable changes&lt;/h2>
&lt;ul>
&lt;li>&lt;code>flux install&lt;/code> and &lt;code>flux bootstrap&lt;/code> now have guardrails to protect users from destructive operations.&lt;/li>
&lt;li>Gitea support has been added to &lt;code>flux bootstrap&lt;/code>. To bootstrap Flux onto a cluster using Gitea as the Git provider, run &lt;code>flux bootstrap gitea --repository &amp;lt;repo&amp;gt; --owner &amp;lt;owner&amp;gt;&lt;/code>.&lt;/li>
&lt;li>The OIDC issuer and identity subject can now be verified for images signed using Cosign. Refer to the
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/#keyless-verification" target="_blank">HelmChart&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#keyless-verification" target="_blank">OCIRepository&lt;/a> specifications for more information.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/buckets/#prefix" target="_blank">Prefix based file filtering&lt;/a> support has been added to the Bucket API for &lt;code>generic&lt;/code>, &lt;code>aws&lt;/code> and &lt;code>gcp&lt;/code> providers.&lt;/li>
&lt;li>Support for insecure (non-TLS HTTP) container registries has been added to the
&lt;a href="https://fluxcd.io/flux/components/image/imagerepositories/#insecure" target="_blank">ImageRepository&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/#insecure" target="_blank">HelmRepository&lt;/a> APIs.&lt;/li>
&lt;li>The Flux alerting capabilities have been extended with
&lt;a href="https://fluxcd.io/flux/components/notification/provider/#nats" target="_blank">NATS&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/#bitbucket-serverdata-center" target="_blank">Bitbucket Server &amp;amp; Data Center&lt;/a> support.&lt;/li>
&lt;/ul>
&lt;h2 id="installing-or-upgrading-flux">Installing or upgrading Flux&lt;/h2>
&lt;p>To install Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/installation/" target="_blank">installation&lt;/a> and
&lt;a href="https://fluxcd.io/flux/get-started/" target="_blank">get started&lt;/a> guides.&lt;/p>
&lt;p>To upgrade Flux from &lt;code>v2.x&lt;/code> to &lt;code>v2.2.0&lt;/code>, either
&lt;a href="https://fluxcd.io/flux/installation/#bootstrap-upgrade" target="_blank">rerun &lt;code>flux bootstrap&lt;/code>&lt;/a> or use the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>To upgrade the APIs, make sure the new Custom Resource Definitions and controllers are deployed, and then change the manifests in Git:&lt;/p>
&lt;ol>
&lt;li>Set &lt;code>apiVersion: helm.toolkit.fluxcd.io/v2beta2&lt;/code> in the YAML files that contain &lt;code>HelmRelease&lt;/code> definitions.&lt;/li>
&lt;li>Set &lt;code>apiVersion: notification.toolkit.fluxcd.io/v1beta3&lt;/code> in the YAML files that contain &lt;code>Alert&lt;/code> and &lt;code>Provider&lt;/code> definitions.&lt;/li>
&lt;li>Commit, push and reconcile the API version changes.&lt;/li>
&lt;/ol>
&lt;p>Bumping the APIs version in manifests can be done gradually. It is advised to not delay this procedure as the deprecated versions will be removed after 6 months.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved. Here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Second Flux Security Audit has concluded</title><link>https://fluxcd.io/blog/2023/11/flux-security-audit/</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/11/flux-security-audit/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/11/flux-security-audit/featured-image_hudd23c93a0b637265205ddee09c3d9da3_82354_640x0_resize_box_3.png" width="640" height="185"/>
&lt;p>Precisely 2 years after
&lt;a href="https://fluxcd.io/blog/2021/11/flux-security-audit/">performing our first security Audit&lt;/a>,
we had the chance to put Flux through a second audit this year, again
facilitated by the CNCF and the
&lt;a href="https://ostif.org/" target="_blank">Open Source Technology Improvement Fund&lt;/a>.
&lt;a href="https://www.trailofbits.com/" target="_blank">Trail of Bits&lt;/a> partnered with us this time
to make Flux even more secure. Flux passed the &amp;ldquo;General Availability&amp;rdquo;
milestone earlier this year and the focus was on the features shipped in
the Flux GA release.&lt;/p>
&lt;p>The Flux maintainers and community are very grateful for the work put
into this by everyone and the opportunity to grow and improve as a
project. Thanks to Trail of Bits, notably Maciej Domański, Sam Alws, Sam Greenup and Jeff Braswell, who have always been extremely responsive during the process.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="TOB, CNCF, OSTIF">&lt;/p>
&lt;h2 id="no-new-cves">No new CVEs&lt;/h2>
&lt;p>Good news first: No new CVEs have been published for Flux in response to
this second audit. Trail of Bits highlight that they found Flux was &amp;ldquo;well
structured and generally written defensively&amp;rdquo; and the &amp;ldquo;audit uncovered
only low- and informational-severity findings&amp;rdquo;, 10 in total. 8 of the
discovered issues have been fixed as of publication of this announcement. From the remaining two issues to be fixed, one is in the process of being resolved and for the other one we have decided to accept the very low risk due to reasons mentioned in the report.&lt;/p>
&lt;p>The assessment was kicked off with a list of 23 questions to be answered,
circling around potential data leaks, security documentation, access
control or denial of service vulnerabilities. Since the focus was on the
GA components, the following parts of Flux have been put under scrutiny:&lt;/p>
&lt;ul>
&lt;li>source-controller&lt;/li>
&lt;li>kustomize-controller&lt;/li>
&lt;li>notification-controller&lt;/li>
&lt;li>Flux CLI&lt;/li>
&lt;li>The &lt;code>pkg&lt;/code> library, and &lt;code>git/gogit/fs&lt;/code> in particular&lt;/li>
&lt;/ul>
&lt;h2 id="details-on-the-discovered-issues">Details on the discovered issues&lt;/h2>
&lt;p>You will find the full report
&lt;a href="https://fluxcd.io/flux-security-report-with-review-2023.pdf">here&lt;/a>. The following table shows all the findings together with links to the pull requests fixing them:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Issue&lt;/th>
&lt;th>Severity&lt;/th>
&lt;th>Fix&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1: SetExpiration does not set the expiration for the given key&lt;/td>
&lt;td>low&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/source-controller/pull/1185" target="_blank">source-controller#1185&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2: Inappropriate string trimming function&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/notification-controller/pull/590" target="_blank">notification-controller#590&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3: Go’s default HTTP client uses a shared value that can be modified by other components&lt;/td>
&lt;td>low&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/pull/4182" target="_blank">flux2#4182&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4: Unhandled error value&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/pull/4181" target="_blank">flux2#4181&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5: Potential implicit memory aliasing in for loops&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/source-controller/pull/1257" target="_blank">source-controller#1257&lt;/a>,
&lt;a href="https://github.com/fluxcd/notification-controller/pull/627" target="_blank">notification-controller#627&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/pull/4329" target="_blank">flux2#4329&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6: Directories created via os.MkdirAll are not checked for permissions&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>n/a&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7: Directories and files created with overly lenient permissions&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/pkg/pull/663" target="_blank">pkg#663&lt;/a>,
&lt;a href="https://github.com/fluxcd/pkg/pull/681" target="_blank">pkg#681&lt;/a>,
&lt;a href="https://github.com/fluxcd/source-controller/pull/1276" target="_blank">source-controller#1276&lt;/a>,
&lt;a href="https://github.com/fluxcd/kustomize-controller/pull/1005" target="_blank">kustomize-controller#1005&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/pull/4380" target="_blank">flux2#4380&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8: No restriction on minimum SSH RSA public key bit size&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/pull/4177" target="_blank">flux2#4177&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>9: Flux macOS release binary susceptible to dylib injection&lt;/td>
&lt;td>low&lt;/td>
&lt;td>in progress&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10: Path traversal in SecureJoin implementation&lt;/td>
&lt;td>undetermined&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/pkg/pull/650" target="_blank">pkg#650&lt;/a>,
&lt;a href="https://github.com/go-git/go-billy/pull/31" target="_blank">go-git/go-billy#31&lt;/a>,
&lt;a href="https://github.com/go-git/go-billy/pull/34" target="_blank">go-git/go-billy#34&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>In addition to the pull requests linked above we also enabled security
and quality CI checks through CodeQL via
&lt;a href="https://github.com/fluxcd/flux2/issues/4121" target="_blank">flux2#4121&lt;/a> to prevent any avoidable regressions.&lt;/p>
&lt;h2 id="conclusion-and-next-steps">Conclusion and next steps&lt;/h2>
&lt;p>From our perspective as Flux maintainers, 2 years feel like a lifetime. We added lots of new features and fixed even more bugs in that timeframe. That&amp;rsquo;s why we
are particularly grateful that CNCF and OSTIF gave us the opportunity to
let a team of security experts assess Flux another time. We are proud
of having been able to learn from the first assessment and kept on making
Flux more and more secure over these past 2 years, leading to only low-
and informational-severity security findings within the GA components of
Flux.&lt;/p>
&lt;p>Our
&lt;a href="https://fluxcd.io/roadmap/#flux-helm-ga-q3-2023" target="_blank">next milestone&lt;/a> is the general availability of Flux’s Helm features and the subsequent general availability of the remaining Flux components. If you are interested in contributing to this, we are very much looking forward to working with you. We welcome contributions in helping resolve issues of the road, additional comments on our security posture and also
welcome contributions in the form of extending our fuzzing
infrastructure. Finally, if you have any additional security feedback,
please come and talk to us.&lt;/p>
&lt;p>Again we would like to thank the Cloud Native Computing Foundation for
sponsoring the audit, the Open Source Technology Improvement Fund for
the coordination and Trail of Bits for the careful review and advice
during the audit period.&lt;/p>
&lt;p>We are happy and proud to be part of this community!&lt;/p></description></item><item><title>Blog: Announcing Flux 2.1 GA</title><link>https://fluxcd.io/blog/2023/08/flux-v2.1.0/</link><pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/08/flux-v2.1.0/</guid><description>
&lt;h2 id="new-releases">New releases&lt;/h2>
&lt;p>We are happy to announce the latest GA releases for Flux and Flagger.&lt;/p>
&lt;h3 id="flux-v210">Flux v2.1.0&lt;/h3>
&lt;p>This new release comes with lots of new features,
fixes, restructured documentation and performance improvements.
Everyone is encouraged to upgrade for the best experience.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.1.0#api-changes" target="_blank">Flux APIs&lt;/a>
were extended with new opt-in features in a backwards-compatible manner.&lt;/p>
&lt;p>The Flux Git capabilities have been improved with support for
Git push options, Git refspec, Gerrit, HTTP/S and SOCKS5 proxies.&lt;/p>
&lt;p>In case you missed it, Flux reached General Availability in June.
You can read the announcement
&lt;a href="https://fluxcd.io/blog/2023/07/flux-ga/" target="_blank">here&lt;/a>.&lt;/p>
&lt;p>You can now check the end-of-life(EOL) dates and support information for
different Flux versions at
&lt;a href="https://endoflife.date/flux" target="_blank">https://endoflife.date/flux&lt;/a>.&lt;/p>
&lt;h4 id="features">Features&lt;/h4>
&lt;ul>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#proxy-secret-reference" target="_blank">GitRepository API&lt;/a>
has a new field &lt;code>.spec.proxySecretRef&lt;/code> that is used for specifying proxy configuration to use
for all remote Git operations related to the particular object.&lt;/li>
&lt;li>The&lt;code>.spec.verify.mode&lt;/code> field of the
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#verification" target="_blank">GitRepository API&lt;/a>
now accepts one of the following values &lt;code>HEAD&lt;/code>, &lt;code>Tag&lt;/code>, &lt;code>TagAndHEAD&lt;/code>. These values are used to specify
how the Git tags and commits are verified.&lt;/li>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#controlling-the-apply-behavior-of-resources" target="_blank">server-side apply behaviour&lt;/a>
in the kustomize-controller has been extended with two extra policies:
&lt;code>IfNotPresent&lt;/code> and &lt;code>Ignore&lt;/code>. These policies are specified with the &lt;code>kustomize.toolkit.fluxcd.io/ssa&lt;/code>
annotation on the resource manifest. The &lt;code>IfNotPresent&lt;/code> policy is useful to have Flux create an object
that will later be managed by another controller.&lt;/li>
&lt;li>Support for sending notifications to
&lt;a href="https://fluxcd.io/flux/components/notification/providers/#datadog" target="_blank">DataDog&lt;/a>.&lt;/li>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/image/imageupdateautomations/#push" target="_blank">ImageUpdateAutomation API&lt;/a> has two
new optional fields - &lt;code>.spec.git.push.refspec&lt;/code> and &lt;code>.spec.git.push.options&lt;/code> for to specify a refspec and push
options that will be used when pushing commits upstream.&lt;/li>
&lt;/ul>
&lt;h4 id="fixes-and-improvements">Fixes and improvements&lt;/h4>
&lt;p>Here is a short list of features and improvements in this release:&lt;/p>
&lt;ul>
&lt;li>A new flag &lt;code>--concurrent-ssa&lt;/code> has been introduced in the kustomize-controller to set the number of concurrent
server-side operations that will be performed by the controller per object. This increases speed when
reconciling Kustomization with a considerable amount of objects.&lt;/li>
&lt;li>Performance improvement when loading helm repositories with large indexes (up to 80% memory reduction).&lt;/li>
&lt;li>The load distribution has been improved when reconciling Flux objects in parallel to reduce CPU and memory spikes.&lt;/li>
&lt;li>The Installation and Monitoring sections of the Flux documentation have been restructured to make navigation
and locating guides easier. We are always open to receiving feedback on how we can improve the documentation.&lt;/li>
&lt;/ul>
&lt;h4 id="deprecation">Deprecation&lt;/h4>
&lt;ul>
&lt;li>All APIs that accept TLS data have been modified to support Kubernetes TLS style secrets.
The keys &lt;code>caFile&lt;/code>, &lt;code>certFile&lt;/code> and &lt;code>keyFile&lt;/code> have been deprecated. For more details about the TLS changes
please see the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.1.0#kubernetes-tls-secrets" target="_blank">Kubernetes TLS Secrets section&lt;/a>.&lt;/li>
&lt;li>⚠️ Breaking changes: This release comes with breaking changes to the Flux monitoring stack (Prom+Grafana).
The stack now leverages the
&lt;a href="https://github.com/kubernetes/kube-state-metrics/blob/main/docs/customresourcestate-metrics.md" target="_blank">kube-state-metrics Custom Resource State metrics&lt;/a>
to report some Flux resource metrics. This will allow users to extend the Flux metrics with custom metadata. The
&lt;a href="https://github.com/fluxcd/flux2/tree/v2.1.0/manifests/monitoring#warning-deprecation-notice" target="_blank">monitoring configuration in the fluxcd/flux2 repository&lt;/a>
is now deprecated and will be removed in a future release. The new monitoring configuration is located at
&lt;a href="https://github.com/fluxcd/flux2-monitoring-example/" target="_blank">fluxcd/flux2-monitoring-example&lt;/a>.
Please see the new monitoring guide
&lt;a href="https://fluxcd.io/flux/monitoring" target="_blank">https://fluxcd.io/flux/monitoring&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;h4 id="upgrade">Upgrade&lt;/h4>
&lt;p>To upgrade Flux from v0.x to v2.1.0 please follow the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.0.0#upgrade" target="_blank">Flux GA upgrade procedure&lt;/a>.&lt;/p>
&lt;p>To Upgrade Flux from v2.0.x to v2.1.0 either by
&lt;a href="https://fluxcd.io/flux/installation/#bootstrap-upgrade" target="_blank">rerunning bootstrap&lt;/a>
or by using the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>You can take a look at the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.1.0" target="_blank">changelog&lt;/a> for the full list of changes.&lt;/p>
&lt;p>❣️Big thanks to all the Flux contributors who helped us with this release!&lt;/p>
&lt;h4 id="flux-grafana-dashboards">Flux Grafana Dashboards&lt;/h4>
&lt;p>The Flux monitoring stack comes with two dashboards
for easy visualization of Flux controllers and resource metrics.
You can follow this
&lt;a href="https://github.com/fluxcd/flux2-monitoring-example" target="_blank">link&lt;/a>
to learn how to set it up.&lt;/p>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-0" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p4.png"
class="galleryImg"
>
&lt;img
width="900" height="487"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABEAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMGUtjK59OKdHCrZ3L&amp;#43;lSxxxuVaWdFXupDZ&amp;#43;nSmmCPnbcI30U/4U7kjXhQLlV5qIx4H3f0qaMIZ187/AFfv9KsyWNosLPHqKOyqSFEZ59qL2FexXf7i0ifdalf7i0ifdaqKEk/h&amp;#43;lIvRvpSyfw/SkXo30pAf//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p4_hu201245b1982bb73ddf40e45e9f3f5a39_95443_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p3.png"
class="galleryImg"
>
&lt;img
width="900" height="516"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABIAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APNkgjk2M8sYHde&amp;#43;KQ2afNieI7RxjvVmG2gmtw8s5Dj&amp;#43;HcBR9ktwjlZzkKSAGHNFzO5V8uJoSTt3jOAMf7P/ANeozGnlKQBuycj24x/WpGG5CWYkqBgU1htRCrH5ly3PuRQixshOF57URk889qJOi/SkTv8ASqAWQnC89qEPytRJ0X6UJ91qAP/Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p3_hu1156cb5cfac01e13989ff6af2100baec_91817_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p2.png"
class="galleryImg"
>
&lt;img
width="900" height="457"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABAAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMWDFQDjHbOKaIwT0UflUm0FAWk257YzVqKPSgFMtxOT/EAgA&amp;#43;lNuxLdiiYxk4Ax&amp;#43;FJ5fB4FaciaM7lkluI1PRQucVE8Om&amp;#43;U5jnnLhTtBQAE0uYXMf/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p2_hudf42a147e343155ca9de7f080b35789e_75366_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p1.png"
class="galleryImg"
>
&lt;img
width="900" height="596"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMf4c87vzGKaUHoc/jUmZf4c49xSZn9P0qiRpRAoxu3Y59BzTjHHtzvbPpg4pf3&amp;#43;MgZH0oIn2nK8Y5ouFmO85kjG0kU0XEjZDNkEU1v9WKavWiyGSmQqgIJH400Ss2QSSMUjf6sU1ev4UWQH//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p1_hu362193d857697ff83f9d307bf6bd12e8_238723_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p2.png"
class="galleryImg"
>
&lt;img
width="900" height="457"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABAAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APNY4GkXLJx24FDWhCkqhJ&amp;#43;lKiK0Yyc/8Co8lPb86dySL7O45MRwOvFKwhx8oqRokVScDj/aqEsnUJj8aaYH/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p2_huc341510254a55f96a82b79cb041ec5da_93103_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p1-featured.png"
class="galleryImg"
>
&lt;img
width="900" height="570"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABQAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMiD5QYsQwONuDz700kFc5wR2qzcyy3CICEHloOAD/jUllo9/fpK9uqMIQN2Wx1z/ga0ipSdktSLpK7KbgGPcSVbOMDI49aawBXdvOc4xk1YDzxoQjLhRk/IKsQaXqOopNPGI2EA&amp;#43;foOMH/AOvSSlJ2SG2krso&amp;#43;Y2D05GKvadrd1pqTpAsRE4AbepOMZ6c&amp;#43;9Z1KKE3F3TH6i725569as22qXlnFLHBLtWb742g5qpRSHGTi7p2P/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p1-featured_hude207f97d92789b4c840614d361d3a03_148210_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-12fc869a24b5eab5137df38e0bad16ae-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;h3 id="flagger-v1330">Flagger v1.33.0&lt;/h3>
&lt;p>This release fixes bugs related to the Canary lifecycle. The &lt;code>confirm-traffic-increase&lt;/code> webhook
is no longer called if the Canary is in the &lt;code>WaitingPromotion&lt;/code> phase. Furthermore, a bug which
caused downtime when initializing the Canary deployment has been fixed. Also, a bug in the
&lt;code>request-duration&lt;/code> metric for Traefik which assumed the result to be in milliseconds
instead of seconds has been addressed.&lt;/p>
&lt;p>The loadtester now also supports running &lt;code>kubectl&lt;/code> commands.&lt;/p>
&lt;p>Please see the
&lt;a href="https://github.com/fluxcd/flagger/blob/main/CHANGELOG.md#1310" target="_blank">changelog&lt;/a> for the full changes.&lt;/p>
&lt;h2 id="community-news">Community News&lt;/h2>
&lt;p>This section highlights additions to our community -
new contributors, project members, maintainers or adopters.&lt;/p>
&lt;h3 id="new-adopters">New adopters&lt;/h3>
&lt;style>
&lt;/style>
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-1-wrapper" class="gallery-wrapper">
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-1" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/zeit-online.png"
class="galleryImg"
>
&lt;img
width="300" height="32"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAMAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AO4twJNhZVO&amp;#43;JC3A5Jdif1JqJz/xNbdBwCirxwcbR3/E1Lafdh/64x/&amp;#43;hGopP&amp;#43;Qzb/RP/QRQBZCKIo7gDEnmx8jpwxxx07fz9TSbFMPnEfO8r7j68qenTuad/wAuMf8A10j/APQjSf8ALkn/AF1k/mlAH//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/zeit-online_hu99482b6cbd12e071c0514667a8a12e65_7716_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/sonatype.png"
class="galleryImg"
>
&lt;img
width="300" height="52"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAYAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APQxpt3Np01tay&amp;#43;RcoqxyypcOplkBUliwGeQOvU5I460LoWsNO7yaq4G7coSaQAtuJBxngYIG3kfLnua1rD/AF17/wBdz/IVdrWpJuQlrqcbc6Xq&amp;#43;lwG/k1JnuARHG3nSOFLvEBweqlg&amp;#43;QegbjOKkh0bWbqN2g1eeONbh0Gbly7hXkUEkg7SPl4Aw23mtjxL/wAggf8AX1b/APo5KsaT/wAecn/X1cf&amp;#43;jnqL6DP/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/sonatype_hu2a6cbc4f347084885b3b76f1317ca75e_22254_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/prophesee.png"
class="galleryImg"
>
&lt;img
width="300" height="78"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APWyL7cm0x4w24MenHHbnn6fjS4vcZBQYU4DdSecZx&amp;#43;H61aooAqn7ZubkAbONoBGcn19se1GbvnKkfd6FT25/WrVFAH/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/prophesee_hu6dd4d3bf9b9e20eb7ca56fac2ac1b45b_12107_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/infolegale.png"
class="galleryImg"
>
&lt;img
width="300" height="156"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABEAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMEiklYLGjMSQoAGeT0FSx2N3MN0VvI4xnKrkf54qKOWSIt5cjJvBVtpxkelTRahdwxrHHO6ovRc8dc9K79Ti66jfsV3kD7NKcgEYQnr0/mKZLbzQECWJ0zyNwxn/OaujXtS8tka5Lhl2/OAcDPOPrzn6n1qvdX93e7PtM7y7M7dx6Z60aj0K9FFFIYUUUUAf/Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/infolegale_hu057ae4f958f54eee3d2b2592151ae740_17067_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/ecovadis.png"
class="galleryImg"
>
&lt;img
width="300" height="54"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAYAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOsTxBdw2sk17f3Dxw3AhuBBEqsHw33CScrkD06e5FWodavy1&amp;#43;0dw8klkwjlSXaEMjOVG3AztAOeeeB755y&amp;#43;/wCQPqv/AGFF/wDZ61bL/XeJf&amp;#43;v2L/0bQBPc61eWt7dWhv7ppLNWNw2EwYwVIKcfe2Z68bj&amp;#43;VRNZktrU3UFxMomdWTKLvk3STkB27duRnGOhyar6r/yMfiP/AK9m/wDQVqm//IEsv96H/wBDnoA//9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/08/flux-v2.1.0/logos/ecovadis_hudad5832af0dfb7e826b2092aefde89bf_31967_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-12fc869a24b5eab5137df38e0bad16ae-1");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "20",
margins : "20",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.zeit.de" target="_blank">Zeit Online&lt;/a>: a German-language platform for demanding online journalism
and reader discussions with level.&lt;/li>
&lt;li>
&lt;a href="https://sonatype.com" target="_blank">Sonatype&lt;/a>: a developer-friendly full-spectrum software supply chain management
platform helps organizations and software developers.&lt;/li>
&lt;li>
&lt;a href="https://www.prophesee.ai" target="_blank">Prophesee&lt;/a>: a company using sensor design and AI algorithms
to develop computer vision systems.&lt;/li>
&lt;li>
&lt;a href="https://www.infolegale.fr" target="_blank">Infolegale&lt;/a>: a legal information platform to monitor company solvency.&lt;/li>
&lt;li>
&lt;a href="https://ecovadis.com/" target="_blank">Eco Vadis&lt;/a>: a collaborative platform that allows companies to assess the environmental
and social performance of their suppliers.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions here&lt;/a>
or give us a ping and we will help to add you. Not only
is it great for us to get to know and welcome you to our community. It
also gives the team a big boost in morale to know where in the world
Flux is used everywhere.&lt;/em>&lt;/p>
&lt;h3 id="new-contributors">New Contributors&lt;/h3>
&lt;p>Shoutout to all our new contributors:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://github.com/arukiidou" target="_blank">Arukiidou&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/bdols" target="_blank">Brian Dols&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/chipxoller" target="_blank">Chip Zoller&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/kellyfj" target="_blank">Frank J Kelly&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/GJKrupa" target="_blank">Gerard Krupa&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/mraerino" target="_blank">Marcus Weiner&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/mihaiandreiratoiu" target="_blank">Mihai Ratoiu&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/sestegra" target="_blank">Stéphane Este-Gracias&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/scheying" target="_blank">Stephan Scheying&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Thanks to all of our old and new contributors, and reach out if you&amp;rsquo;d like to become one as well.&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section!&lt;/p>
&lt;h4 id="how-to-build-a-self-service-platform-on-upbound-day-1httpsblogupboundioupbound-day-1">
&lt;a href="https://blog.upbound.io/upbound-day-1" target="_blank">How to Build a Self-Service Platform on Upbound: Day 1&lt;/a>&lt;/h4>
&lt;p>Our friends at Upbound wrote a great blog post on how you can use the power of Flux and Crossplane to
drive control plane interactions and configure your control plane for GitOps Flows.&lt;/p>
&lt;h4 id="canary-deployment-with-flagger-and-istio-on-devtronhttpswwwcncfioblog20230823canary-deployment-with-flagger-and-istio-on-devtron">
&lt;a href="https://www.cncf.io/blog/2023/08/23/canary-deployment-with-flagger-and-istio-on-devtron/" target="_blank">Canary deployment with Flagger and Istio on Devtron&lt;/a>&lt;/h4>
&lt;p>Rupin Solanki describes how to leverage Flagger and Istio, to automate the canary release process, ensure seamless
traffic shifting and real-time application health monitoring.&lt;/p>
&lt;h2 id="events">Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with events
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events">Recent Events&lt;/h3>
&lt;p>In August here are a couple of talks we would like to highlight.&lt;/p>
&lt;h4 id="cloud-native-islamabad---harnessing-the-power-of-gitops-with-flux">Cloud Native Islamabad - Harnessing the Power of GitOps with Flux&lt;/h4>
&lt;p>Flux maintainer, Stefan Prodan spoke at Cloud Native Islamabad on Harnessing the Power of GitOps with Flux.
It is packed with a informed introduction to the concept of GitOps and a demo of Flux and the Weave GitOps UI!
Click on the video below to watch it.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/tkC6qrIzA_s" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h3 id="upcoming-events">Upcoming Events&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up.
Tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;h4 id="share-your-story-at-gitopscon-euvirtual-this-year-">Share your story at GitOpsCon EU(virtual) this year! 📆&lt;/h4>
&lt;p>If you wish to speak at GitOpsCon EU, reach out to us to collaborate on proposals
on a range of topics related to Kubernetes. We are happy to provide our writing
expertise to your proposal and to collaborate on ideas. The
&lt;a href="https://events.linuxfoundation.org/gitopscon-europe/program/cfp/" target="_blank">CFP&lt;/a> deadline is October 4,
so kindly contact
&lt;a href="mailto:tamao@weave.works">tamao@weave.works&lt;/a> ASAP if you’re interested.
The conference will take place virtually on the 5th - 6th of December.&lt;/p>
&lt;h4 id="cncf-on-demand-webinar">CNCF On-Demand Webinar&lt;/h4>
&lt;p>Flux Maintainer, Kingdon B will be giving a talk titled
&lt;code>How to start building a self-service infrastructure platform on Kubernetes&lt;/code> on the 14th of September.
It’s going to be packed with knowledge on how to use Backstage and GitOps.
Register
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-how-to-start-building-a-self-service-infrastructure-platform-on-kubernetes/" target="_blank">here&lt;/a>.&lt;/p>
&lt;h3 id="project-meetings-and-bug-scrub">Project meetings and Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one of
the best ways to get involved in Flux. They are a friendly and welcoming way
to learn more about contributing and how Flux is organised as a project.&lt;/p>
&lt;ul>
&lt;li>2023-09-05 22:00 UTC, 00:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub (AEST)&lt;/a>&lt;/li>
&lt;li>2023-09-06 12:00 UTC, 14:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-09-07 15:00 UTC, 17:00 CEST
&lt;a href="https://fluxcd.io/#calendar">CNCF Flux Project Meeting (late)&lt;/a>&lt;/li>
&lt;li>2023-09-13 12:00 UTC, 14:00 CEST
&lt;a href="https://fluxcd.io/#calendar">CNCF Flux Project Meeting (early)&lt;/a>&lt;/li>
&lt;li>2023-09-14 17:00 UTC, 19:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-09-19 22:00 UTC, 00:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub (AEST)&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon B on
Slack.&lt;/em>&lt;/p>
&lt;h2 id="flux-ecosystem">Flux Ecosystem&lt;/h2>
&lt;h3 id="terraform-controller">Terraform-controller&lt;/h3>
&lt;p>The ecosystem is buzzing with news about the licensing changes to Hashicorp’s open-source projects
including Terraform. Weaveworks has released a
&lt;a href="https://web.archive.org/web/20230925073503/https://www.weave.works/blog/statement-for-terraform-hashicorp-license-changes" target="_blank">statement&lt;/a>
on this and the impact on the tf-controller.&lt;/p>
&lt;h3 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h3>
&lt;p>Significant performance upgrades and code refactoring has been introduced with VS Code GitOps Tools
extension version 0.25.0. Previously cluster metadata was loaded using &lt;code>kubectl get&lt;/code> commands.
Now, a new javascript client is also used which permits faster loading and real-time watching of cluster resources.
&lt;code>kubectl proxy&lt;/code> is executed in the background for the new client. Rendering of resource treeviews has been reworked
to minimise data reloading, to maintain collapsible state and to allow visualising resource errors grouped
by namespaces. Timeout settings were added and bad cluster connections should no longer slow down Clusters treeview rendering.&lt;/p>
&lt;p>UI refinements and bug fixes for the new client are ongoing. The most up-to-date UI features can be previewed by
selecting “Install Pre-Release Version” in the VS Code Extension Browser.&lt;/p>
&lt;h2 id="flux-fun-fact">Flux Fun Fact!&lt;/h2>
&lt;p>Did you know …
🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you&amp;rsquo;d like to see.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/docs/get-started/" target="_blank">Get Started guide&lt;/a>
and give us feedback.&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;li>We are looking forward to working with you.&lt;/li>
&lt;/ul>
&lt;p>&amp;#x2764;&amp;#xfe0f; Your Flux maintainer, Somtochi Onyekwere, and project member, Tamao Nakahara.&lt;/p></description></item><item><title>Blog: Announcing Flux 2.0 GA</title><link>https://fluxcd.io/blog/2023/07/flux-ga/</link><pubDate>Thu, 20 Jul 2023 00:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/07/flux-ga/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/07/flux-ga/infographic-featured_hu2a92eae87e340a4ebd5a8ebe2a1ddc11_580683_640x0_resize_box_3.png" width="640" height="213"/>
&lt;h2 id="flux-20-and-general-availability">Flux 2.0 and General Availability!&lt;/h2>
&lt;p>&lt;img src="infographic-featured.png" alt="FluxCD community stats">&lt;/p>
&lt;p>On July 5, 2023, Flux reached a major landmark with Flux 2.0 and the general
availability of its GitOps components! Flux has continued to grow during its
incredible journey. Its early iteration was built at Weaveworks for their own
needs and for a previous SaaS product built on Flux. Flux led to Weaveworks
CEO Alexis Richardson to coin the term, GitOps, which has taken the world by
storm with a CNCF Working Group, GitOpsCon, GitOps Days, and several GitOps
community groups. Moreover, leaders such as Kubernetes co-creators Brendan Burns
and Joe Beda have stated how GitOps is a natural evolution of Kubernetes itself.&lt;/p>
&lt;blockquote>
&lt;p>“GitOps practices and Flux has elevated our engineering: code infra
as software, eliminate human intervention, accelerate lead time for changes -
without compromising security requirements.”&lt;/p>
&lt;p>Tahir Raza, Staff Engineer - Cloud &amp;amp; Platform Engineering at Best Buy&lt;/p>
&lt;/blockquote>
&lt;p>Intending to be the best GitOps tool available, the Flux project has evolved into a
mature and trustworthy software. During its evolution, Flux has accomplished several
goals such as low resource consumption by adopting a microservices architecture,
safe multi-tenancy through its security-first design and support for bleeding edge innovation by having
first-class support for technologies like OCI and Cosign.&lt;/p>
&lt;p>We are proud to see that Flux is one of the few CNCF graduated projects
and the GitOps tool that companies such as Microsoft, AWS, GitLab, D2iQ,q
and more trust to deliver GitOps to their customers.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Safaricom PLC provides mobile telephony, mobile money transfer, consumer electronics, e-commerce,
cloud computing, data, music streaming, and fiber optic services to the Kenyan
Market predominantly and to the wider East Africa. So, Flux has been an essential
part of critical areas such as deployment frequency, standardization, and security,
among other GitOps capabilities that help us to be competitive. We are excited
about Flux 2.0 and the project&amp;rsquo;s continued maturity.&amp;rdquo;&lt;/p>
&lt;p>Winnie Gakuru, DevSecOps Engineer II at Safaricom PLC&lt;/p>
&lt;/blockquote>
&lt;h2 id="flux-general-availability">Flux General Availability&lt;/h2>
&lt;blockquote>
&lt;p>&amp;ldquo;EKS Anywhere has been providing GitOps capabilities with Flux
to our happy enterprise customers. We&amp;rsquo;ve been
testing Flux 2.0 since our EKS-A v0.16.0 release and it has been solid. Flux,
as a CNCF Graduated project and now with its GitOps components at GA, has been
reliable and enterprise grade so that we can deliver the best experience to the
customers who depend on our quality of product.&amp;rdquo;&lt;/p>
&lt;p>Joey Wang, Senior Software Engineer at Amazon Web Services&lt;/p>
&lt;/blockquote>
&lt;h3 id="what-does-general-availability-ga-mean-for-you-as-a-flux-user">What does General Availability (GA) mean for you as a Flux user:&lt;/h3>
&lt;blockquote>
&lt;p>&amp;ldquo;Flux is often my go-to technology choice for building multi-cluster
and even multi-region deployment patterns. It helps me enable teams in
evolving their applications from one cluster to many with consistent and repeatable config.&amp;rdquo;&lt;/p>
&lt;p>Bryan Oliver, Principal Engineer at Thoughtworks&lt;/p>
&lt;/blockquote>
&lt;p>This signifies that the APIs that have achieved GA (Generally Available) status
are now considered stable and can be used with confidence in production environments.
They offer backward compatibility, ensuring that existing implementations will continue
to function as expected. Flux encompasses various APIs, but not all of them have attained GA status yet.&lt;/p>
&lt;p>The APIs that have reached GA include:&lt;/p>
&lt;ul>
&lt;li>GitRepository: This API facilitates pulling configurations from Git repositories.&lt;/li>
&lt;li>Kustomization: It enables the application and synchronization of Kubernetes manifests defined in Git.&lt;/li>
&lt;li>Receiver API: This API triggers the reconciliation of Flux Custom Resources using webhooks.&lt;/li>
&lt;/ul>
&lt;p>It is important to note that these GA APIs will not undergo backwards-incompatible
changes unless accompanied by a major version update and appropriate advance announcements
As for the remaining Flux APIs, they will undergo further development and enhancements
before being promoted to GA status at a later stage.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;GitLab picked Flux for its official GitOps integration within our GitLab agent for Kubernetes.
Flux&amp;rsquo;s maturation and reliability have continued to show as we&amp;rsquo;ve tested Flux 2.0 in development.
Now with Flux&amp;rsquo;s GA, we can continue to build the best user experience for our enterprise
customers on solid foundations.&amp;rdquo;&lt;/p>
&lt;p>Viktor Nagy, Senior Product Manager, Environments group at GitLab&lt;/p>
&lt;/blockquote>
&lt;h3 id="releases">Releases&lt;/h3>
&lt;blockquote>
&lt;p>“It has been a fantastic journey of rebuilding the original
Flux into a microservices architecture, adding Flagger as a subproject, getting
validated as a graduated project in the CNCF, and now reaching GA with Flux 2.0.
I am grateful to work with great teams, maintainers, contributors, and partners,
and then to see major enterprises and cloud providers relying on Flux to start
or mature their Kubernetes journey. Keeping great company with users (the likes
of Amazon AWS, D2iQ, Microsoft Azure, VMware, Weaveworks, GitLab, Volvo, SAP,
Xenit and many more) keeps me motivated for the future innovations and growth for Flux.”&lt;/p>
&lt;p>Stefan Prodan, Principal Developer Experience Engineer at Weaveworks, Flux maintainer and
Flagger creator&lt;/p>
&lt;/blockquote>
&lt;p>Release Cadence: Flux will have at least three minor releases in a year
following the Kubernetes release cadence. The release will happen roughly
two weeks after a new Kubernetes release. The two weeks timeline can be adjusted if more
time is needed for testing compatibility with the new Kubernetes version.&lt;/p>
&lt;p>API Versioning: The Flux project follows the semver standard for versioning.
Release candidates are marked as &lt;code>x.y.z-rc.a&lt;/code> (e.g v1.0.0-rc.3) and stable
releases are marked as &lt;code>x.y.z&lt;/code>.&lt;/p>
&lt;p>Support: Flux will support the last three minor release versions of a major
release and the previous major release version for a year after its release.
A newly released Flux version offers support for Kubernetes N-2 minor versions.&lt;/p>
&lt;p>CVE Backport: We will backport bug fixes and security fixes to the last three minor
releases as patch releases. Users are advised to run the latest patch release of
a given minor release.&lt;/p>
&lt;p>For more details on the release procedure, take a look at
&lt;a href="https://fluxcd.io/flux/releases" target="_blank">https://fluxcd.io/flux/releases&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Xenit is proud to be contributors and maintainers
of the Flux project, which is the GitOps tool of choice for enterprises and cloud
providers such as Volvo, GitLab, Microsoft, and AWS. We are particularly proud
to be part of Flux&amp;rsquo;s major milestones: not only graduating in the Cloud Native
Computing Foundation some months ago, but now getting Flux to 2.0 and general
availability. We enjoy being part of the Flux community and look forward to
the next stages of this growing community.&amp;rdquo;&lt;/p>
&lt;p>Simon Gottschlag, CTO at Xenit&lt;/p>
&lt;/blockquote>
&lt;h2 id="how-to-get-started">How to get started?&lt;/h2>
&lt;ul>
&lt;li>Watch our
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-flux-20-what-you-need-to-know/" target="_blank">CNCF webinar on Flux 2.0&lt;/a>,
which has an intro to GitOps for newcomers and Flux 2.0-specific updates for existing users.&lt;/li>
&lt;li>Need extra support for Flux and Flagger? Check out the
&lt;a href="https://fluxcd.io/support/#commercial-support">Flux support page&lt;/a> and this
&lt;a href="https://www.youtube.com/watch?v=94ZMibHBszI" target="_blank">August 2 webinar&lt;/a>
on Flux 2.0-specific support.&lt;/li>
&lt;/ul>
&lt;p>❤️ Your Flux maintainer, Somtochi Onyekwere, and project member, Tamao Nakahara.&lt;/p></description></item><item><title>Blog: May 2023 Update</title><link>https://fluxcd.io/blog/2023/06/may-2023-update/</link><pubDate>Tue, 06 Jun 2023 20:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/06/may-2023-update/</guid><description>
&lt;!--
Have a look at these documents
- internal_docs/how-to-do-the-monthly-update.md
online: https://github.com/fluxcd/website/blob/main/internal_docs/how-to-do-the-monthly-update.md
- internal_docs/how-to-write-a-blog-post.md
online: https://github.com/fluxcd/website/blob/main/internal_docs/how-to-write-a-blog-post.md
to get more background on how to publish this blog post.
-->
&lt;p>May was packed with exciting stories from Flux users, newly updated
Flux adopters, contributors, contributions and a new GA release candidate!
Also, don’t miss future Flux Bug Scrubs using ChatGPT.&lt;/p>
&lt;h2 id="flux-technology-things-to-know">Flux technology things to know&lt;/h2>
&lt;h3 id="three-more-flux-release-candidates-many-improvements---please-test">Three more Flux release candidates! Many improvements - Please test&lt;/h3>
&lt;p>On our path to GA, we released
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.0.0-rc.5" target="_blank">v2.0.0-rc5&lt;/a>,
the fifth release candidate for the 2.0.0 release. It includes many fixes,
so you are very much encouraged to upgrade to this latest version - even though
it carries &amp;ldquo;RC&amp;rdquo; in its version number, it is the most stable Flux release to date.
Users are advised to upgrade from v0.41 and older versions to v2.0.0-rc.5 as soon as possible.&lt;/p>
&lt;h4 id="fixes-and-improvements">Fixes and improvements&lt;/h4>
&lt;ul>
&lt;li>Starting with this version, source-controller, kustomize-controller and
helm-controller pods are marked as
&lt;a href="https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/" target="_blank">system-cluster-critical&lt;/a>.&lt;/li>
&lt;li>The &lt;code>Alert&lt;/code> v1beta2 API has two new optional fields. &lt;code>.spec.inclusionList&lt;/code> for
fine-grained control over events filtering (notification-controller) and
&lt;code>.spec.metadata&lt;/code> that allows users to enrich the alerts with information
about the cluster name, region, environment, etc.&lt;/li>
&lt;li>New command &lt;code>flux reconcile source chart&lt;/code> for pulling Helm OCI charts on-demand
from container registries (CLI).&lt;/li>
&lt;li>Support annotated Git tags with .spec.ref.name in GitRepository (source-controller).&lt;/li>
&lt;li>The deprecated field &lt;code>.status.url&lt;/code> was removed from the &lt;code>Receiver&lt;/code> v1
API (notification-controller).&lt;/li>
&lt;li>Add support for commit signing using OpenPGP keys with
passphrases (image-automation-controller).&lt;/li>
&lt;li>Fix bootstrap for BitBucket Server (CLI).&lt;/li>
&lt;li>Fix secrets decryption when using Azure Key Vault (kustomize-controller).&lt;/li>
&lt;li>Fix drift detection for renamed HelmReleases (helm-controller).&lt;/li>
&lt;li>Improve performance when handling webhook receivers (notification-controller).&lt;/li>
&lt;li>Improve the detection of values changes for HelmReleases by stable
sorting them by key (helm-controller)&lt;/li>
&lt;li>Update cosign to v2 (source-controller)&lt;/li>
&lt;li>Support for Helm 3.12.0 and Kustomize v5.0.3.&lt;/li>
&lt;/ul>
&lt;p>To upgrade from v0.x to v2.0.0-rc.5, please see
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.0.0-rc.1" target="_blank">the procedure documented in RC.1&lt;/a>.&lt;/p>
&lt;p>&amp;#x26a0;&amp;#xfe0f; Note that Kubernetes 1.27.0 contains a regression bug that affects
Flux, it is recommended to upgrade Kubernetes to 1.27.1 or newer. The upgrade to
Kustomize v5 also contains breaking changes, please consult their
&lt;a href="https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.0.0" target="_blank">CHANGELOG&lt;/a> for more details.&lt;/p>
&lt;p>Big thanks to all the Flux contributors that helped us with this release!&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>All components have been updated to patch vulnerabilities in Docker (CVE-2023-28840,
CVE-2023-28841, CVE-2023-28842) and Sigstore (CVE-2023-30551, CVE-2023-33199).&lt;/p>
&lt;h3 id="flagger-1310">Flagger 1.31.0&lt;/h3>
&lt;p>This release adds support for Linkerd 2.13. Furthermore, a bug which led the confirm-rollout
webhook to be executed at every step of the Canary instead of only being executed before the
canary deployment is scaled up, has been fixed.&lt;/p>
&lt;p>&amp;#x26a0;&amp;#xfe0f; This release contains some breaking changes for the Linkerd integration.
Please see the
&lt;a href="https://github.com/fluxcd/flagger/blob/main/CHANGELOG.md#1310" target="_blank">CHANGELOG&lt;/a>
on how to upgrade.&lt;/p>
&lt;h2 id="news-from-flux-users--the-community">News from Flux users &amp;amp; the Community!&lt;/h2>
&lt;h3 id="newly-posted-flux-adopters">Newly posted Flux adopters!&lt;/h3>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-060be1d93e59acac053902e2a19d7c72-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-060be1d93e59acac053902e2a19d7c72-0" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/06/may-2023-update/logos/3-blablacar.png"
class="galleryImg"
>
&lt;img
width="600" height="507"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABsAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AO18QXry6syxuyiEbBtOOe/&amp;#43;fauneZdO0oz3DHbbQb5GJycKuSf0rhZpDLcSSk8uxb8zUk015qdlcadLezeVcxsjkncQMe9etiqPLRTvZRV2fLYTHqNecpJvmehxng6&amp;#43;1DWPiFbym5mT7RcNPMqSEKQAWwR6cYr3OvmyUX/h/VpoobmW2uYGKeZC5QkexHOCK7HwX8R9SttThsdYuWurSdgglk5eIngHPceuf/18Eo8yUo7HtUKyjpLqdDe2zWl5LA4IKMce47Gm27iOdWPTODXX67aW81k00kQMiD5W6EVk&amp;#43;G7O3uJmkliDsnK57fhXoutGthpc66WZ4NTASp4uNOD31R4/4svIr3xJdywkFAwQMO&amp;#43;0AE/mKpaVp8&amp;#43;q6rbWNspaWeQKMdvU/gOfwrvviroum2U0V7a2iQz3BJlZCQGOeuOma6b4b6Lptroceow2iLdzAq8pJLY9Bnp&amp;#43;FedBqnSSXTQ9qNBupytn/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/06/may-2023-update/logos/3-blablacar_huee6453b1d989c705e0e19d35d6fabe25_137660_600x600_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/06/may-2023-update/logos/2-nuvme.png"
class="galleryImg"
>
&lt;img
width="183" height="244"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIACAAGAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APZqKKqzSzPcm2gZEIQO7tyQCSOB68Hk&amp;#43;3WmlcTdi1RVCd7uyeJg5uYXkVHDhQybjjIIwCMkcYq/Q1YSd9DjJv8AhObbUGnj33dq08xNuPs4Kx73EQUnb1Uxsdxzwee1Rw6b4wnv999PtRIYwJo2jV3LBS4IHA2MHHTkOOuOO3ooTs7hOCmrM5a0sfEMV9amUs8SuC7uUcgYXd16DlgNvP1rqaKKcpcxFKkqaaTb9T//2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/06/may-2023-update/logos/2-nuvme_hu6ee0af4ccc3bf61d5a569a7bf83d0f78_3917_600x600_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/06/may-2023-update/logos/1-ttmzero.png"
class="galleryImg"
>
&lt;img
width="600" height="334"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABIAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APYLm5is4DNM21BUS6pZM8i/aEHlgEknjB9DT761&amp;#43;2Wclvu27xw2M4qnLpMssruZkHm&amp;#43;WXAT&amp;#43;JfTnoahuV9DopxpOPvuz/4by9S5Hf2kpIjuI3KjcQrZIFTJIkq7kYMPUVnJpGyZH81SFd2I2dQxBx&amp;#43;lXoIzFEEZgxHcDFNN9Sakaa&amp;#43;B3JaKKKoxCiiigD//2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/06/may-2023-update/logos/1-ttmzero_hu2e425f6156ee2cc15ffc84c1d49a23ec_53597_600x600_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-060be1d93e59acac053902e2a19d7c72-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;ul>
&lt;li>
&lt;a href="https://www.blablacar.com/" target="_blank">Blablacar&lt;/a>: a long distance carpooling platform that connects
drivers with empty seats and passengers to share travel costs.&lt;/li>
&lt;li>
&lt;a href="https://nuvme.com" target="_blank">Nuvme&lt;/a>: a consulting firm specializing in cloud application modernization.&lt;/li>
&lt;li>
&lt;a href="https://ttmzero.com" target="_blank">TTMzero&lt;/a>: a RegTech company that assists financial players
with pre and post-trade digitization.&lt;/li>
&lt;/ul>
&lt;p>Thanks to Horacio Granillo (
&lt;a href="https://github.com/hgranillo" target="_blank">@hgranillo&lt;/a>),
Peter König (
&lt;a href="https://github.com/konigpeter" target="_blank">@konigpeter&lt;/a>), and Julien Haumont
(
&lt;a href="https://github.com/jhaumont" target="_blank">@jhaumont&lt;/a>) for taking the time to make these
additions to the Flux adopters list!&lt;/p>
&lt;p>&lt;em>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions here&lt;/a> or
give us a ping and we will help to add you. Not only is it great for us to
get to know and welcome you to our community, it also gives the team a big
boost in morale to see Flux being used across the world.&lt;/em>&lt;/p>
&lt;h3 id="flux-members-contributors-and-maintainers">Flux members, contributors, and maintainers!&lt;/h3>
&lt;h4 id="priyanka-ravi-joins-as-flux-project-member">Priyanka Ravi joins as Flux Project Member&lt;/h4>
&lt;p>We are very happy that Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi
&lt;a href="https://github.com/fluxcd/community/issues/293" target="_blank">joined us as a Flux
Project Member&lt;/a>.&lt;/p>
&lt;p>Over the past years, Pinky spoke at conferences, meetups and elsewhere,
demoing Flux, discussing use-cases and discussing what&amp;rsquo;s new. If you
want to have a look at some of her talks, check out our
&lt;a href="https://fluxcd.io/resources/">resources
section&lt;/a>.&lt;/p>
&lt;p>Thanks a lot for everything you have done - we are happy to have you
in our team!&lt;/p>
&lt;h4 id="matheus-pimenta-joins-as-a-flux-project-member">Matheus Pimenta joins as a Flux Project Member&lt;/h4>
&lt;p>We are very happy to have
&lt;a href="https://github.com/fluxcd/community/issues/300" target="_blank">Matheus Pimenta&lt;/a>
as a Flux Project Member. Matheus has been very active in the Flux community.
He has been opening issues, participating in discussions and raising pull requests
especially in the notification-controller.&lt;/p>
&lt;p>Thanks a lot for everything you have done - we are happy to have you
in our team!&lt;/p>
&lt;h4 id="tamao-nakahara-joins-as-flux-project-member">Tamao Nakahara joins as Flux Project Member&lt;/h4>
&lt;p>Tamao has been actively assisting with managing the Flux community
and organizing efforts around getting Flux represented at various
conferences. She is the lead organizer of
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps Days&lt;/a>.&lt;/p>
&lt;p>Tamao has done so much for the Flux project. We are happy to welcome
her to the team.&lt;/p>
&lt;h4 id="sanskar-jaiswal-becomes-a-core-maintainer">Sanskar Jaiswal becomes a Core Maintainer&lt;/h4>
&lt;p>Sanskar has been making major code contributions to Flux
for a while and is already a Flagger maintainer. He has
been instrumental in getting the improving the git implementation
in Flux and a host of other features.&lt;/p>
&lt;p>Thanks for all your contributions to Flux! This is well-deserved.&lt;/p>
&lt;h4 id="mehak-saeed-selected-for-fluxs-season-of-docs">Mehak Saeed selected for Flux&amp;rsquo;s Season of Docs&lt;/h4>
&lt;p>We are excited to welcome Mehak Saheed who would be working to
improve Flux&amp;rsquo;s documentation during this year&amp;rsquo;s Google Season
of Docs. Mehak is a technical writer with over six years of experience
and has worked on documentation for projects such as
&lt;a href="https://cert-manager.io/docs/" target="_blank">cert-manager&lt;/a>
and
&lt;a href="https://docs.unfurl.run/" target="_blank">Unfurl&lt;/a>.&lt;/p>
&lt;p>We look forward to the great work she&amp;rsquo;ll do!&lt;/p>
&lt;h3 id="share-your-story-at-kubecon-na-in-chicago-this-year-">Share your story at KubeCon NA in Chicago this year! 📆&lt;/h3>
&lt;p>&lt;em>If you wish to speak at KubCon NA, reach out to us to collaborate on
proposals on a range of topics related to Kuberentes. We are happy to
provide our writing expertise to your proposal and to collaborate on
ideas. The CFP deadline is June 18, so kindly contact
&lt;a href="mailto:tamao@weave.works">tamao@weave.works&lt;/a> ASAP if you&amp;rsquo;re interested.
The conference is from 6th-9th November in Chicago.&lt;/em>&lt;/p>
&lt;h3 id="use-cases-from-flux-users-at-gitopscon--open-source-summit-2023-in-may">Use Cases from Flux users at GitOpsCon / Open Source Summit 2023 in May!&lt;/h3>
&lt;p>Flux users, contributors, and maintainers spoke at the 2-day co-located event,
&lt;a href="http://gitopscon.com" target="_blank">GitOpsCon-CDCon&lt;/a>, as well as at the 3-day core conference,
&lt;a href="https://events.linuxfoundation.org/open-source-summit-north-america/" target="_blank">Open Source Summit NA 2023&lt;/a>,
during the week of May 8-12, 2023 in Vancouver, Canada. See below for more talks
from the conference from contributors and maintainers. Here are highlighted talks from Flux users:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/LHVjp7JeKzE" target="_blank">Keynote Session: GitOps as an Evolution of Kubernetes&lt;/a> -
Flux user and Kubernetes co-creator, Brendan Burns, Corporate Vice President&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/AIdG4hTr0dk" target="_blank">Multitenancy - Build Vs. “Buy”: Zcaler’s Journey&lt;/a> - Flux users Neeta Rathi &amp;amp; Josh Carlisle, ZScaler&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/y--oZrATl6c" target="_blank">Managing Software Upgrades with a kpt, GitLab and Flux Workflow in a Telecom Context&lt;/a> - Flux user, Peter Wörndle, Ericsson&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/TEeZ1gYWwrw" target="_blank">Flux at the Point of Change - Using the K8s Golang SDK and the Flux Api to Automatically Fix and Deploy CVEs in Your Base Images&lt;/a> - Flux user, Bryan Oliver, Thoughtworks, Inc.&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/pVuwrstpET4" target="_blank">Kubernetes Quick Wins and Migration Best Practices: RingCentral Example&lt;/a> - Flux user, Ivan Anisimov, RingCentral&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/UFcO9oZMbdA" target="_blank">Deliver a Multicloud Application with Flux and Carvel&lt;/a> - Flux ecosystem user, Peter Tran, VMware&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/9axzrzhrfgw" target="_blank">High-Security, Zero-Connectivity &amp;amp; Air-Gapped Clouds: Delivering Complex Software with the Open Component Model &amp;amp; Flux&lt;/a> - Flux user, Dan Small, SAP &amp;amp; Mohamed Ahmed, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/LBD4EYDYlCU" target="_blank">Delivering Secure &amp;amp; Compliant Software Components with the Open Component Model &amp;amp; GitOps&lt;/a> - Flux user, Dan Small, SAP SE&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/RgzGNY1uy3U" target="_blank">Extending Observability to the Application Lifecycle with ArgoCD, Flux and Keptn&lt;/a> - Flux users Ana Margarita Medina, Lightstep &amp;amp; Adam Gardner, Dynatrace&lt;/li>
&lt;/ul>
&lt;h3 id="devops-days-medellin-colombia">DevOps Days Medellin, Colombia&lt;/h3>
&lt;p>
&lt;a href="https://cv.dcaballero.net/" target="_blank">David Caballero&lt;/a> gave a talk this month on Flux
and shared slides and other resources in the
&lt;a href="https://cloud-native.slack.com/archives/CLAJ40HV3/p1684432848208149" target="_blank">CNCF Flux slack&lt;/a>. Check it out!&lt;/p>
&lt;h3 id="talks-on-fluxgitlab-fluxarm64-fluxterraform-fluxvs-code-fluxwasm-and-more-from-gitopscon-cdcon--open-source-summit-2023">Talks on Flux+GitLab, Flux+ARM64, Flux+Terraform, Flux+VS Code, Flux+WASM and more from GitOpsCon-CDCon / Open Source Summit 2023&lt;/h3>
&lt;p>Here are additional talks from
&lt;a href="http://gitopscon.com" target="_blank">GitOpsCon-CDCon&lt;/a> and
&lt;a href="https://events.linuxfoundation.org/open-source-summit-north-america/" target="_blank">Open Source Summit NA 2023&lt;/a>,
during the week of May 8-12, 2023 in Vancouver, Canada.&lt;/p>
&lt;h4 id="talk-summaries-in-the-new-stack">Talk summaries in The New Stack:&lt;/h4>
&lt;ul>
&lt;li>
&lt;a href="https://thenewstack.io/case-study-a-webassembly-failure-and-lessons-learned/" target="_blank">Kingdon’s talk&lt;/a> on WASM&lt;/li>
&lt;li>GitOps principles quoting
&lt;a href="https://thenewstack.io/4-core-principles-of-gitops/" target="_blank">Pinky’s GitOpsCon keynote&lt;/a> panel&lt;/li>
&lt;/ul>
&lt;h4 id="talks-by-flux-contributors-and-maintainers-include">Talks by Flux contributors and maintainers include:&lt;/h4>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/yGrTxkzjmZA" target="_blank">GitOpsCon Keynote panel featuring Flux contributor&lt;/a>, Priyanka “Pinky” Ravi, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/CeCpvJH_RuA" target="_blank">GitLab + Flux!&lt;/a> - Priyanka “Pinky” Ravi, Weaveworks &amp;amp; Flux user, Viktor Nagy, GitLab&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/KT_Hxr8pGLg" target="_blank">GitOps Sustainability with Flux and arm64 (full version)&lt;/a>- Tamao Nakahara, Weaveworks &amp;amp; Liz Fong-Jones, Honeycomb&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/2eTjGFbOz5E" target="_blank">Microservices and WASM, Are We There Yet?&lt;/a> - Flux user, Will Christensen, Defense Unicorns &amp;amp; Kingdon Barrett, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/E0OzGADEoik" target="_blank">Automate with Terraform + Flux + EKS: Level Up Your Deployments&lt;/a> - Flux contributor, Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/SLoVn2Ao3qc" target="_blank">Exotic Runtime Targets: Ruby and Wasm on Kubernetes and GitOps Delivery Pipelines (15-min version)&lt;/a> - Flux maintainer, Kingdon Barrett, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/biC7X33o9eI" target="_blank">VS Code+Flux: Dev-Driven Automated Deployments Like a Cloud Native Pro (Even if You’re a Beginner)&lt;/a> - Flux ecosystem contributor, Juozas Gaigalas, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/R4rKr4jbvr8" target="_blank">Level Up Your Deployments: Automate with Terraform + Flux&lt;/a> - Flux contributor, Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/aScxRi6sjrk" target="_blank">Platform Engineering Done Right: Safe, Secure, &amp;amp; Scalable Multi-Tenant GitOps&lt;/a> - Flux ecosystem contributor, Juozas Gaigalas, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/EsAuJmHYWgI" target="_blank">Exotic Runtime Targets: Ruby and Wasm on Kubernetes and GitOps Delivery Pipelines (40-min version)&lt;/a> - Flux maintainer, Kingdon Barrett, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/vBQ3wN1c9xU" target="_blank">Lightning Talk: GitOps Sustainability with Flux and arm64 (5-min version)&lt;/a> - Flux contributor, Tamao Nakahara, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/A-su3Rb7UC8" target="_blank">Community Diversity and Inclusion as Business Metric (and Not Just a Feel-Good Tactic)&lt;/a> - Flux contributor, Tamao Nakahara, Weaveworks&lt;/li>
&lt;/ul>
&lt;style>
&lt;/style>
&lt;div id="gallery-060be1d93e59acac053902e2a19d7c72-1-wrapper" class="gallery-wrapper">
&lt;div id="gallery-060be1d93e59acac053902e2a19d7c72-1" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/06/may-2023-update/images/img_6211.jpg"
class="galleryImg"
>
&lt;img
width="900" height="675"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AI18KrtDBJcY/hmYVTuPDpjU4EwP/XQmuptPh9pE2nW8zyah5kkCOSs4&amp;#43;YkAnGRWd4o8F2Wk&amp;#43;Gr6&amp;#43;tLq/EsKgqJJVKnLAenvVJQ6v8P&amp;#43;CSpXeiOMkspp3KW8kgiBw0uAQfZeP1oTTDGoRCwA55A/wqGOW&amp;#43;dE2s&amp;#43;AoAAAxTXuL&amp;#43;MnDOPSvZeVpRvznOsTrblNWP4jeI4rRFS6gWOJVVR5XJA6Yqle&amp;#43;Pdd1O0ks767U2so&amp;#43;dViUZ56ZxntWA3/AB5j6Cq5/wBUP8968fc6EkndGxB4iligeNIlaXOIyV4VeOo/D9ahHiGfZIsqxSS7/vfwhfwrMt/9carj&amp;#43;L6Vq69V6cxVktT/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/06/may-2023-update/images/img_6211_hu3e5b97a9c4752d33937a899d768b021f_1100281_900x900_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/06/may-2023-update/images/52884487429_58d7446651_o.jpg"
class="galleryImg"
>
&lt;img
width="900" height="600"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APOLVobTU4p7iQLGQcsfoa0/FkcWr3UF3prfaIls1j&amp;#43;RTwVHPX8R&amp;#43;Fc3K7XTJGCCzOoUHpXb6K0d7AbMzNDamQJEqxDLHuAQOgHrxkiuyNW/uvZO/wCBMqa53JbtWOetdIsTFp080xb7SSJVAOUwxXOByRwKoanp02nXbRTeXknI8twy9a09Uhg0vxcjxI0UNpImVZsucYJPAxk9aJRBqrXFySzlSuM5Xao7e/8A9aiMnOolFWT/AKQ5JRg77o1G0TTWgLJbmJkydyNzx9QcU6SIWEcE9vhYuYhHzlV4Jwc9Sec461cH/HvL9GqvqH/IMt/&amp;#43;urfyFFeKTVhx1RyuttMurXAknaVgQC7dW4HNSaRK4guE3cN1qPXv&amp;#43;Qzc/wC9/QUukfcm/Cs6b9&amp;#43;PqhS2Z//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/06/may-2023-update/images/52884487429_58d7446651_o_hu3d03a01dcc18bc5be0e67db3d8d209a6_3205648_900x900_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-060be1d93e59acac053902e2a19d7c72-1");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "250",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;h2 id="upcoming-events">Upcoming Events&lt;/h2>
&lt;h4 id="flux-project-meetings-and-flux-bug-scrubchatgpt">Flux project meetings and Flux Bug Scrub+ChatGPT!&lt;/h4>
&lt;p>Our June 27 and 28 bug scrubs will involve using ChatGPT
Experiment with us and we’ll learn together!
Join the
&lt;a href="https://www.meetup.com/Weave-User-Group/" target="_blank">Weave Online User Group&lt;/a>
for updates.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>2023-06-07 12:00 UTC, 19:00 CEST
&lt;a href="https://fluxcd.io/#calendar">CNCF Flux Project Meeting (early)&lt;/a>&lt;/li>
&lt;li>2023-06-08 17:00 UTC, 19:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-06-13 22:00 UTC, 00:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub (AEST)&lt;/a>&lt;/li>
&lt;li>2023-06-14 12:00 UTC, 14:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-06-15 15:00 UTC, 17:00 CEST
&lt;a href="https://fluxcd.io/#calendar">CNCF Flux Project Meeting (late)&lt;/a>&lt;/li>
&lt;li>2023-06-21 12:00 UTC, 19:00 CEST
&lt;a href="https://fluxcd.io/#calendar">CNCF Flux Project Meeting (early)&lt;/a>&lt;/li>
&lt;li>2023-06-22 17:00 UTC, 19:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-06-27 22:00 UTC, 14:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub (AEST): playing with ChatGPT!&lt;/a>&lt;/li>
&lt;li>2023-06-28 12:00 UTC, 00:00 CEST
&lt;a href="https://fluxcd.io/#calendar">The Flux Bug Scrub: playing with ChatGPT!&lt;/a>&lt;/li>
&lt;li>2023-06-29 15:00 UTC, 17:00 CEST
&lt;a href="https://fluxcd.io/#calendar">CNCF Flux Project Meeting (late)&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one of
the best ways to get involved in Flux. They are a friendly and welcoming way
to learn more about contributing and how Flux is organised as a project.&lt;/p>
&lt;p>&lt;em>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/em>&lt;/p>
&lt;h2 id="flux-fun-fact">Flux Fun Fact!&lt;/h2>
&lt;p>Did you know …
🔩 Flux works with your existing tools: Flux works with your Git providers
(GitHub, GitLab, Bitbucket, can even use s3-compatible buckets as a source),
all major container registries, and all CI workflow providers. GitLab also
announced that Flux is their GitOps tool of choice, so you&amp;rsquo;ll see even more
synergy this year!&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you&amp;rsquo;d like to see.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/docs/get-started/" target="_blank">Get Started guide&lt;/a>
and give us feedback.&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;li>We are looking forward to working with you.&lt;/li>
&lt;/ul>
&lt;p>&amp;#x2764;&amp;#xfe0f; Your Flux maintainer, Somtochi Onyekwere, and project member, Tamao Nakahara.&lt;/p></description></item><item><title>Blog: April 2023 Update</title><link>https://fluxcd.io/blog/2023/05/april-2023-update/</link><pubDate>Tue, 02 May 2023 06:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/05/april-2023-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/05/april-2023-update/crew-featured_hu68b59ac1e3c55bf08368181aaf9dc639_340298_640x0_resize_q75_box.jpg" width="640" height="482"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read
&lt;a href="https://fluxcd.io/blog/2023/04/march-2023-update/">our last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of May 2023 - let&amp;rsquo;s recap together what
happened in April - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-v200-release-candidate">Flux v2.0.0 release candidate&lt;/h3>
&lt;p>This is the first release candidate of Flux v2.0 GA &amp;#x1f389;.&lt;/p>
&lt;p>Users are encouraged to upgrade for the best experience. We also very much
welcome feedback!&lt;/p>
&lt;p>Flux v2.0.0-rc.1 comes with the promotion of the GitOps related APIs to
v1 and adds
&lt;a href="https://fluxcd.io/flux/cheatsheets/sharding/">horizontal scaling &amp;amp; sharding
capabilities&lt;/a> to Flux controllers.&lt;/p>
&lt;p>In addition, RC.1 comes with support for auth with Azure Workload
Identity when pulling OCI artifacts from ACR and when decrypting secret
with Azure Vault. Also, Bootstrap for GitLab was extended with support
for generating
&lt;a href="https://fluxcd.io/flux/installation/bootstrap/gitlab/">GitLab Deploy
Tokens&lt;/a>.&lt;/p>
&lt;p>Big thanks to all the Flux contributors that helped us with this release!&lt;/p>
&lt;p>And a special shoutout to the GitLab team for their first contribution to Flux!&lt;/p>
&lt;p>This release brings API changes we want to highlight here:&lt;/p>
&lt;ul>
&lt;li>&lt;code>GitRepository&lt;/code> v1&lt;/li>
&lt;li>&lt;code>Kustomization&lt;/code> v1&lt;/li>
&lt;li>&lt;code>Receiver&lt;/code>v1&lt;/li>
&lt;/ul>
&lt;p>The
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/">GitRepository&lt;/a> kind was
promoted from v1beta2 to v1 (GA) and deprecated fields were removed.
The v1 API is backwards compatible with v1beta2, except for the following:&lt;/p>
&lt;ul>
&lt;li>the deprecated field &lt;code>.spec.gitImplementation&lt;/code> was removed&lt;/li>
&lt;li>the unused field &lt;code>.spec.accessFrom&lt;/code> was removed&lt;/li>
&lt;li>the deprecated field &lt;code>.status.contentConfigChecksum&lt;/code> was removed&lt;/li>
&lt;li>the deprecated field &lt;code>.status.artifact.checksum&lt;/code> was removed&lt;/li>
&lt;li>the &lt;code>.status.url&lt;/code> was removed in favor of the absolute &lt;code>.status.artifact.url&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomization/">Kustomization&lt;/a> kind was
promoted from v1beta2 to v1 (GA) and deprecated fields were removed. A new
optional field &lt;code>.spec.commonMetadata&lt;/code> was added to the API for setting
labels and/or annotations to all resources part of a Kustomization. The v1
API is backwards compatible with v1beta2, except for the following:&lt;/p>
&lt;ul>
&lt;li>the deprecated field &lt;code>.spec.validation&lt;/code> was removed&lt;/li>
&lt;li>the deprecated field &lt;code>.spec.patchesStrategicMerge&lt;/code> was removed (replaced by &lt;code>.spec.patches&lt;/code>)&lt;/li>
&lt;li>the deprecated field .spec.patchesJson6902&lt;code>was removed (replaced by&lt;/code>.spec.patches`)&lt;/li>
&lt;/ul>
&lt;p>The
&lt;a href="https://fluxcd.io/flux/components/notification/receiver/">Receiver&lt;/a> kind was promoted
from v1beta2 to v1 (GA). The v1 API now supports triggering the
reconciliation of multiple resources using &lt;code>.spec.resources.matchLabels&lt;/code>.
The v1 API is backwards compatible with v1beta2, no fields were removed.&lt;/p>
&lt;p>To upgrade Flux from &lt;code>v0.x&lt;/code> to &lt;code>v2.0.0-rc-1&lt;/code> you can either rerun
&lt;a href="https://fluxcd.io/flux/installation/upgrade/#flux-controllers-upgrade">flux bootstrap&lt;/a>
or use the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>To upgrade the APIs from v1beta2, after deploying the new CRDs and controllers,
change the manifests in Git:&lt;/p>
&lt;ul>
&lt;li>set &lt;code>apiVersion: source.toolkit.fluxcd.io/v1&lt;/code> in the YAML files that
contain &lt;code>GitRepository&lt;/code> definitions and remove the deprecated fields if any&lt;/li>
&lt;li>set &lt;code>apiVersion: kustomize.toolkit.fluxcd.io/v1&lt;/code> in the YAML files that
contain &lt;code>Kustomization&lt;/code> definitions and remove the deprecated fields if any&lt;/li>
&lt;li>set &lt;code>apiVersion: notification.toolkit.fluxcd.io/v1&lt;/code> in the YAML files that
contain Receiver definitions&lt;/li>
&lt;/ul>
&lt;p>Bumping the APIs version in manifests can be done gradually. It is advised to not
delay this procedure as the beta versions will be removed after 6 months.&lt;/p>
&lt;p>&amp;#x26a0;&amp;#xfe0f; Note that this release updates the major version of the Flux Go
Module to v2. Please update your &lt;code>go.mod&lt;/code> to require &lt;code>github.com/fluxcd/flux2/v2&lt;/code>,
see
&lt;a href="https://pkg.go.dev/github.com/fluxcd/flux2/v2" target="_blank">pkg.go.dev&lt;/a> for the
documentation of the module.&lt;/p>
&lt;p>New Documentation&lt;/p>
&lt;ul>
&lt;li>API:
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/">GitRepository v1&lt;/a>&lt;/li>
&lt;li>API:
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomization/">Kustomization v1&lt;/a>&lt;/li>
&lt;li>API:
&lt;a href="https://fluxcd.io/flux/components/notification/receiver/">Receiver v1&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="flagger-bug-fix-release-1300-hits-the-streets">Flagger: Bug fix release 1.30.0 hits the streets&lt;/h3>
&lt;p>This release fixes a bug related to the lack of updates to the generated
object&amp;rsquo;s metadata according to the metadata specified in
&lt;code>spec.service.apex&lt;/code>. Furthermore, a bug where labels were wrongfully
copied over from the canary deployment to primary deployment when no
value was provided for &lt;code>--include-label-prefix&lt;/code> has been fixed. This
release also makes Flagger compatible with Flux&amp;rsquo;s helm-controller drift
detection.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>Weave GitOps has recently released two new versions, v0.21.2 and v0.22.0,
bringing various enhancements and bug fixes to the community.&lt;/p>
&lt;p>In
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.21.2" target="_blank">v0.21.2&lt;/a>,
the release includes client-side apply for better interactivity, removal of
runs in non-session mode, custom SVGs for navigation icons, health checks in
the UI, and more. Alongside these enhancements, bug fixes include resolving
dashboard reconciliation issues and URL checking regex.&lt;/p>
&lt;p>In
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.22.0" target="_blank">v0.22.0&lt;/a>,
enhancements include group claim support for strings, OIDC prefix support for
impersonation, additional health checks, and support for &lt;code>.sourceignore&lt;/code> for
GitOps Run. Bug fixes address concurrent ID token refreshing, clean-up process
issues, and vulnerabilities in the YAML NPM package.&lt;/p>
&lt;p>Weave GitOps Enterprise has introduced v0.21.2 and v0.22.0, offering new
features and improvements. In v0.21.2, users can view GitOpsSets on leaf
clusters in the UI, experience a fixed bug related to GitOpsSets not updating
&lt;code>ConfigMaps&lt;/code>, and utilize the &amp;ldquo;View Open Pull Requests” button to select
any &lt;code>GitRepository&lt;/code>. Enhancements include updating the GoToOpenPullRequest
button and extending unwatch cluster logic for better resource management.
The UI now has a sync external secret button on the secret details page.&lt;/p>
&lt;p>In v0.22.0, the new Explorer backend has been introduced, providing better
scalability for Weave GitOps Enterprise. The Explorer now supports Flux
sources, and the Applications UI and Sources UI can be configured to use
the Explorer backend for an improved user experience.&lt;/p>
&lt;p>GitOpsSets offer enhanced templating for numbers and object chunks, and
cluster bootstraps now sync secrets without waiting for ControlPlane
readiness. The Explorer collector utilizes impersonation, and a feature flag
has been added for replacing Applications and Sources with the query service
backend. Bug fixes include addressing Git authentication checks,
non-deterministic GitRepository template application, and improved
support for &amp;ldquo;View Open PRs” in different URL formats.&lt;/p>
&lt;p>Documentation updates include instructions for configuring Weave GitOps
Enterprise to create PRs in Azure DevOps and user guides for raw templates
and chart paths. In addition, updates cover secrets management,
using private Helm repositories, and frontend development process
improvements.&lt;/p>
&lt;p>You might be interested in our recent
&lt;a href="https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/">blog
post&lt;/a> about how to
use Weave GitOps as your Flux UI as well.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The team has recently released
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">Terraform
Controller&lt;/a> v0.15.0-rc.1 which
supports Flux v2.0.0-rc.1. This update brings significant improvements and
moves us closer to the Flux GA.&lt;/p>
&lt;p>⚠️Important Note:⚠️ With this release, there are breaking changes to be
aware of:&lt;/p>
&lt;ul>
&lt;li>Terraform Controller now uses API version &lt;code>v1alpha2&lt;/code>, deprecating
&lt;code>v1alpha1&lt;/code>.&lt;/li>
&lt;li>This version is not compatible with Flux v2 v0.41.x and earlier versions.&lt;/li>
&lt;/ul>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>The team has recently shared a sneak preview of the new version of
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flamingo&lt;/a>,
a powerful drop-in extension for Argo CD that seamlessly integrates Flux as
a GitOps engine in any Argo CD environments.&lt;/p>
&lt;p>Now with the ability to switch between Argo CD UI and Weave GitOps (the UI
for Flux), Flamingo aims to take DevOps and GitOps user experiences to the
next level with this integration.&lt;/p>
&lt;video width=650 controls>
&lt;source
src="https://github.com/flux-subsystem-argo/website/raw/main/docs/flamingo-wego.mp4"
type="video/mp4">
If the video is not displayed, view the video
&lt;a href="https://github.com/flux-subsystem-argo/website/raw/main/docs/flamingo-wego.mp4">here&lt;/a>.
&lt;/video>
&lt;p>You might be interested in
&lt;a href="https://web.archive.org/web/20231004173040/https://www.weave.works/blog/flamingo-expand-argo-cd-with-flux" target="_blank">this blog
post&lt;/a> on
the Weaveworks blog about Flamingo.&lt;/p>
&lt;h4 id="new-additions-to-the-flux-ecosystem">New additions to the Flux Ecosystem&lt;/h4>
&lt;p>AWS Labs introduced their new project
&lt;a href="https://github.com/awslabs/aws-cloudformation-controller-for-flux" target="_blank">&lt;code>awslabs/aws-cloudformation-controller-for-flux&lt;/code>&lt;/a>.
It is a Flux controller for managing AWS CloudFormation stacks and
helps you to store CloudFormation templates in a git repository and
automatically sync template changes to CloudFormation stacks in your
AWS account with Flux.&lt;/p>
&lt;p>Check out the
&lt;a href="https://github.com/awslabs/aws-cloudformation-controller-for-flux#demo" target="_blank">demo and
example&lt;/a>.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="cdcon--gitopscon-north-america-2023">cdCon + GitOpsCon North America 2023&lt;/h3>
&lt;p>
&lt;a href="https://events.linuxfoundation.org/cdcon-gitopscon/" target="_blank">cdCon + GitOpsCon NA 2023&lt;/a>
is only a few days away. It will happen May 8-9 in Vancouver, Canada.
Of course Team Flux will be there to talk about all things GitOps!&lt;/p>
&lt;p>Here&amp;rsquo;s what we put in our calendar:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://sched.co/1Jp7y" target="_blank">Niki Manoledaki, Al-Hussein Hameed Jasim: Evaluating the Energy Footprint of
GitOps Architecture: A Benchmark Analysis&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1Jp8G" target="_blank">Liz Fong &amp;amp; Tamao Nakahara: GitOps Sustainability with Flux &amp;amp;
ARM64&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1Jp8h" target="_blank">Peter Tran &amp;amp; Nader Ziada: Deliver a Multicloud Application with Flux &amp;amp;
Carvel&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K9a3" target="_blank">Juozas Gaigalas: Platform Engineering Done Right: Safe, Secure &amp;amp; Scalable
Multi-Tenant GitOps&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpAp" target="_blank">Josh &amp;amp; Neeta: Multitenancy - Build Vs. &amp;ldquo;Buy&amp;rdquo;: Zcaler&amp;rsquo;s
Journey&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1Jp9Q" target="_blank">Mohamed Ahmed, Dan Small: High-Security, Zero-Connectivity &amp;amp;
Air-Gapped Clouds: Delivering Complex Software with the Open Component
Model &amp;amp; Flux&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1Jp9N" target="_blank">Peter Wörndle: Managing Software Upgrades with a kpt, GitLab and Flux Workflow
in a Telecom Context&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpBJ" target="_blank">Paulo Frazão: GitOps and Pi&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpAF" target="_blank">Bryan Oliver: Flux at the Point of Change - Using the K8s Golang SDK and
the Flux API to Automatically Fix and Deploy CVEs in Your Base
Images&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpBS" target="_blank">Kingdon Barrett: Exotic Runtime Targets: Ruby and Wasm on Kubernetes
and GitOps Delivery Pipelines&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpAd" target="_blank">Priyanka Ravi: Automate with Terraform + Flux + EKS: Level Up Your
Deployments&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpBh" target="_blank">Leigh Capili: People &amp;gt; Process &amp;gt; GitOps&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpAy" target="_blank">Ivan &amp;amp; Tamao: Kubernetes capabilities for non-Kubernetes
users&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1JpBk" target="_blank">Priyanka Ravi, Viktor Nagy: GitLab + Flux!&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1Js9F" target="_blank">Dan Garfield, Priyanka Ravi, Mark Waite, Andrea Frittoli &amp;amp; Lori Lorusso:
Keynote Session:The Graduated Projects Panel&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="oss-summit-north-america-2023">OSS Summit North America 2023&lt;/h3>
&lt;p>
&lt;a href="https://events.linuxfoundation.org/open-source-summit-north-america/" target="_blank">Open Source Summit NA
2023&lt;/a>
is coming up May 10-12 in Vancouver, Canada. It plays host great number of
sub-conferences in many of which you will see Flux goodness happening.&lt;/p>
&lt;p>Here are a few that we are looking forward to:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://sched.co/1K63h" target="_blank">Liz Fong &amp;amp; Tamao Nakahara: GitOps Sustainability with Flux and
arm64&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K55z" target="_blank">Kingdon Barrett: Exotic Runtime Targets: Ruby and Wasm on Kubernetes and
GitOps Delivery Pipelines&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K57j" target="_blank">Tamao: Community Diversity &amp;amp; Inclusion as Business Metric (and not just
a feel-good tactic)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K57U" target="_blank">Kingdon + Will Christensen: Microservices &amp;amp; WASM, Are We There
Yet?&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K5Ek" target="_blank">Mathieu Benoit: Securing Kubernetes Manifests with Sigstore Cosign, What
Are Your Options?&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://ossna2023.sched.com/event/1K5Eb" target="_blank">Juozas Gaigalas: Dev-Driven Automated Deployments Like a Cloud Native
Pro (Even if You&amp;rsquo;re a Beginner)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K5Fx" target="_blank">Gergely Brautigam, Gerald Morrison: Delivering Secure &amp;amp; Compliant Software
Components with the Open Component Model &amp;amp; GitOps&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1K5Fx" target="_blank">Mathieu Benoit: Bundling and Deploying Kubernetes Manifests as Container
Images&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/1Lf96" target="_blank">Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi: Automate with Terraform + Flux&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
April here are a couple of talks we would like to highlight.&lt;/p>
&lt;h4 id="cloudnativecon--kubecon-eu-2023">CloudNativeCon / KubeCon EU 2023&lt;/h4>
&lt;p>CloudNativeCon / KubeCon is the most important event for us, as it&amp;rsquo;s such
a great venue to meet contributors, friends, end-users and folks who are
generally interested. It was a very busy event and luckily Team Flux was
there as a big group, so we were able to respond to all requests.&lt;/p>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-3b729650136dfad3c877cbe6d803b555-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-3b729650136dfad3c877cbe6d803b555-0" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image.jpeg"
class="galleryImg"
>
&lt;img
width="600" height="452"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AJtN1S0WzjQyxs5bnbyw9uK047qEZKOjkgqQQCBn0964KO5snvpbWWFQ4n8tSWwCD3J/P9Kktp4mlvBDgC2Qn5ZiOw/Pv&amp;#43;VRGvK1mjadCK1TO0jSFJzcJuaUj&amp;#43;JuPwrWguRL85ID9GAHT6cVw9h4qWJbeJdMjneQFV/eby5A5&amp;#43;h6VcufHtw5hisLIRSSSqjBuCDnBUjHT3qlUd9jGVLTc5KSGKSOQiKNWkbcxxnk85rLutNIUyRkNL2AAArVXp&amp;#43;H9Kjf75&amp;#43;lCR0ySZf8KWdjZ36zyXqNNGvyqeADjtkdak0S7XXfEl3qksaqLWIkKM4LH5VJ/DJrK07/AJCH4n/0GrfgX7usf9c4/wCZrOTfs2QkudH/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image_hudfdadf2750dbf7bd34a415a0c2772112_320777_600x600_fit_q90_lanczos.jpeg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image_5.jpeg"
class="galleryImg"
>
&lt;img
width="600" height="452"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APPLqLy5pIJHUtGdodeh&amp;#43;tNSQmKRGHzKQf6f1/SururDSI7ZZpdOu4wxBBWdSpGCTjIzjAqvaw&amp;#43;H7hS4trsKicnzk5JBHHy&amp;#43;v9aRVjn49wXK/eYYz6D/ADx&amp;#43;dBkUDaRuAP3M8Z9WPc&amp;#43;1bmNEWKUGOZSMfekGQOD2H93g0tve6JYTkXelQXG5FZVVnGBhjySTkkFTxgcCnawi5ciAactpG6YRdiF2ztB696xG0uFINiXMQOACcgZHzZ/9Cq5P0NUZfu1vKa7HHGnL&amp;#43;YhutM358iePGMBQw9v8K220vTppYpZJwWUENkj5gRj8OtZEVXB2rF1lF/Ca&amp;#43;xlJWcj/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image_5_hu68b59ac1e3c55bf08368181aaf9dc639_340298_600x600_fit_q90_lanczos.jpeg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image_4.jpeg"
class="galleryImg"
>
&lt;img
width="600" height="452"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOTHh3UogTJY3KKMqQYHAznhd2MfWkbStUk3LFp7usbBT8uEUn29fqa1T4v1mKWRZLm4RR80h3cBsYzjoOSOlVZtaj1MefcoJGSRVdpRkk9vbpn8qUby2HJcu5Rm0rV1tFuJrC6aDbkSKh2AYz24FU1aRThYyv4da6a61ydrOMGYxxzIVZ9uEOc4UgA/3cE&amp;#43;9U7y8ksii3MSr5qb0YMSeT7fjTWquNpxlyszbu1uFed5M7VVsENnd3/LitKTQAdNuXiO8SASRqoywIB4/Wm6h/qJv91v/QTXQWX/AB4Rf7g/lW2CSqRdzmxzdNxUTmtUsB/Y6TKxPluuBngDn&amp;#43;pqfxALaPR4hEf9JVVVe5x34qW&amp;#43;/wCRdb6j&amp;#43;YqjrvWH/rmP5CtZpR0S3/4L/QzhKVSV5PZ/5H//2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image_4_hue3ee8b49106a32f2275480c346554490_446852_600x600_fit_q90_lanczos.jpeg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image%20%282%29.jpeg"
class="galleryImg"
>
&lt;img
width="600" height="452"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOYj0i4IV/KlVVH7sNAxHqWPGD&amp;#43;NRjT9VkaR7e3dcNhpm&amp;#43;8f&amp;#43;BHAHXtW&amp;#43;b27WErdsZIJASsasCrqMfP7ZJ6VDp1oup3siz2yCCJ2AcJklgefbA/L8aSTvZofMrXTE1TwrDp2izTRmS5ugwwSc8Z5OMemfWubRJ2OWRuP7wJNdX4o1Oe2uYI7cpNDcIRIgQqQM4GOe/P61mxi6u5JF05IpDGMOrBshhwcE9eapR5naOor2V5FjxJYTR3Ed7aXGySZlg8vYNvzE5P50/Qb/wDs7wndyF/MuZgxiQjlmIwPryKua99yz/6/I/5msO1/5BWn/WuyvTV21/WxwYerLlSf9blfVYb1bmSFppJ5o1DSOqhecZ7V0eiWMEE0d5D5irJGcKTkfNgk&amp;#43;ucis67/AOQ1qf8A1zX/ANBrb0j/AJBVp/1xX&amp;#43;VZYK06kotfDb8TXHylGnF33P/Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image%20%282%29_hub17b016788e0a8d67710488fc90a8347_376657_600x600_fit_q90_lanczos.jpeg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image%20%281%29.jpeg"
class="galleryImg"
>
&lt;img
width="600" height="451"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AJ5NF8MSwu66wysqbW3xpuDEkEZBX0rCWw0NJIEFlKqF082U3ajALAHCgc/xDn&amp;#43;lctcahcNJPI3yGRvMHHJIJx/M0p1y8e0gnyiskjKWEY6YXGc/U1aiyXJHVa3oGj2lvAbKe4E0rEGMOJAQMZIIA9&amp;#43;KzU0Qxp5ryMueuVO7gZOc9sd6pvr1w2no0tuj&amp;#43;cjIJSAANpOcDt16jFS6VeXF1a&amp;#43;aAZirmMoVHKtwefqRSfS5UbNuxsR6RbtphF1ZrJK0flpKzAEDoMc9ec1h6bawR6WVZw26QqVz6E/0xXXT/wDIPtvqv9K4&amp;#43;x/49P8At5alRblKVwxUVCnTaNC/06KXTWjhjZzklYwcAEkE1gTXQieDTVP2dYcRzOe7dyMetddH/F9a4XVv&amp;#43;Q1df9d/8K6cSlzI4cBOVpH/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/image%20%281%29_hu7896ebe78272f6f639c91173e828f750_304395_600x600_fit_q90_lanczos.jpeg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/20230421_155347.jpg"
class="galleryImg"
>
&lt;img
width="600" height="450"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AJZr&amp;#43;yWFGeUIxwGDqQcnA79ajN3YAbmuI1BPUtXI&amp;#43;JZJHv7u5mDMLhl8plHy7sDjP4H86ZbPFYW841JJ1llUrCU2nLDAK&amp;#43;3Axn3rvhmdW3MtjtVaUG42Orunhvbb7NBLGZHkAA3cHHPUfSqc9hLby&amp;#43;TOjRuBnafSsvQtVs4NXsbmZmtyJnMmSzAL5YC9scktXYarrPlMBCsczsS2ZIt2FIGOv4n8a83M5uvarJ6rQ1oYiUqihynB6gv2y8hEakwwONzA8M2Rkflmr2o6dNfPEVOFjlMg9cE5NVrP/Uv/ANd3/nW6n3fwp8zTOdRRlz6T&amp;#43;6YwqxJgaPBxwScg/QVq6dGw06FZV2tt5Xpinjqf92pI/wDVL9BUt3dmaRSTP//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/20230421_155347_hu2fe403c4a12ec3ecea9fd227a89c9c23_947168_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/20230421_154118.jpg"
class="galleryImg"
>
&lt;img
width="600" height="450"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AI4J7jUIxcySCIuQY4wxLexB9eOme1SyXmoLss0njE0n3jghdu0Zx65J7&amp;#43;tcZp2sTWd3HKJyCDjOM8f/AKqus15c3TSXc58v7MZ4yzFMgYyBkck4/H1rujhlSmlpY3jVUi/bakJNRij8hApJwUAbPXHPpW3D4qjt4I1ubKBZJxw7fKAMkbiO/Bx&amp;#43;FcvaSWzCB3d0lnyIBG2dvz4wfw/pWzd2i213DJNGWDKFAP3gB0HBIrqxM41p8lnZAkpbs4uD7NDLA1y29Wf5lXoAOx/HFavii6hfTraJXVm37k8uQuFXBz16dR&amp;#43;Vc/cff/E/zqxqP&amp;#43;ot/p/SuK7lJSYou0GkaujwFLgLLGixOUYzMoYqoGSAO2SO1dRBPFeKhm8pimduHySOmfb6Vg2v/HuP90fyq1pX3/8AgD/zFa4WUnNu5M0kj//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/20230421_154118_hu6e446010785d4435b97b999de8f8ec49_759703_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/20230418_155249.jpg"
class="galleryImg"
>
&lt;img
width="600" height="450"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/ANtY9uMEgg9MdRVhUL9FyR7ZqtFruih4na4Cgqz7WyCQFz0p0/iTTYLHUDp13bSXIhLwjy&amp;#43;Ccccn6j61EfeWhUk07Do57eZ5Qkg3ROUkGNu09wP/AK1RSLDdRyqnzCZGVSe/bPb1rE8AalapLefbLyOKKaIySmUjCyZ4wTwMgn8q0tGv5L7VL6DLJa2rNFG8Zxk8AjOPbOR601o0xNbo5SLxYdPsIZbO3hlbb&amp;#43;8MoJJ4wQPr9ar3fjjUbxZWgWOxMv8ArDGuSwweBnpWCP8AkFL9arr0pUdnfob1krrzNDQGgM80VyzKjAAhT1HPUd&amp;#43;1dloE8OmahM7XjTRXRJdm7MSSCe3ciuD07/j7k&amp;#43;g/ma6aD/V/lWqimtSEf//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/our-pics/20230418_155249_hu8d929a5cc034194cce4d509e8f353a19_845064_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-3b729650136dfad3c877cbe6d803b555-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;p>We kicked off the event with the Flux Project Meeting, which saw 4 hours
of updates from the maintainers, lots of time for Q&amp;amp;A, story telling and
a good opportunity to get to know each other.&lt;/p>
&lt;p>Next up was the CNCF Graduated Projects Update, here is
&lt;a href="https://www.youtube.com/watch?v=yit0zu8g_O4&amp;amp;t=76s" target="_blank">the
link&lt;/a> to the timestamp
where we provided the Flux update.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/yit0zu8g_O4" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Many folks were looking forward to hear how we envision Flux is used in
an OCI world. Luckily Hidde and Stefan gave a talk about it:&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">At KubeCon EU, &lt;a href="https://twitter.com/hiddeco?ref_src=twsrc%5Etfw">@hiddeco&lt;/a> and myself, we’ve talked about &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> beyond Git and how Flux OCI artifacts can streamline &lt;a href="https://twitter.com/hashtag/Kubernetes?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Kubernetes&lt;/a> continuous delivery.&lt;br>&lt;br>Check out the recording on YouTube&lt;a href="https://t.co/HhOJSpTmzq">https://t.co/HhOJSpTmzq&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1653382756431175681?ref_src=twsrc%5Etfw">May 2, 2023&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/gKR95Kmc5ac" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>We thank the Cloud Native Computing Foundation for setting up a
Graduation Celebration for Argo and Flux, the two GitOps solutions which
graduated around the same time! Cupcake time for everyone!&lt;/p>
&lt;p>Last up was a great panel which featured Priyanka Ravi, Weaveworks;
Christian Hernandez, Red Hat; Filip Jansson, Strålfors; Roberth Strand,
Amesto Fortytwo; Leigh Capili, VMware.&lt;/p>
&lt;p>They all talked about &amp;ldquo;How GitOps Changed Our Lives &amp;amp; Can Change Yours Too!&amp;rdquo;.
Priyanka &amp;ldquo;Pinky&amp;rdquo;, Leigh and Roberth are long-time friends of Flux.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/hd7VkCLnTWk" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>And thanks a lot to the Cloud Native Photo Crew, who took
&lt;a href="https://www.flickr.com/photos/143247548@N03/" target="_blank">these
pictures&lt;/a>:&lt;/p>
&lt;style>
&lt;/style>
&lt;div id="gallery-3b729650136dfad3c877cbe6d803b555-5-wrapper" class="gallery-wrapper">
&lt;div id="gallery-3b729650136dfad3c877cbe6d803b555-5" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838969604_6f1b6a1968_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AObXQUGuDz3iNssaEskpJ3sCSCwHUHsfb1rdt/DMMssttcanGskedyzThu&amp;#43;Puk4/SuOtdaZ1cAlZWGZgDt3AOpz9cbhU9rbtcX9tKJR9skmYmKcFdyDJ3FicYbJHXtTVK0rt6FJ86UYrV/qdlG8Xhm6gImYGIKtyqLuWRDjO0DhT9PQ1t2kGmeLkbU9PnWFYgVJljIbcOeRkZ6jvXB6kXtIreOVowzDJKyqxOPoT3Zq7DXNOt7bQYbC2hjtZLmBWPkxqiSPjkk8HrWcJpJ3PRx2AjTUHTlzXuvu67nj2k3apqUSvawyrI4Vg654JAJHbOPUGup1PTv7JutRkW5kkm0q6h8iT7pw2MggfUflXG6d/yE7b/rqv8xXf&amp;#43;Kv&amp;#43;PnxN/wBfNv8A0rrgk738zw605RtyvqvzRp3OiG/RtSv7tpgkvlrGsaoQCxPX8&amp;#43;1aOo24N3HAmFVowxPJPJ9z7VIf&amp;#43;QBJ/wBfA/madff8hOD/AK4r/M1jSbhNuJ24yTr0owqapP0/I//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838969604_6f1b6a1968_c_hubc08dbb97f52908c4197d57ecff2f0ae_174922_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838267158_fd0dab7a29_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/ANUa3Y/2XKbOSI7EyLbIhX8UA2keuQx/2jWjpeqWkmlQ3iyra&amp;#43;cPmjVsLn2HQj0NYsfgu7uIBaXWqyvAx&amp;#43;dGt155ycHdwvaksvBuq2dxOuneIZooJGJZ/I&amp;#43;ZmPLYOfu44479qbqRv8Q&amp;#43;V22Ny01mxvYUmt7lkDlgC6bScEj0HpVbW7mytTALxvOE5IDyYlIwM/x5AHvjvWVY&amp;#43;DtYhtotMXXrn&amp;#43;zREzPlQvzlshdp7EE9&amp;#43;uKdrXw7/tXU1mOpSpDlnlAUEqcAcDr0yabnFK7YuUTTdO1G1mEv9pRuFYkq0Dc45/v4/SoLu81hrhp3u7UsrFgFgdRn6CTB/GtuD7rf8C/lWJd/8tKToUt&amp;#43;VA6k27tjbDxRqto9wx&amp;#43;yy5hLYaN8DaM8Dfx0rmrnxxqQm3hpFAGNiyYXrnuDV9es/wD17yf&amp;#43;gmuLuvvGplThZK3kNSadz//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838267158_fd0dab7a29_c_hu9f0aa9d86a1fa07b2f237c1f500142ce_193925_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838267043_e34b229b67_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AODXWryz1nzWt57a6iLbl8sB1zkkbT06ntTZdehmjWK5FzJErmTYQAW46Z9K9bgvvD2l3V1cQtB9ouGBkkjlEjHHX5mJbpxj8qv/ANsaGZoDJLBKySb/ADCIwF4KgZ7AA9aFiL2S/IHHS7PEodVt4wiwxXKorDAVRwev51Vur&amp;#43;UzNPILgxS8gPnDjpnP4fpXtWlRaFocLWi3j3Hl3JuFmiCjcTuyeOCQGx24FJe2&amp;#43;k6to8ujxXskEc0XkAyxgqgAIVsHHc59eO1KVdJ2ZXs3a55Quua1n/kL3Rz/AHmB/mKkGv62pH/EyY/70UbfzWs5ev4U7vXJ7Wfc7PZQ7Gh/wkWt9ftsRJ/vWcJ/9lqKbxPrETJmWzfLd7CDj/x2qfYVWvPvRf71XCpNvcidOCWiP//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838267043_e34b229b67_c_hu62a426134963bc46fa05a4d4830a54c9_120423_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838267018_5424206e7a_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AK3gzw1p&amp;#43;qWk0d4XjeNiu9O&amp;#43;ehP0x&amp;#43;tdxpfgTw9Zt5rw&amp;#43;c&amp;#43;AMyKD&amp;#43;mK5bwrqI0&amp;#43;6nCDi4cbScHgYHA/4EfyrrIvESwugaQMp4ABHrg5468ZqFRUNXqy5T5vQzPGvw/sdZsppNPjC3CIRHGMKobrxx37814bJo11DctBMvlyIxVg3YivoP/hII2IP2j32gjocHH6j9a4jxfbaIyi4im2XLE5HXOOMED&amp;#43;dbakM4211i5gcFSD5ceFDcgZOf61pr4ivfKz8uGJVgBjPPrXOx/ef/cFXV/49x/vn&amp;#43;dTJdSkbUms32AFkC5GAVGCB9f8ADFZU80m1pN5L45Lc56/4VO/8H4VVn/1L/wCe5q0tyL6n/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838267018_5424206e7a_c_hud4fad0522c8f595b57fa4cfd1b7aba49_106015_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838225580_011a31f6f5_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APS9K1yDVt2yRVKsRlDuUgHjB960JJoIkD7g24gZz1J&amp;#43;lcvDZWcJiisraIxKDsVGIQHtu44HUf41bs7SfZ5b6daW6OwPlrPk9vmOFxnjtTlOCDlknZm8s6GTZtAPf5q5zWfGdjpN&amp;#43;9p&amp;#43;8YovzFFB2n60NZ3Mdz5gS2dSrIztM28dAuOPb8M&amp;#43;9U7fTxcLPJrFlBDJLK4X98XyvYnAx0pOUWr3Gk07Mfr6z2htkjmCsCWOxdi9uAAf5k9axbi9v1M5a6DFcGPMY&amp;#43;TjH49M1veKf9fB9K5276T/AO6P51yYunGUNV2PRl/u8H1J0vLsGdxIok8sksFOCcemcVv6ZYQX9q0Vwu7dgqynaynHUGuaT/lv/wBcj/Kuu0D/AFY&amp;#43;g/kaznFRxFO2m4sf8S9D/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838225580_011a31f6f5_c_hufde754dc69add821f21f694442b2543e_105601_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838007744_4757357c6a_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AMbR445NStpgvybJVZkHC5Q457Gli8Fy6xrV1DMLg2hc&amp;#43;XJ5gDYw23BbrzgfjXfaJpVlpenpbi0RWjAZ5Fh8sSNj72OeT/SrckmkNKCphWUPwDIV6jv6etc9Nxpxte5vVl7SV3oea2HgTXomjE0ChoVyx3Ax7cf3s9eMdMVQ1TR5rC/jjuLdljdRtkD7sr3HHT1ru/EsusW2liLSdTggaWTZE7M2&amp;#43;VeQcYBPp9PWvNL831vezPqmrJeXawEYV2k29ByT3rphGNSzasc1SHK2kz2DRkGqyXMbvJGLCQGMq2dx55Ofp&amp;#43;tQ&amp;#43;TFc2x1CbzDM5OdkhVfl9h396seEf&amp;#43;PnWf8AfH/s1RQf8gQfWSm6UKUrQVjalNzwzlLe6/U8u8XatMmuS2cG6PDKryeYzMwPYEn5Rz0Fc2&amp;#43;BIFxxsOfetXxd/wAjbcf9dE/lWVL/AK7/AICf6VjNvmNIpctz/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52838007744_4757357c6a_c_hu47e2a07494dc088e3a8486ffd69b8571_119205_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837980010_efbd49ee6c_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AKsWn2lxeTpLcSpNC6skMT7fMBVev0waSPzv7Tjt4Db&amp;#43;QXYSsxy2cn5QAeDx39ahvRHb&amp;#43;Jw7uIlS6UMzA9OhP86w/DbfZfFcsV6kyTPLhFTna&amp;#43;7nPtgtXRKk25M7cVh44ZUrO/Mr/PQ2PGFuFtrXA/5bCvdpokmiaORA6MMMpGQRXjniXTZdRe2gjljiCP5jPI2MKOvufwr0HQdYuru&amp;#43;MbxTxwzszxLcDDBABjHt9ajlbgmcEpJTszxvx9eT2uvyxxFAhmbI2fe5PU/jWzH4fjfxxAsdw6FQJ2LAHOP4e2BWB8Rv&amp;#43;Rik/wCuzfzrtrX/AJHyP/r2P8q9GCXJJ&amp;#43;RjiK1SbhGUm0np9xvzeHI7uSCd7g/JltuzqCMEdfSqz399pFq0Vtcs0wfKSzAPtA&amp;#43;UjHGc4J6966KP/Ux/7grltW&amp;#43;8f94/&amp;#43;hmvPnpF2NIvmkrn/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837980010_efbd49ee6c_c_hu221a3bf2fea216999f986c353d9dbe1c_132547_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837980005_f47668d2a3_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="401"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AMO&amp;#43;0iOWz0SEAK93aopcknBZiM1qaj8JbbRdHn1N9SknltwHCrGFUnIHPJPes&amp;#43;38W6HfLZh7O6hms0VIyJEwcHIbkcc89DW1c&amp;#43;NTqMcmm3tzeMkrBGiTyiSDg8jYp9OnHvXZOrTlJa/mQoyS0OX&amp;#43;zb3HFU1tcKox/Ca6O9j0uSwme0nkjLRgIcgkNzwfX6DPQ9O9B7dLe1aR5QTEv7wE4PQdAetSvZy0iy3KS1aKPh820utWIktI2S4tl86PosjGQAEgY6A/pVjxTcnSNU1iCAu8HmIfJkbK8qpUYx/CTxVTw3/yGtL/AOveP/0atS&amp;#43;Pv&amp;#43;Qzq/8AvQ/&amp;#43;gLXBDU6Kmi0MvTvEdyIGhMUTxAqVRxkL1OR6HJ61W1DWbuz1VDaSyRJCiFEaQuASg3dfU1R0/wC4/wBRSax/yEW/65x/&amp;#43;gLW/LFJNIwu2rNn/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837980005_f47668d2a3_c_hu577e2202fd286aa7c358a8a67cada508_147422_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837739714_16f4236737_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/ANnxB48j1m3jTRdUNkkP7243IN0inG1RnPByc9ccZ61p2/xKsrkWzLCu2aRo/mOCcD5SPq3FeGWsVxd63FbwxEu8gQKeB16VuhHXUbHSby4iihFyYzLnhEDHOWJ5GB7d6qcbOyY4yVtUeq3PxM03TQU1KykjcMMGM7lZc/Mc&amp;#43;oz0rjdXl1FvFmnazo7SNBqb7l8xRsUt/C3B7Ec47d8VyEn/ABPfElvavOZVuJzEjvnhBgKcfgTVzUdVvII7S1nuA0tqx8pVOFhZeMAd&amp;#43;Mc&amp;#43;xrOUG1ZvUtVEndLQofEBEtvGepJEgCMySAehZAx/UmrOr2ptvBWjX5laWSUk4cfdyMcY9h3zVf4j/wDI7X/&amp;#43;7F/6LWr/AIi/5JvoP0/xrW&amp;#43;xjYj&amp;#43;GZ3&amp;#43;L4ZnAciOXAYdOB0/76NVNUtt&amp;#43;tXUrOSsdyyhRxwWweatfDL/AJGaL/cl/klM1P8A5CN//wBfZ/8AQhUdWVY//9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837739714_16f4236737_c_hu221a3bf2fea216999f986c353d9dbe1c_142791_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837568501_2e02d0e008_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOE0m2XUvE8UdzOsQlm3sykHHOex/StTSdBs7HWEa6umuI4Lx/KEcO9ZgCBk88Zx0pbPwxbWV2dQl1LybExl1cD50lHKrj35GfrVWw1Ge3dILCQwPG25C4BIJAxzitaUOZprrYmrJQ0luXtVtY7LzF8Pu09pYxyLO74V8knJ7ZGTxxnFF3eaLf6OjXdmZbi1&amp;#43;5h9u8ZO4HHbJ/WreiaDNcyNZy3Rg&amp;#43;2gJKsZPzDIJHPsOcnvWLqKxabe/ZLdpnjt5nSVJVGSCQc9SOQB&amp;#43;VPmSnKitXpp1sQkmo1Xtr95WuIZYdLnj&amp;#43;0MypcIjbuS3BxznpVaG3CW8U&amp;#43;9jJKzBsnjAxV&amp;#43;9/5B95/19p/I1WT/AI8Lb/fk/pRhW5RTY8T8Re1DXNQsbaGe3lCS/MokA&amp;#43;ZRgdD6&amp;#43;9YFrcS3F6xdz8oLsc5LH1zV7XP&amp;#43;PCD/AH2/kKzNO/4/Zf8Armf5itMY/ZylKOj0IwKU4xjLVH//2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837568501_2e02d0e008_c_hu62a426134963bc46fa05a4d4830a54c9_159786_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837250597_4e58850828_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOhtPE&amp;#43;mo8Ftdq1pJJzHG6AjOccbeB&amp;#43;AArSTV3v5SNMt45cZBZpVUd/U/wCeayj4P0B23SxsY4VwJTeucZJG3huOMfnTo/BGijzpFtTu4Fu09zIckHJJy3HP0p&amp;#43;1pvZj5GaM97qNrGr3kFu0XU7J1J9OnB79qp3nifS10p7sxu6Iu5gQFX2zn37c1FceBNHNvMn9nRPGEOyRZWQltxIBO7pz39PoKsPoOhR2hsxaxriMB45SzArnr155PWkq1LdsHBqOm5wdl44g07UBdPpUt3KUJBnuwQCMYP3Ofxpy&amp;#43;MxJJK0lnORK&amp;#43;/atyAM/98c1x0/&amp;#43;tT/rm39KsxVMoqUeWS0LjJxTS6nXp4uZpd3k3AXYFwLgbjjHU7OenpWx/wAJrbnSg50kk2zoqk3GDyfUKK4OKtD/AJg1x/11j/nUKjTvflXYc5ynZvof/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52837250597_4e58850828_c_hu62a426134963bc46fa05a4d4830a54c9_171576_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52836983222_6ce2d944d1_c.jpg"
class="galleryImg"
>
&lt;img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APWpRbFTuh65xwKyNUfSrZreOVWjkuH2oP7xwT/SuUOga1cAyXHiJjJFOJQYhwGAwTySAfm9O1UbzR0tGa6u9Subu7fGZWbkHHUeh5P51bulcSSk7HaQ2OkOT9ofbz0J4P6VnLJotxeT2ltJHI1s/IVgeMnHSuPuPGU9jcWgaVWiJZZEkH7yTBxkbRj19Kqyata6J4gv74BzJcAIIzg&amp;#43;WeSc47fj61z1JNq3U6KcLO47X5Z7TXrrTbO4ltmvT5jzxsQwJAzgfr&amp;#43;Jrkdf8ValHeNbRSbDGNhkJyW4xnnvx1rrfEv/ACPSf9cx/wCgivOPEP8AyGrj/epptyaYSSjBNEazS3kkayuTI0n&amp;#43;tJy2Tjqe/Suj0yJxdXitMztbWzOrEDnbjiuZsv8Aj6h/66r/ADrqtO/4/tX/AOvKX&amp;#43;QpvdBBn//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2023/05/april-2023-update/flickr/52836983222_6ce2d944d1_c_hufde754dc69add821f21f694442b2543e_140505_600x600_fit_q90_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-3b729650136dfad3c877cbe6d803b555-5");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "justify",
captions : false,
});
});
&lt;/script>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
May - tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;h4 id="flux-bug-scrub">Flux Bug Scrub&lt;/h4>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-03 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-11 17:00 UTC, 19:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-16 22:00 UTC, 0:00 CEST (+1)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-17 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-25 17:00 UTC, 19:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-30 22:00 UTC, 0:00 CEST (+1)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-05-31 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="michael-fornaro-joins-flux-as-a-project-member">Michael Fornaro joins Flux as a Project Member&lt;/h3>
&lt;p>We are pleased to announce that
&lt;a href="https://github.com/xUnholy/" target="_blank">Michael Fornaro&lt;/a>
has joined Flux as a
&lt;a href="https://github.com/fluxcd/community/blob/main/community-roles.md#project-member" target="_blank">project
member&lt;/a>.
Michael has been heavily involved in the Flux community, offering valuable
assistance and support through the Slack #flux channels and participating in
Flux Bug Scrub sessions.&lt;/p>
&lt;p>In collaboration with Kingdon, Michael is working to expand the Bug Scrub
initiative, recently launching the first AEST session to accommodate members
in Eastern Europe, India, Southeast Asia, and other regions including Australia.&lt;/p>
&lt;p>Michael is the founder of
&lt;a href="https://github.com/raspbernetes" target="_blank">Raspbernetes&lt;/a> and
co-founder in
&lt;a href="https://github.com/k8s-at-home/" target="_blank">K8s@Home&lt;/a>, both of which are
organizations that focus on learning and supporting Kubernetes at home. The
community has a strong presence on GitHub and
&lt;a href="https://discord.gg/sTMX7Vh" target="_blank">Discord&lt;/a>, where Michael has been a valuable contributor.&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;p>&lt;strong>Grafana Operator Blog:
&lt;a href="https://grafana-operator.github.io/grafana-operator/blog/2023/03/29/install-grafana-operator-using-flux-and-kustomize/" target="_blank">Install Grafana-operator using Flux and Kustomize&lt;/a>&lt;/strong>&lt;/p>
&lt;p>The grafana-operator team have recently started to ship their Kustomize
manifests using OCI with the help of Flux artifact. As a part of this,
they have written
&lt;a href="https://grafana-operator.github.io/grafana-operator/blog/2023/03/29/install-grafana-operator-using-flux-and-kustomize" target="_blank">a small blog on how to install grafana-operator using
Flux&lt;/a>
and how to manage grafana dashboards as code.&lt;/p>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://alluvial.finance" target="_blank">Alluvial&lt;/a>,
&lt;a href="https://orange.com" target="_blank">Orange&lt;/a>,
&lt;a href="https://kiln.fi" target="_blank">Kiln&lt;/a>,
&lt;a href="https://tchibo.de" target="_blank">Tchibo&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we will help to add you. Not only
is it great for us to get to know and welcome you to our community. It
also gives the team a big boost in morale to know where in the world
Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://github.com/fluxcd/website/tree/main/internal_docs" target="_blank">Internal documentation&lt;/a>
which explains how to use certain parts of the website.&lt;/li>
&lt;li>Updated our announcements for KubeCon EU 2023 and Google
Season of Docs 2023 to support the events better!&lt;/li>
&lt;li>Updates to the docs to move graduated APIs to &lt;code>v1&lt;/code>.&lt;/li>
&lt;li>New documentation:
&lt;a href="https://fluxcd.io/flux/cheatsheets/sharding/">Sharding Cheatsheet&lt;/a>.&lt;/li>
&lt;li>New additions to our
&lt;a href="https://fluxcd.io/resources/">resources page&lt;/a>.&lt;/li>
&lt;li>Lots of fixes and improvements all over the place.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Max Jonas Werner, Daniel Favour, Hidde Beydals, Claire Liguori,
David Blaisonneau, Eddie Zaneski, Jan Christoph Ebersbach, Mehdi Bechiri,
Romain Guichard, Sanskar Jaiswal, Stacey Potter, Tim Rohwedder,
harshitasao, lehnerj.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>
deploy apps with canaries, feature flags, and A/B rollouts. Flux
can also manage any Kubernetes resource. Infrastructure and workload
dependency management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with your Git
providers (GitHub, GitLab, Bitbucket, can even use s3-compatible
buckets as a source), all major container registries, fully
integrates
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/">with OCI&lt;/a> and all CI
workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>✨ Dashboards love Flux: No matter if you use one of
&lt;a href="https://fluxcd.io/ecosystem/#flux-uis--guis">the Flux UIs&lt;/a> or a hosted cloud
offering from your cloud vendor, Flux has a thriving ecosystem
of integrations and products built on top of it and all have
great dashboards for you.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/">other
chat systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Graduated project
and was categorised as &amp;ldquo;Adopt&amp;rdquo; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2023-05-04 or 2023-05-10.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: How to use Weave GitOps as your Flux UI</title><link>https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/</link><pubDate>Tue, 04 Apr 2023 08:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/wego-featured_hu053769197a9647a871b80b35799f23ef_504003_640x0_resize_box_3.png" width="640" height="440"/>
&lt;p>Here comes the newest blog post in our
&lt;a href="https://fluxcd.io/tags/ecosystem/">ecosystem category&lt;/a>.
One of the key reasons to rewrite Flux was to break up the former monolith
solution into separate controllers which provide distinct parts of the
functionality. This allows users to pick just the parts they need, and
integrators to very easily build on top of Flux&amp;rsquo;s APIs. Today we have a very
active
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem&lt;/a> - we very much welcome this to happen and
see it as an indicator of success.&lt;/p>
&lt;h2 id="an-introduction-to-weave-gitops">An introduction to Weave GitOps&lt;/h2>
&lt;p>Today we would like to talk about
&lt;a href="https://github.com/weaveworks/weave-gitops" target="_blank">Weave
GitOps&lt;/a>. It has
been built out in the open for about a year and brings among other
things one of the most requested additions to Flux: a UI.&lt;/p>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-3510214d32a2d8dc5bd033478b965178-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-3510214d32a2d8dc5bd033478b965178-0" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/wego2.png"
class="galleryImg"
>
&lt;img
width="600" height="413"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAEElEQVR4nGL6/uMnIAAA//8F2gLrBLOjVQAAAABJRU5ErkJggg=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/wego2_hu053769197a9647a871b80b35799f23ef_612680_600x600_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/wego-featured.png"
class="galleryImg"
>
&lt;img
width="600" height="413"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAEElEQVR4nGL6&amp;#43;fMXIAAA//8F4wLvmvkWLwAAAABJRU5ErkJggg=="
class="lazy"
data-src="https://fluxcd.io/blog/2023/04/how-to-use-weave-gitops-as-your-flux-ui/wego-featured_hu053769197a9647a871b80b35799f23ef_504003_600x600_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-3510214d32a2d8dc5bd033478b965178-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "justify",
captions : false,
});
});
&lt;/script>
&lt;br>
&lt;p>With Weave GitOps you&lt;/p>
&lt;ul>
&lt;li>manage and view applications all in one place&lt;/li>
&lt;li>easily see your continuous deployments and what is being produced
via GitOps&lt;/li>
&lt;li>sync your latest git commits directly from the UI&lt;/li>
&lt;li>leverage Kubernetes RBAC to control permissions in the dashboard&lt;/li>
&lt;li>quickly see the health of your reconciliation deployment runtime&lt;/li>
&lt;/ul>
&lt;p>The Weave GitOps team works very closely together with the Flux
Community - many engineers on both teams are actually colleagues.&lt;/p>
&lt;p>In addition to the UI Weave GitOps provides a frictionless way
to get up to speed with your GitOps experience:
&lt;a href="https://web.archive.org/web/20230922003942/https://docs.gitops.weave.works/docs/gitops-run/overview/" target="_blank">GitOps
Run&lt;/a>.
All you need to get started is a cluster and the Weave GitOps CLI.
Everything else, including Flux and the Weave GitOps Dashboard will be
set up automatically for you.&lt;/p>
&lt;p>GitOps Run actually does more than the setup. You see changes sync
almost in real time instead of the normal loop, where everything goes
through a PR process, enabling you to iterate very quickly without
sacrificing the GitOps pattern. The moment you are happy with the
changes you create a PR just as usual. It&amp;rsquo;s the best of both worlds.&lt;/p>
&lt;p>Watch this short video to see the beauty and ease of use: set up&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/2TJz7RhDtAc" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>If you are a Terraform user, you will love that the terraform-controller
is integrated by default and your terraform resources will show up in
the dashboard as well.&lt;/p>
&lt;h2 id="getting-started">Getting Started&lt;/h2>
&lt;p>Using GitOps Run as shown in the video above is the easiest way to get
set up. Period.&lt;/p>
&lt;p>Here is an example of how to get an app deployment set up using GitOps
(powered by Flux), including the dashboard.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;code>brew install fluxcd/tap/flux&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Head to
&lt;a href="https://github.com/stefanprodan/podinfo" target="_blank">podinfo&lt;/a>
and create a fork with the name &lt;code>podinfo-gitops-run&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Clone locally and change into the directory&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">export GITHUB_USER=&amp;lt;your github username&amp;gt;
# you can ignore these two commands if you already created and
# cloned your repository
git clone git@github.com:$GITHUB_USER/podinfo-gitops-run.git
cd podinfo-gitops-run
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>Now run the &lt;code>gitops&lt;/code> command with &lt;code>--no-session&lt;/code> as it&amp;rsquo;s a single user
cluster which we want to use in direct mode. The port-forward
points at the &lt;code>podinfo&lt;/code> pod we will create later on.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">gitops beta run ./podinfo --no-session \
--port-forward namespace=dev,resource=svc/backend,port=9898:9898
&lt;/code>&lt;/pre>&lt;p>The other arguments denote a directory where the manifests are
going to be stored and we set up port-forwarding for the
application we are about to install.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>During the installation process, Flux will be installed if it isn&amp;rsquo;t
and you will now be asked if you want to install the GitOps
&lt;a href="https://web.archive.org/web/20230927114646/https://docs.gitops.weave.works/docs/getting-started/intro/" target="_blank">dashboard&lt;/a>.
Answer &lt;code>yes&lt;/code> and &lt;strong>set a password&lt;/strong>.&lt;/p>
&lt;p>Note: If you do not set a password, you won&amp;rsquo;t be able to login to
the GitOps UI 😱.&lt;/p>
&lt;p>Shortly after you should be able to
&lt;a href="http://localhost:9001" target="_blank">open the
dashboard&lt;/a>. The username is &lt;code>admin&lt;/code> and the
password will be the one you set above.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you check the contents of the podinfo directory, you will notice
a &lt;code>kustomization.yaml&lt;/code> file. Edit the resources element to list
&lt;code>&amp;quot;../deploy/overlays/dev&amp;quot;&lt;/code> as well. It should like below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.config.k8s.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>dev-podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">resources&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;../deploy/overlays/dev&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;p>If you save the file, podinfo will be deployed and able to access it at
&lt;a href="http://localhost:9898" target="_blank">http://localhost:9898&lt;/a>.&lt;/p>
&lt;p>There&amp;rsquo;s more: if you Ctrl-C the running &amp;ldquo;gitops&amp;rdquo; process in the
terminal, you will be asked if you want to change the deployment to be
in &amp;ldquo;GitOps mode&amp;rdquo;, this means that the manifests for the cluster
definition and dashboard will be added as well and pushed to GitHub for
you.&lt;/p>
&lt;p>As you can see, Weave GitOps takes care of a lot of the repetitive tasks
and heavy lifting. A beautiful way to get set up and know that Flux is
doing everything behind the scenes for you.&lt;/p>
&lt;h2 id="is-there-more">Is there more?&lt;/h2>
&lt;p>There is an
&lt;a href="https://web.archive.org/web/20231206150400/https://docs.gitops.weave.works/docs/intro-ee/" target="_blank">Enterprise version of Weave
GitOps&lt;/a> as
well, so if you need professional support for everything mentioned
above, you will be covered. In addition to that, you get advanced
features, such as templates and GitOpsSets - these are what will enable
you to create a self-service for application teams.&lt;/p>
&lt;p>The Weave GitOps team is very friendly and are always happy to help and
receive feedback. Just join them in the &lt;code>#weave-gitops&lt;/code> channel on the
&lt;a href="https://weave-community.slack.com/join/shared_invite/zt-yqwtav03-QPo7W4Qoi1pL6W8UQYk2yQ" target="_blank">Weave Users Slack&lt;/a>.&lt;/p>
&lt;h2 id="come-and-talk-to-us">Come and talk to us&lt;/h2>
&lt;p>If you have feedback to this story, let us know on Slack or on social
media and if you have a story to tell yourself, come find us as well -
you can also hit us up on the
&lt;a href="https://github.com/fluxcd/website/" target="_blank">fluxcd.io website
repository&lt;/a>. We want to
report more stories from our ecosystem and Flux success stories. Thanks
in advance for reaching out!&lt;/p></description></item><item><title>Blog: March 2023 Update</title><link>https://fluxcd.io/blog/2023/04/march-2023-update/</link><pubDate>Mon, 03 Apr 2023 08:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/04/march-2023-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/04/march-2023-update/kubecon-featured_hu1ab32469e186ebbceb31191d5cfe4c5e_343285_640x0_resize_box_3.png" width="640" height="197"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our last update
&lt;a href="https://fluxcd.io/blog/2023/03/february-2023-update/">here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of April 2023 - let&amp;rsquo;s recap together what
happened in March - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-v041-more-performance-improvements-helm-related-features-and-flux-events">Flux v0.41: more performance improvements, Helm-related features and &amp;ldquo;flux events&amp;rdquo;&lt;/h3>
&lt;p>We have released
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.41.0" target="_blank">Flux v0.41&lt;/a>
with new features and improvements. As always, everyone is encouraged to upgrade for the
best experience.&lt;/p>
&lt;p>Here is a short-list of features and improvements in this release:&lt;/p>
&lt;ul>
&lt;li>Experimental support of drift detection of Helm releases compared to cluster-state.&lt;/li>
&lt;li>Improved handling of &lt;code>SIGTERM&lt;/code> signals received by the helm-controller, which will now
terminate running Helm install or upgrade actions, instead of potentially leaving them
in a pending state.&lt;/li>
&lt;li>Opt-in OOM watcher in helm-controller to handle graceful termination of the controller
before it is forcefully killed by Kubernetes&amp;rsquo; OOM killer.&lt;/li>
&lt;li>Kubernetes client and Custom Resource Definition life-cycle improvements to reduce the
memory consumption of the helm-controller, with observed reductions up to 50%.&lt;/li>
&lt;li>Opt-in allowance of DNS lookups during the rendering of Helm templates in the
helm-controller via feature gate.&lt;/li>
&lt;li>Optional disabling of the cache of the status poller used to determine the health of
the resources applied by the kustomize-controller. This may improve memory usage on
large scale clusters at the cost of more direct API calls.&lt;/li>
&lt;li>Changes to the logging of all controllers to ensure Kubernetes components like the
discovery client use the configured logging format.&lt;/li>
&lt;li>New &lt;code>flux events&lt;/code> command to display Kubernetes events for Flux resources, including
the events of a referenced resource.&lt;/li>
&lt;li>Custom annotations can now be set with &lt;code>flux push&lt;/code> using &lt;code>--annotations&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>It&amp;rsquo;s important to us to document all the new features, so here goes a list of new
articles and how-tos:&lt;/p>
&lt;ul>
&lt;li>Cheatsheet:
&lt;a href="https://fluxcd.io/flux/installation/configuration/helm-drift-detection/">Enable Helm drift
detection&lt;/a>&lt;/li>
&lt;li>Cheatsheet:
&lt;a href="https://fluxcd.io/flux/installation/configuration/helm-oom-detection/">Enable Helm near OOM
detection&lt;/a>&lt;/li>
&lt;li>Cheatsheet:
&lt;a href="https://fluxcd.io/flux/installation/configuration/helm-dns-lookup/">Allow Helm DNS
lookups&lt;/a>&lt;/li>
&lt;li>Controller:
&lt;a href="https://fluxcd.io/flux/components/helm/options/#feature-gates">New helm-controller feature gates and
options&lt;/a>&lt;/li>
&lt;li>Controller:
&lt;a href="https://fluxcd.io/flux/components/kustomize/options/#feature-gates">New kustomize-controller feature
gate&lt;/a>&lt;/li>
&lt;li>Spec:
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#drift-detection">HelmRelease drift
detection&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Big thanks to all the Flux contributors that helped us with this release!&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>
&lt;a href="https://web.archive.org/web/20231206150400/https://docs.gitops.weave.works/docs/intro-ee/" target="_blank">Weave GitOps Enterprise&lt;/a>
v0.19.0 brings a host of new features to help the Flux community streamline
their workflows and improve overall efficiency. The GitOpsSets GUI makes
it easier to manage applications across a fleet of clusters, while
additional generators like &lt;code>cluster&lt;/code>, &lt;code>gitRepository&lt;/code>, and &lt;code>apiClient&lt;/code>
offer enhanced functionality and customization. Weave GitOps Enterprise
now supports raw templating for greater flexibility, and the Sandbox
environments provide real-time visibility and testing capabilities
for Kubernetes infrastructure.&lt;/p>
&lt;p>New additions to the PolicyConfig UI simplify policy management, and the
SOPS Secrets features enable seamless GPG and AGE key management, making
it easier than ever to create encrypted secrets. Experience the benefits
of adopting Weave GitOps by leveraging these powerful new features for
Kubernetes environments.&lt;/p>
&lt;p>&lt;img src="wge-0.19.png" alt="Weave GitOps Enterprise v0.19">&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The team has been working on the new release of
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">Terraform
controller&lt;/a>. Bug fixes
related to the GitOps dependency management have been landed in the
main branch. So please feel free to try it out.&lt;/p>
&lt;p>The team has also been working closely with the Flux team to ensure
that Terraform controller will support everything in the coming Flux GA.&lt;/p>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flamingo, the Flux Subsystem for
Argo&lt;/a>, for ArgoCD 2.6
and Flux v0.41, has been released. Flamingo is the only tool that combines
the best two GitOps technologies together. Flux and ArgoCD are both
CNCF graduate projects.&lt;/p>
&lt;p>This new Flamingo version includes support for the following:&lt;/p>
&lt;ul>
&lt;li>Flux v0.41 which comes with many features and enhancements,&lt;/li>
&lt;li>Pack of new user interface features from ArgoCD 2.6&lt;/li>
&lt;/ul>
&lt;p>Chanwit Kaekwasi, the main developer of Flamingo, is looking for feedback.
If you use Flamingo and want to chat about how you use it, where you
would like it to go or just want to give some feedback, please find him on
the #flux channel on CNCF Slack. Thanks a lot in advance!&lt;/p>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>Version 0.24.0 of the
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">VS Code
extension&lt;/a> was released.
This version introduces a new feature for the users of Weave GitOps Enterprise:
Templates. Using Templates users can create complex GitOps configurations,
workflows and pipelines with a simple UI. Templates must be enabled in the
VS Code settings to be available. The
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools#readme" target="_blank">README
file&lt;/a> includes
further information.&lt;/p>
&lt;p>The team is continuing to work on UI and performance improvements. In the 0.24
release, the Sources and Workloads views are now grouped by Namespaces and
their details are presented in a consistent way.&lt;/p>
&lt;h4 id="new-additions-to-the-flux-ecosystem">New additions to the Flux Ecosystem&lt;/h4>
&lt;p>We are very happy to see Timoni joining the
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem&lt;/a>.&lt;/p>
&lt;p>
&lt;a href="https://github.com/stefanprodan/timoni" target="_blank">Timoni&lt;/a> is a package manager for Kubernetes, powered by
&lt;a href="https://cuelang.org" target="_blank">CUE&lt;/a> and inspired by Helm.&lt;/p>
&lt;p>The Timoni project strives to improve the UX of authoring Kubernetes configs. Instead of mingling Go templates with YAML like Helm, or layering YAML on top of each-other like Kustomize, Timoni relies on cuelang&amp;rsquo;s type safety, code generation and data validation features to offer a better experience of creating, packaging and delivering apps to Kubernetes.&lt;/p>
&lt;p>Timoni can be
&lt;a href="https://timoni.sh/gitops-flux/" target="_blank">used together with Flux&lt;/a> to create a
GitOps delivery pipeline for Timoni’s module instances.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">In my quest to write less &lt;a href="https://twitter.com/hashtag/Kubernetes?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Kubernetes&lt;/a> YAML this year, I&amp;#39;ve been hacking on a new tool called Timoni. &lt;br>&lt;br>Timoni is a package manager for Kubernetes, powered by &lt;a href="https://twitter.com/cue_lang?ref_src=twsrc%5Etfw">@cue_lang&lt;/a> and inspired by &lt;a href="https://twitter.com/HelmPack?ref_src=twsrc%5Etfw">@HelmPack&lt;/a>, Homebrew and Docker compose.&lt;a href="https://t.co/xrGCN5pZGY">https://t.co/xrGCN5pZGY&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1641721609378562055?ref_src=twsrc%5Etfw">March 31, 2023&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
March here are a couple of talks we would like to highlight.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/kGrpLKNi4ZI" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Kubernetes co-founder Brendan Burns and Flux maintainer Stefan Prodan
recently gave a CNCF talk on #ubernetes in 2023.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/zcG7TakGKHU" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Monolith to Microservices with Bite-Sized Kubernetes.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/rK1Y6d1A9Ck" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Cloud Native Live: Automating Kubernetes Deployments.&lt;/p>
&lt;p>Here is a list of additional videos and topics we really enjoyed -
please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
April - tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;h4 id="cloudnativecon--kubecon-eu-2023">CloudNativeCon / KubeCon EU 2023&lt;/h4>
&lt;p>&lt;img src="kubecon-featured.png" alt="CloudNativeCon / KubeCon EU 2023">&lt;/p>
&lt;p>We are very excited! From Tuesday, April 18 through Friday, April 21
it is
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank">CloudNativeCon / KubeCon EU
2023&lt;/a>
in Amsterdam.&lt;/p>
&lt;p>At the time of writing all the tickets have been sold out, so if you
managed to get one, we look forward to seeing you there! Let&amp;rsquo;s dig into
what&amp;rsquo;s happening over all of the days, because it is a lot.&lt;/p>
&lt;p>Here is
&lt;a href="https://bit.ly/Flux_KubeConEU_2023" target="_blank">the link to our mini-website&lt;/a>
to keep you up to date at all times.&lt;/p>
&lt;h5 id="tuesday-april-18">Tuesday, April 18&lt;/h5>
&lt;p>This is where CloudNativeCon starts and we are happy to have representation
at a number of Day-0 events.&lt;/p>
&lt;ul>
&lt;li>08:00:
&lt;a href="https://sched.co/1K65O" target="_blank">OpenGitOps Project Meeting&lt;/a> in the
Auditorium Center.&lt;/li>
&lt;li>11:55:
&lt;a href="https://sched.co/1Jo7P" target="_blank">Cloud Native Telco Day Panel: Looking Ahead to the Future with
Project Sylva, Energy Efficiency &amp;amp; Telco Cloud
Platforms&lt;/a>. Panelists are Niki Manoledaki
(Weaveworks), Philippe Ensarguet (Orange Business Services), Gergely
Csatári (Nokia), Tim Irnich (SUSE) in Hall 7, Room A.&lt;/li>
&lt;/ul>
&lt;p>In the afternoon, starting at 13:00 (1pm), we start our
&lt;a href="https://sched.co/1JWP8" target="_blank">&lt;strong>Flux Project
Gathering&lt;/strong> in Room G108 of the Auditorium Center&lt;/a>.
A lot of Flux maintainers and contributors will be there to chat with and
we have a nice programme prepared for you.&lt;/p>
&lt;ul>
&lt;li>1:00 pm Meet and Greet&lt;/li>
&lt;li>1:15 pm Welcome and Overview of Flux activities at KubeCon&lt;/li>
&lt;li>1:30 pm Intro to GitOps and Flux + Q&amp;amp;A (Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi)&lt;/li>
&lt;li>2:00 pm What&amp;rsquo;s New with Flux! Overview (Flux team)
&lt;ul>
&lt;li>Flux GA Release is coming up! What does that mean for you?&lt;/li>
&lt;li>Graduation and other updates!&lt;/li>
&lt;li>Contributing to Flux&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>3:00 pm Q&amp;amp;A time&lt;/li>
&lt;li>3:15 pm Break&lt;/li>
&lt;li>3:30 pm Flux &amp;amp; Other Tools
&lt;ul>
&lt;li>Terraform (Pinky)&lt;/li>
&lt;li>Vault (Pinky)&lt;/li>
&lt;li>Helm (Hidde Beydals)&lt;/li>
&lt;li>VS Code (Juozas Gaigalas)&lt;/li>
&lt;li>Secrets &amp;amp; Sops (Hidde)&lt;/li>
&lt;li>Cosign (Stefan)&lt;/li>
&lt;li>Plus lots of time for Q&amp;amp;A!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>4:45 pm Closing: Thanks and final questions&lt;/li>
&lt;/ul>
&lt;h5 id="wednesday-april-19">Wednesday, April 19&lt;/h5>
&lt;ul>
&lt;li>10:30 - 21:00 (9pm): Meet the Flux team at our booth at the Project Pavilion&lt;br>
at Project Pavilion, Kiosk 3&lt;/li>
&lt;li>11:00 - 11:35:
&lt;a href="https://sched.co/1HyVW" target="_blank">A CI/CD Platform in the Palm of Your Hand&lt;/a>&lt;br>
Claudia Beresford, Weaveworks at Elicium Building, D201-202&lt;/li>
&lt;li>11:55 - 12:30:
&lt;a href="https://sched.co/1HySr" target="_blank">Flux Beyond Git: Harnessing the Power of
OCI&lt;/a>&lt;br>
Stefan Prodan &amp;amp; Hidde Beydals, Weaveworks at Forum Center, E103-E104&lt;/li>
&lt;li>18:00 (6pm) - 20:00 (8pm): Meet the Flux team at our booth for the Booth Crawl&lt;br>
at Project Pavilion, Kiosk 3&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Update:&lt;/strong> previously the OCI talk was scheduled to happen at 17:25. 11:55 is correct.&lt;/p>
&lt;h5 id="thursday-april-20">Thursday, April 20&lt;/h5>
&lt;ul>
&lt;li>10:30 - 17:30 (5.30pm): Meet the Flux team at our booth at the Project Pavilion&lt;br>
at Project Pavilion, Kiosk 3&lt;/li>
&lt;li>16:00 - 16:30 (4.30pm): Flux Project Graduation Celebration&lt;br>
in Hall 5&lt;/li>
&lt;/ul>
&lt;h5 id="friday-april-21">Friday, April 21&lt;/h5>
&lt;ul>
&lt;li>10:30 - 14:30 (2.30pm): Meet the Flux team at our booth at the Project Pavilion&lt;br>
at Project Pavilion, Kiosk 3&lt;/li>
&lt;li>14:55 (2.55pm) - 15:30 (5.30pm):
&lt;a href="https://sched.co/1HydD" target="_blank">How GitOps Changed Our Lives &amp;amp; Can Change
Yours Too!&lt;/a> at Auditorium Center, G104-105&lt;br>
Priyanka Ravi, Weaveworks&lt;br>
Christian Hernandez, Red Hat&lt;br>
Filip Jansson, Strålfors&lt;br>
Roberth Strand, Amesto Fortytwo&lt;br>
Leigh Capili, VMware&lt;/li>
&lt;li>16:00 (4pm) - 16:35 (4.35 pm):
&lt;a href="https://sched.co/1Hyc9" target="_blank">Self-Service GitOps at a Regulated
Enterprise&lt;/a>&lt;br>
Erick Bourgeois (Freelance) at Auditorium Center, G104-105&lt;/li>
&lt;li>16:00 (4pm) - 16:35 (4.35 pm):
&lt;a href="https://sched.co/1Hybf" target="_blank">A Look Under the Hood of CNCF Security
Audits&lt;/a>&lt;br>
Adam Korczynski &amp;amp; David Korczynski, Ada Logics at Auditorium Center, Auditorium + Balcony&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Update:&lt;/strong> previously the time for the panel was 16:55, it has been moved to 14:55.&lt;/p>
&lt;h4 id="flux-bug-scrub">Flux Bug Scrub&lt;/h4>
&lt;p>The Flux Bug Scrub has undertaken a slightly new format, where we&amp;rsquo;ll be
spending more time working on our own code, and even building some new
software under the aegis of the &amp;ldquo;flux-community&amp;rdquo; organization! We&amp;rsquo;ll still
have our familiar spreadsheet every week, but we will be conversely
spending less time per-meeting on curating the list of issues across the
FluxCD org than we have been.&lt;/p>
&lt;p>The Bug Scrub community is small but growing; we need your feedback to make
this effort a blockbuster hit (which you can provide asynchronously, please
remember to @ KingdonB if you are interested, whether you can or cannot make
the meeting time!)&lt;/p>
&lt;p>Since we&amp;rsquo;ll be spending more time on code at the meeting, we are also
evaluating the possibility of a new, more inclusive &amp;ldquo;Late Late&amp;rdquo; Bug Scrub,
which would aim to be more accessible to people in the Asia/Pacific time zones,
Australia, as well as those in Eastern Europe, Middle East, and Africa. We hope
that there are some folks who might not have been able to make the earlier times,
who could benefit from this new addition. If you are in these time zones which
are not covered now, it&amp;rsquo;ll actually be &amp;ldquo;Early Work Hours&amp;rdquo; for you if we&amp;rsquo;ve
calibrated this correctly. (Good morning, Internet&amp;hellip;)&lt;/p>
&lt;p>The addition of another meeting at a new time of day, is intended to provide a
little extra time for the curation of issues to go along with our new format
change, and also to balance the scales somewhat better across all regions.
Now, we just need your feedback and RSVP to decide exactly what time this new
meeting should be! Please check out
&lt;a href="https://fluxcd.io/#calendar">the FluxCD calendar&lt;/a> for an
indication of when it has been scheduled, or ping KingdonB in the Flux channel
on CNCF slack if you have a strong opinion on the matter!&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-04-05 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-04-13 17:00 UTC, 19:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-04-19 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-04-27 17:00 UTC, 19:00 CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;p>&lt;strong>
&lt;a href="https://www.blakyaks.com/resources/aks-and-flux-via-terraform" target="_blank">blakyaks.com: AKS &amp;amp; Flux via
Terraform&lt;/a>&lt;/strong>&lt;/p>
&lt;p>Flux Adopters BlakYaks wrote this nice article in which they explain
how to bring Flux to AKS via Terraform. In closing they say:&lt;/p>
&lt;blockquote>
&lt;p>Hopefully by now you&amp;rsquo;ve got an idea of why we&amp;rsquo;re big advocates of GitOps
workflows and, in particular, Flux.&lt;/p>
&lt;p>The convention-based approach allows us to build complex application
deployments with ease, and by leveraging source control best practices
such as pull requests and branch policy we can quickly integrate
deployments into our existing CI/CD toolchains in a secure and scalable
manner.&lt;/p>
&lt;/blockquote>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://blakyaks.com" target="_blank">BlakYaks&lt;/a>,
&lt;a href="https://enliven.systems" target="_blank">Enliven Systems&lt;/a>,
&lt;a href="https://kratix.io" target="_blank">Kratix&lt;/a>,
&lt;a href="https://mytaxi.uz" target="_blank">MyTaxi&lt;/a>,
&lt;a href="https://scaleaq.com" target="_blank">ScaleAq&lt;/a>,
&lt;a href="https://szerzi.hu" target="_blank">Szerzi&lt;/a> and
&lt;a href="https://truelayer.com" target="_blank">TrueLayer&lt;/a>&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we will help to add you. Not only
is it great for us to get to know and welcome you to our community. It
also gives the team a big boost in morale to know where in the world
Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>Update of
&lt;a href="https://fluxcd.io/">fluxcd.io&lt;/a> landing page: we removed the terminal as it
had been outdated and slowed down the loading time. We also simplified
our messaging about Flux features and mission so it&amp;rsquo;s easier to
understand at a glance.&lt;/li>
&lt;li>We restructured our use of shortblocks, so the code structure is
more straight-forward.&lt;/li>
&lt;li>We applied for
&lt;a href="https://fluxcd.io/contributing/docs/google-season-of-docs-2023/">Google Season of Docs
2023&lt;/a>. If you are
interested in the initiative, go and check out the link.&lt;/li>
&lt;li>We added information about to
&lt;a href="https://fluxcd.io/flux/installation/configuration/helm-drift-detection/">enable Helm drift
detection&lt;/a>
and how to
&lt;a href="https://fluxcd.io/flux/installation/configuration/helm-dns-lookup/">allow Helm DNS
lookups&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>And on top of that countless fixes, small improvements and updates as
always. Thanks a lot to these folks who contributed to docs and website:
Stefan Prodan, Hidde Beydals, Arhell, Max Jonas Werner, Andreas Olsen Gulla,
Craig Hurt, Gangstead, Jake, KwongTN, Matteo Martellini, Metin OSMAN,
Sanskar Jaiswal, Timo Furrer and zoltan.zvara.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>
deploy apps with canaries, feature flags, and A/B rollouts. Flux
can also manage any Kubernetes resource. Infrastructure and workload
dependency management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with your Git
providers (GitHub, GitLab, Bitbucket, can even use s3-compatible
buckets as a source), all major container registries, fully
integrates
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/">with OCI&lt;/a> and all CI
workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>✨ Dashboards love Flux: No matter if you use one of
&lt;a href="https://fluxcd.io/ecosystem/#flux-uis--guis">the Flux UIs&lt;/a> or a hosted cloud
offering from your cloud vendor, Flux has a thriving ecosystem
of integrations and products built on top of it and all have
great dashboards for you.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/">other
chat systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Graduated project
and was categorised as &amp;ldquo;Adopt&amp;rdquo; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2023-04-06 or 2023-04-12.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: February 2023 Update</title><link>https://fluxcd.io/blog/2023/03/february-2023-update/</link><pubDate>Wed, 01 Mar 2023 07:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/03/february-2023-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/03/february-2023-update/flux-logo-featured_hufea4e097bf662c40cd9f97640e6b073b_205635_640x0_resize_box_3.png" width="640" height="338"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our last update
&lt;a href="https://fluxcd.io/blog/2023/02/january-2023-update/">here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of March 2023 - let&amp;rsquo;s recap together what
happened in February - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="two-flux-minor-releases-hit-the-streets">Two Flux minor releases hit the streets&lt;/h3>
&lt;p>Last month gave us two minor releases of Flux. Here&amp;rsquo;s what you
can look forward to on your next upgrade. As always: Users are
encouraged to upgrade for the best experience.&lt;/p>
&lt;h4 id="v040-imagerepository-and-imagepolicy-promote-to-v1beta2">v0.40: ImageRepository and ImagePolicy promote to v1beta2&lt;/h4>
&lt;p>
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.40.0" target="_blank">Flux v0.40&lt;/a>
brings a number of features and improvements:&lt;/p>
&lt;ul>
&lt;li>The &lt;code>GitRepository&lt;/code> API has a new optional field &lt;code>.spec.ref.name&lt;/code>
for specifying a Git Reference. This allows Flux to reconcile
resources from GitHub Pull Requests (&lt;code>refs/pull/&amp;lt;id&amp;gt;/head&lt;/code>) and
GitLab Merge Requests (&lt;code>refs/merge-requests/&amp;lt;id&amp;gt;/head&lt;/code>).&lt;br>
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0005-artifact-revision-and-digest" target="_blank">RFC-0005&lt;/a>
(source revision format) and
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0003-kubernetes-oci" target="_blank">RFC-0003&lt;/a>
(custom OCI media types) have been fully rolled out.&lt;/li>
&lt;li>The &lt;code>ImageRepository&lt;/code> and &lt;code>ImagePolicy&lt;/code> APIs have been promoted
to &lt;code>v1beta2&lt;/code>.&lt;/li>
&lt;li>The &lt;code>image-reflector-controller&lt;/code> autologin flags have been
deprecated, please see the
&lt;a href="https://github.com/fluxcd/image-reflector-controller/blob/main/CHANGELOG.md#0250" target="_blank">migration instructions to
v1beta2&lt;/a>.&lt;/li>
&lt;li>Allow specifying the cloud provider contextual login for container
registries with &lt;code>ImageRepository.spec.provider&lt;/code>.&lt;/li>
&lt;li>Improve observability of ImageRepository by showing the latest
scanned tags under &lt;code>.status.lastScanResult.latestTags&lt;/code>.&lt;/li>
&lt;li>Improve observability of &lt;code>ImagePolicy&lt;/code> by reporting the current
and previous image tag in status and events.&lt;/li>
&lt;li>The Kubernetes builtin cluster roles: &lt;code>view&lt;/code>, &lt;code>edit&lt;/code> and &lt;code>admin&lt;/code>
have been extended to allow access to Flux custom resources.&lt;/li>
&lt;li>Print a report of Flux custom resources and the amount of cumulative
storage used for each source type with &lt;code>flux stats -A&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>To read up on the details of the above, you might want to check out
these pieces of documentation:&lt;/p>
&lt;ul>
&lt;li>API:
&lt;a href="https://fluxcd.io/flux/components/image/imagerepositories/">ImageRepository v1beta2&lt;/a>&lt;/li>
&lt;li>API:
&lt;a href="https://fluxcd.io/flux/components/image/imagepolicies/">ImagePolicy v1beta2&lt;/a>&lt;/li>
&lt;li>Security:
&lt;a href="https://fluxcd.io/flux/security/#controller-permissions">Aggregated cluster roles&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="v039-better-security-support-improved-performance-and-observability">v0.39: better security support, improved performance and observability&lt;/h4>
&lt;p>
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.39.0" target="_blank">Flux v0.39&lt;/a> includes
these highlights:&lt;/p>
&lt;ul>
&lt;li>Starting with this version, the Flux controllers come with
&lt;a href="https://fluxcd.io/flux/security/">SBOMs and
SLSA Provenance Attestations&lt;/a>
embedded in their container images.&lt;/li>
&lt;li>The
&lt;a href="https://github.com/fluxcd/terraform-provider-flux" target="_blank">Flux Terraform Provider&lt;/a>
has a new resource for bootstrapping Flux, without depending on
third-party Terraform providers, that allows customising the
controllers at install time. Users are encouraged to migrate to
this new resource and provide feedback.&lt;/li>
&lt;li>The Flux CLI is now included in
&lt;a href="https://github.com/wolfi-dev/os" target="_blank">Wolfi OS&lt;/a>,
the Linux (Un)distro designed for securing the software supply chain. The
Chainguard team and Wolfi maintainers are shipping updates for the Flux
package on a regular basis.&lt;/li>
&lt;/ul>
&lt;p>Features and improvements include:&lt;/p>
&lt;ul>
&lt;li>Recreate immutable resources (e.g. Kubernetes Jobs) by annotating
or labeling them with &lt;code>kustomize.toolkit.fluxcd.io/force: enabled&lt;/code>.&lt;/li>
&lt;li>Support for HTTPS bearer token authentication for Git repositories.&lt;/li>
&lt;li>Improve memory usage by disabling the caching of &lt;code>Secret&lt;/code> and
&lt;code>ConfigMap&lt;/code> resources in all controllers.&lt;/li>
&lt;li>Better observability with progressive status updates for Sources
(Git, OCI, Helm, S3 Buckets).&lt;/li>
&lt;li>Allow extracting the OCI artifact SHA256 digest for Cosign with
&lt;code>flux push artifact -o json&lt;/code>.&lt;/li>
&lt;li>Track CRDs managed by Flux, &lt;code>flux trace&lt;/code> and &lt;code>flux tree&lt;/code> will show
which HelmRelease deployed which CRDs.&lt;/li>
&lt;li>Allow the Flux GitHub Action to use a GitHub token when checking
for updates to avoid rate limiting.&lt;/li>
&lt;/ul>
&lt;p>Documentation&lt;/p>
&lt;ul>
&lt;li>Security:
&lt;a href="https://fluxcd.io/flux/security/#software-bill-of-materials">Software Bill of Materials&lt;/a>&lt;/li>
&lt;li>Security:
&lt;a href="https://fluxcd.io/flux/security/#slsa-provenance">SLSA Provenance Attestations&lt;/a>&lt;/li>
&lt;li>Security:
&lt;a href="https://fluxcd.io/flux/security/#scanning-for-cves">Scanning Flux images for CVEs&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Big thanks to all the Flux contributors that helped us with this release!&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>We extended our
&lt;a href="https://fluxcd.io/flux/security/">Security Docs&lt;/a> to show more examples for
verifying SBOMs. Now the newly introduced SLSA Provenance Attestation
feature is documented as well.&lt;/p>
&lt;h3 id="flagger-1290-brings-support-for-template-variables-for-analysis-metrics">Flagger 1.29.0 brings support for template variables for analysis metrics&lt;/h3>
&lt;p>A canary analysis metric can reference a set of custom variables with
&lt;code>.spec.analysis.metrics[].templateVariables&lt;/code>. For more info see the
&lt;a href="https://fluxcd.io/flagger/usage/metrics/#custom-metrics">docs&lt;/a>. Furthermore, a bug related
to Canary releases with session affinity has been fixed.&lt;/p>
&lt;p>Improvements &amp;amp; Fixes&lt;/p>
&lt;ul>
&lt;li>Allow custom affinities for flagger deployment in helm chart&lt;/li>
&lt;li>Add namespace to namespaced resources in helm chart&lt;/li>
&lt;li>modify release workflow to publish rc images&lt;/li>
&lt;li>build: Enable SBOM and SLSA Provenance&lt;/li>
&lt;li>Add support for custom variables in metric templates&lt;/li>
&lt;li>docs(readme.md): add additional tutorial&lt;/li>
&lt;li>use regex to match against headers in istio&lt;/li>
&lt;/ul>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.17.0" target="_blank">The latest release&lt;/a>
includes enhancements, improvements, bug fixes, and documentation updates
to enhance Weave GitOps&amp;rsquo; overall functionality and user experience.&lt;/p>
&lt;p>Enhancements in this version include improved detection of the OSS
dashboard and the addition of imagePolicy details. The get-session
logs feature has also been enhanced to support pod logs, filters, and
return logging sources. A new optional tooltip has been added to the
Timestamp component, and the formatting of log message timestamps in
the log UI has been improved.&lt;/p>
&lt;p>UI enhancements in this version aim to improve the overall user
experience of Weave GitOps. Access properties on undefined
&lt;code>ImageAutomation&lt;/code> objects can now be handled, and an issue where
graph nodes hopped around has been fixed. A text search has been
added to table URLs, and undefined icon types can now be handled.&lt;/p>
&lt;p>The Helm reloading strategy has been fixed, and the chart spec has
been updated with &lt;code>values.yaml&lt;/code> to address reloading issues.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The latest release of TF-Controller, version v0.14.0, introduces
several new features and many bug fixes. Notably, the release offers
first-class support for Terraform Cloud with the &lt;code>spec.cloud&lt;/code> field. This
enhancement allows Weave GitOps Enterprise users to leverage GitOps
Templates with Terraform Cloud as a backend for their Terraform resources,
opening up a world of possibilities for GitOps workflows.&lt;/p>
&lt;p>In addition to Terraform Cloud support, the update upgrades Flux to
v0.40.0 and Terraform to v1.3.9, with bug fixes including improved AWS
package documentation, and missing inventory entries.&lt;/p>
&lt;p>The new release also offers multi-arch image support, customizable
controller log encoding, and the option to configure Kube API QPS and
Burst. The Terraform apply stage now features a parallelism option for
even more customization.&lt;/p>
&lt;p>Users are highly recommended to upgrade to TF-Controller v0.14.0 to
take advantage of these improvements. For any feedback or questions,
please reach out to the team on
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">the GitHub
repository&lt;/a>.&lt;/p>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>The team has recently updated
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flamingo&lt;/a> by rebasing
it onto the upstream ArgoCD versions v2.3.17, v2.4.23, and 2.5.11. This
update has been made in response to the recent vulnerability
CVE-2023-23947, and the team strongly recommends that all users update
their systems as soon as possible.&lt;/p>
&lt;p>Updated Flamingo images are:&lt;/p>
&lt;ul>
&lt;li>v2.3.17-fl.3-main-bc5b4abb&lt;/li>
&lt;li>v2.4.23-fl.3-main-bc5b4abb&lt;/li>
&lt;li>v2.5.11-fl.3-main-bc5b4abb&lt;/li>
&lt;/ul>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>Version 0.23.0 of the
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">vscode-gitops-tools
extension&lt;/a> was released.
This version introduces a new webview for configuring &lt;code>GitRepository&lt;/code>,
&lt;code>HelmRepository&lt;/code>, &lt;code>OCIRepository&lt;/code>, &lt;code>Bucket&lt;/code> and &lt;code>Kustomization&lt;/code> resources.
Extension context (right-click) file and folder actions now work with multiple
open repositories in the expected way.&lt;/p>
&lt;h4 id="pulumi-kubernetes-operator">Pulumi Kubernetes Operator&lt;/h4>
&lt;p>Michel Bridgen wrote a blog post about
&lt;a href="https://fluxcd.io/blog/2023/02/flux-pulumi-superpowers/">how to combine Pulumi with
Flux&lt;/a> using the Pulumi Kubernetes
Operator, which extends the reach of both Flux and Pulumi.&lt;/p>
&lt;p>What you can look forward to in the next release of the operator is that -
based on Paolo&amp;rsquo;s work on git-go - the operator (and Pulumi itself)
&lt;a href="https://github.com/pulumi/pulumi/pull/12001" target="_blank">will be able
work with Azure DevOps&lt;/a>.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
February here are a couple of talks we would like to highlight.&lt;/p>
&lt;p>Here is a list of additional videos and topics we really enjoyed -
please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
March - tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;ul>
&lt;li>2nd March:
&lt;a href="https://www.meetup.com/gitops-community/events/291670250" target="_blank">GitOps Testing in Kubernetes with Flux &amp;amp;
Testkube&lt;/a>&lt;/li>
&lt;li>7th March:
&lt;a href="https://www.mirantis.com/labs/gitops-automatic-deployments-and-updates-with-flux/" target="_blank">GitOps: Automatic Deployments and Updates with Flux w/
Julian Hennig&lt;/a>&lt;/li>
&lt;li>9th March:
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-the-path-to-cloud-adoption-and-app-modernization/" target="_blank">CNCF On Demand- Microservices and
Kubernetes&lt;/a>&lt;/li>
&lt;li>15th March:
&lt;a href="https://community.cncf.io/e/mbmpq8/" target="_blank">CNCF Live Stream - Automating Kubernetes
Deployments&lt;/a>&lt;/li>
&lt;li>16th March:
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-kubernetes-in-2023/" target="_blank">CNCF On Demand- Kubernetes in 2023 w/ Stefan Prodan &amp;amp;
Brendan Burns&lt;/a>&lt;/li>
&lt;li>23rd March: Microsoft Live Stream: Automating Kubernetes Deployments&lt;/li>
&lt;/ul>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-03-02 18:00 UTC, 19:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-03-08 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-03-16 18:00 UTC, 19:00 CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-03-22 12:00 UTC, 14:00 CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="gitlab-adopts-flux-for-gitops">Gitlab adopts Flux for GitOps&lt;/h3>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Have some great news about &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> and &lt;a href="https://twitter.com/gitlab?ref_src=twsrc%5Etfw">@gitlab&lt;/a>. In todays dev meeting, &lt;a href="https://twitter.com/nagyviktor?ref_src=twsrc%5Etfw">@nagyviktor&lt;/a> shared with us that GitLab has chosen Flux to offer &lt;a href="https://twitter.com/hashtag/GitOps?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOps&lt;/a> to their users. The Flux team is super excited about collaborating with GitLab 🎉 &lt;a href="https://t.co/3f9tHJbhnX">https://t.co/3f9tHJbhnX&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1618655919449206785?ref_src=twsrc%5Etfw">January 26, 2023&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>We are incredibly pleased that GitLab chose to move forward with Flux
for the GitOps capabilities in their project. In the past weeks,
members of the GitLab team joined our Dev meetings where it became
clearer what needs to happen next. This is another great recognition
of the versatility and great feature set of Flux and we very much
look forward to the collaboration.&lt;/p>
&lt;p>Please check out
&lt;a href="https://about.gitlab.com/blog/2023/02/08/why-did-we-choose-to-integrate-fluxcd-with-gitlab" target="_blank">the
announcement&lt;/a>
on the GitLab blog, which links to all the individual discussions and
development epics where you can track the progress of the integration.&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;p>
&lt;a href="https://truelayer.com/blog/flux2-migration-how-we-dropped-cpu-usage-by-nearly-40x" target="_blank">TrueLayer: Flux2 migration: how we dropped our CPU usage by nearly
40x&lt;/a>&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 510px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2023/03/february-2023-update/truelayer-post_hu4da462767df32904dc78d1a62dcdc09c_278933_500x0_resize_box_3.png" width="500" height="282">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>We love hearing end-user success stories, particularly to learn how a
&lt;a href="https://fluxcd.io/flux/migration/">migration&lt;/a> went well. Surya Pandian wrote up the
entire experience in the blog post and comes to this conclusion:&lt;/p>
&lt;blockquote>
&lt;p>With our original Flux setup, we were running one pod per GitOps,
and with 40 teams, that required a lot of cash and CPU. But with
this setup, we run just one flux GitOps agent for an entire cluster.
In total, one flux GitOps agent manages over 40 GitRepoCRDResources
and 240 FluxKustomizeCRDResources.&lt;/p>
&lt;p>Our migration to Flux2 has paved the way for a config-managed setup.
Not only did this drastically reduce costs, but it also made Flux
reconciliations faster and reduced CPU usage by almost 40x.&lt;/p>
&lt;p>As the sun sets on Flux1, migrating to Flux2 may sound like a daunting
task. But with the right migration plan, engineering teams can reap
the benefits.&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://testkube.io/blog/flux-testkube-gitops-testing-is-here" target="_blank">Flux + Testkube: GitOps Testing is
here&lt;/a>&lt;/p>
&lt;p>Abdallah Abedraba describes how to set up Flux with Testkube in the
blog post in an easy to follow step-by-step fashion. The takeaway is:&lt;/p>
&lt;blockquote>
&lt;p>Once fully realized - using GitOps for testing of Kubernetes applications
as described above provides a powerful alternative to a more traditional
approach where orchestration is tied to your current CI/CD tooling and
not closely aligned with the lifecycle of Kubernetes applications.&lt;/p>
&lt;p>This tutorial uses Postman collections for testing an API, but you can
bring your a whole suite of tests with you to Testkube.&lt;/p>
&lt;/blockquote>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://www.b1-systems.de/" target="_blank">B1 Systems
GmbH&lt;/a> and
&lt;a href="https://wildlifestudios.com/" target="_blank">Wildlife
Studios&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we will help to add you. Not only
is it great for us to get to know and welcome you to our community. It
also gives the team a big boost in morale to know where in the world
Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Bootstrapping: here&amp;rsquo;s how to
&lt;a href="https://fluxcd.io/flux/installation/configuration/multitenancy/#flux-cluster-role-aggregations">disable Kubernetes cluster role
aggregations&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Update
&lt;a href="https://fluxcd.io/flux/guides/image-update/">image-updates guide&lt;/a> to reflect the new
API version and recent use of flags, extend examples.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We updated the docs to reflect current Flux version and fixed typos
and readability pieces in many many places.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We updated our
&lt;a href="https://fluxcd.io/flux/security/">Security Docs&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Ben
Bodenmiller, Stefan Prodan, Stefan Bodenmiller, Michael Bridgen,
Hidde Beydals, Sunny, Kingdon Barrett, Mac Chaffee, Ronan, Sanskar
Jaiswal, zipizapclouds.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>
deploy apps with canaries, feature flags, and A/B rollouts. Flux
can also manage any Kubernetes resource. Infrastructure and workload
dependency management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with your Git
providers (GitHub, GitLab, Bitbucket, can even use s3-compatible
buckets as a source), all major container registries, fully
integrates
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/">with OCI&lt;/a> and all CI
workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>✨ Dashboards love Flux: No matter if you use one of
&lt;a href="https://fluxcd.io/ecosystem/#flux-uis--guis">the Flux UIs&lt;/a> or a hosted cloud
offering from your cloud vendor, Flux has a thriving ecosystem
of integrations and products built on top of it and all have
great dashboards for you.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/">other
chat systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Graduated project
and was categorised as &amp;ldquo;Adopt&amp;rdquo; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2023-03-09 or 2023-03-15.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: How Flux and Pulumi give each other superpowers</title><link>https://fluxcd.io/blog/2023/02/flux-pulumi-superpowers/</link><pubDate>Tue, 14 Feb 2023 08:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/02/flux-pulumi-superpowers/</guid><description>
&lt;img src="https://fluxcd.io/blog/2023/02/flux-pulumi-superpowers/flying-sparkles-purple-cape-featured_hufcb8a54e4f3d1acc465b5cb00164b2c0_21207_640x0_resize_box_3.png" width="640" height="349"/>
&lt;p>
&lt;a href="https://pulumi.com/" target="_blank">Pulumi&lt;/a> is an &amp;ldquo;Infrastructure as Code&amp;rdquo; tool that lets you specify your
infrastructure as programs written in JavaScript, Python, Java, Go, .NET languages, or YAML. The
&lt;a href="https://github.com/pulumi/pulumi-kubernetes-operator" target="_blank">Pulumi Kubernetes operator&lt;/a> drives Pulumi
from Kubernetes, so you can maintain your infrastructure by pushing commits to git and letting
automation take it from there.&lt;/p>
&lt;img class="img-fluid float-left m-3" alt="Pulumi mascot with sparkling cape" src="flying-sparkles-purple-cape-featured.png" />
&lt;p>Recently, we added support to the operator for
&lt;a href="https://www.pulumi.com/docs/guides/continuous-delivery/pulumi-kubernetes-operator/#using-a-flux-source" target="_blank">using Flux
sources&lt;/a>. This
is a great addition to the operator, but it&amp;rsquo;s not the only way Flux and Pulumi can work together.&lt;/p>
&lt;p>Below I&amp;rsquo;m going to talk about how Flux and Pulumi can be combined, and the superpowers each grants
to the other.&lt;/p>
&lt;h2 style="clear:left;">Adding OCI support and supply chain security to Pulumi&lt;/h2>
&lt;p>The support for Flux sources in the Pulumi operator gives you more ways to make your Pulumi programs
available to the operator. Notably, you can now package your program as an OCI image and push it to
an image registry, before using it with the operator. This might be appealing if you have deployment
pipelines to generate Kubernetes YAML (e.g., from
&lt;a href="https://cuelang.org/" target="_blank">Cue&lt;/a>) or other data, before
using it in a program. It&amp;rsquo;s also convenient when you&amp;rsquo;re on a platform like AWS, GCP or Azure,
because these have OCI registries with useful operational features like caching, security scanning,
and so on.&lt;/p>
&lt;p>But I think an even better reason for using Flux is that it can verify your sources. If you use a
Flux source in a Pulumi stack, you can better secure your supply chain. When you&amp;rsquo;re using an OCI
repository source for example,
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#verification">Flux will check Cosign
signatures&lt;/a> on each image
for you, and refuse to update a source that does not have a valid signature.&lt;/p>
&lt;!-- ASCII art here? Or a YAML example. -->
&lt;p>A more subtle security benefit of Flux sources is context-based authorization. For example, in AWS
the Flux controller can take advantage of
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/#contextual-authorization">workload
identity&lt;/a> to gain access
to an ECR container registry containing your sources, so that you don&amp;rsquo;t have to explicitly manage
credentials.&lt;/p>
&lt;h2 id="using-pulumi-to-extend-the-reach-of-flux">Using Pulumi to extend the reach of Flux&lt;/h2>
&lt;p>With Pulumi you are not restricted to Kubernetes resources &amp;ndash; you can create any resource defined in
a provider, e.g., within AWS, GCP, and Azure, among
&lt;a href="https://pulumi.com/registry/" target="_blank">many such platforms and
services&lt;/a>. You can
&lt;a href="https://www.pulumi.com/docs/intro/languages/yaml/" target="_blank">write a Pulumi program in
YAML&lt;/a>, and you can
&lt;a href="https://www.pulumi.com/docs/guides/continuous-delivery/pulumi-kubernetes-operator/#using-a-program-object" target="_blank">declare a YAML program as a
Kubernetes custom
resource&lt;/a>,
making the whole chain amenable to
&lt;a href="https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md" target="_blank">Kubernetes Resource Model
(KRM)&lt;/a>-oriented
tooling, including Flux.&lt;/p>
&lt;p>For example, here&amp;rsquo;s Kubernetes YAMLs for creating an AWS EC2 instance, and a security group, with
Pulumi:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># This is a program for creating the EC2 instance and security group&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>pulumi.com/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Program&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ec2-instance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">program&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">resources&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">group&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>aws:ec2:SecurityGroup&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">properties&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">description&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Enable HTTP access&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ingress&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">protocol&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>tcp&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">fromPort&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">80&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">toPort&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">80&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cidrBlocks&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;0.0.0.0/0&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">server&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>aws:ec2:Instance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">properties&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ami&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ami-6869aa05&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">instanceType&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>t2.micro&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">vpcSecurityGroupIds&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>${group.name}&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">outputs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">publicIp&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>${server.publicIp}&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">publicDns&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>${server.publicDns}&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># This stack tells the operator how to run the program&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>pulumi.com/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Stack&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>dev-ec2-instance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">stack&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>squaremo/ec2-instance/dev&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">programRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ec2-instance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">destroyOnFinalize&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">config&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">aws:region&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>us-east-1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can commit these in files in git, and have them synced by Flux. Then the Pulumi operator will
take over, create the infrastructure as it&amp;rsquo;s declared, and mark the Stack object as ready. As far as
Flux knows, these are just regular Kubernetes resources &amp;ndash; but now you can bring your whole
infrastructure under control!&lt;/p>
&lt;h2 id="using-flux-to-simplify-kubernetes-for-pulumi">Using Flux to simplify Kubernetes for Pulumi&lt;/h2>
&lt;p>Pulumi makes a huge variety of infrastructure accessible by
&lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/" target="_blank">&lt;em>just writing
programs&lt;/em>&lt;/a>. In the specific context
of Kubernetes, many folks will find KRM-oriented tooling and YAML files easier. Flux&amp;rsquo;s Kustomize and
Helm controllers work alongside its source controller, but happily they also work in harmony with
the Pulumi operator, and you can mix and match to suit yourself.&lt;/p>
&lt;p>For example, you might find it useful to write all your Pulumi Program and Stack YAMLs as files in a
directory for Flux to sync, rather than trying to create them in Pulumi code (or &amp;ndash; horror &amp;ndash;
applying them by hand).&lt;/p>
&lt;h2 id="getting-started-with-flux-and-the-pulumi-operator">Getting started with Flux and the Pulumi operator&lt;/h2>
&lt;p>If you are already invested in Pulumi, it would make sense to bootstrap &lt;strong>Flux, using Pulumi&lt;/strong>. You
can use the
&lt;a href="https://www.pulumi.com/registry/packages/flux/" target="_blank">Flux provider for Pulumi&lt;/a> from your
Pulumi program, and gain verified sources and effortless YAML syncing.&lt;/p>
&lt;p>And, vice versa &amp;ndash; if you are starting with Flux and want to expand its reach with Pulumi, you can
bootstrap the &lt;strong>Pulumi operator, using Flux&lt;/strong>, by syncing the deployment manifests in the operator&amp;rsquo;s
GitHub repo:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>pulumi-operator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m0s&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;1.11.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/pulumi/pulumi-kubernetes-operator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>deploy-pulumi-operator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m0s&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./deploy/yaml&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>pulumi-operator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Visit
&lt;a href="https://www.pulumi.com/docs/get-started/" target="_blank">Pulumi&amp;rsquo;s &amp;ldquo;Get Started&amp;rdquo; portal&lt;/a> to learn more about
what you can accomplish with Pulumi.&lt;/p></description></item><item><title>Blog: January 2023 Update</title><link>https://fluxcd.io/blog/2023/02/january-2023-update/</link><pubDate>Wed, 01 Feb 2023 08:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2023/02/january-2023-update/</guid><description>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our last update
&lt;a href="https://fluxcd.io/blog/2022/12/november-2022-update/">here&lt;/a>.&lt;/p>
&lt;p>Now it&amp;rsquo;s the beginning of February 2023 - let&amp;rsquo;s recap together what
happened in December and January - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-038-brings-performance-improvements-and-new-features">Flux 0.38 brings performance improvements and new features&lt;/h3>
&lt;p>We have released Flux v0.38. Users are encouraged to upgrade for the best
experience. Here is a short summary of its features and improvements:&lt;/p>
&lt;ul>
&lt;li>Graduation of Notification APIs to &lt;code>v1beta2&lt;/code>, to upgrade please see
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.38.0" target="_blank">the release notes&lt;/a>.&lt;/li>
&lt;li>Support for defining Kustomize components with &lt;code>Kustomization.spec.components&lt;/code>.&lt;/li>
&lt;li>Support for piping multi-doc YAMLs when publishing OCI artifacts with
&lt;code>kustomize build . | flux push artifact --path=-&lt;/code>.&lt;/li>
&lt;li>Support for Gitea commit status updates with &lt;code>Provider.spec.type&lt;/code> set to
&lt;code>gitea&lt;/code>.&lt;/li>
&lt;li>Improve the memory usage of &lt;code>helm-controller&lt;/code> by disabling the caching of
&lt;code>Secret&lt;/code> and &lt;code>ConfigMap&lt;/code> resources.&lt;/li>
&lt;li>Update the Helm SDK to v3.10.3 (fix for Helm CVEs).&lt;/li>
&lt;li>All code references to &lt;code>libgit2&lt;/code> were removed, and the
&lt;code>GitRepository.spec.gitImplementation&lt;/code> field is no longer being honored.&lt;/li>
&lt;/ul>
&lt;p>The official
&lt;a href="https://github.com/fluxcd/flux2-kustomize-helm-example" target="_blank">example repository&lt;/a>
was refactored. The new version comes with the following improvements:&lt;/p>
&lt;ul>
&lt;li>Make the example compatible with ARM64 Kubernetes clusters.&lt;/li>
&lt;li>Add Weave GitOps Helm release to showcase the
&lt;a href="https://github.com/fluxcd/flux2-kustomize-helm-example#access-the-flux-ui" target="_blank">Flux
UI&lt;/a>.&lt;/li>
&lt;li>Replace the ingress-nginx Bitnami chart with the official one that contains
multi-arch container images.&lt;/li>
&lt;li>Add cert-manager Helm release to showcase how to install CRDs and custom
resources using &lt;code>dependsOn&lt;/code>.&lt;/li>
&lt;li>Add Let’s Encrypt ClusterIssuer to showcase how to patch resources in
production with Flux &lt;code>Kustomization&lt;/code>.&lt;/li>
&lt;li>Add the &lt;code>flux-system&lt;/code> overlay to showcase how to configure Flux at
bootstrap time.&lt;/li>
&lt;/ul>
&lt;p>♥ Big thanks to all the Flux contributors that helped us with this release!&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>Flux 0.39, the
&lt;a href="https://github.com/fluxcd/flux2/issues/3533" target="_blank">upcoming release&lt;/a>,
will come with SBOMs and SLSA Provenance attached to all the controllers
container images. In addition, all controller images will be updated to
Alpine 3.17 (which contains CVE fixes for OS packages).&lt;/p>
&lt;p>Starting with 0.39, the Flux controllers should consume less memory on busy
clusters due to the disabling of &lt;code>Secret&lt;/code> and &lt;code>ConfigMap&lt;/code> caching.&lt;/p>
&lt;h3 id="flagger-127-and-128-add-support-for-apisix-and-different-autoscaling-configs">Flagger 1.27 and 1.28 add support for APISIX and different autoscaling configs&lt;/h3>
&lt;p>1.28 comes with support for setting a different autoscaling
configuration for the primary workload.
The &lt;code>.spec.autoscalerRef.primaryScalerReplicas&lt;/code> is useful in the
situation where the user does not want to scale the canary workload
to the exact same size as the primary, especially when opting for a
canary deployment pattern where only a small portion of traffic is
routed to the canary workload pods.&lt;/p>
&lt;p>1.27 comes with support for
&lt;a href="https://apisix.apache.org/" target="_blank">Apache APISIX&lt;/a>.
For more details see
&lt;a href="https://fluxcd.io/flagger/tutorials/apisix-progressive-delivery/">the tutorial&lt;/a>.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flamingo&lt;/a> is a tool that
combines Flux and Argo CD to provide the best of both worlds for
implementing GitOps on Kubernetes clusters. With Flamingo, you can:&lt;/p>
&lt;ul>
&lt;li>Automate the deployment of your applications to Kubernetes clusters and
benefit from the improved collaboration and deployment speed and
reliability that GitOps offers.&lt;/li>
&lt;li>Enjoy a seamless and integrated experience for managing deployments,
with the automation capabilities of Flux embedded inside the
user-friendly interface of Argo CD.&lt;/li>
&lt;li>Take advantage of additional features and capabilities that are not
available in either Flux or Argo CD individually, such as the robust Helm
support from Flux, Flux OCI Repository, Weave GitOps Terraform Controller
for Infrastructure as Code, Weave Policy Engine, or Argo CD
&lt;code>ApplicationSet&lt;/code> for Flux-managed resources.&lt;/li>
&lt;/ul>
&lt;p>In recent releases, the team updated Flamingo to support Flux v0.38 and Argo
CD v2.5.7, v2.4.19 and v2.3.13. Please note that Argo CD v2.2 will not be
supported and updated by Flamingo anymore.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:center">Flux&lt;/th>
&lt;th style="text-align:center">Argo CD&lt;/th>
&lt;th>Image&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:center">v0.38&lt;/td>
&lt;td style="text-align:center">v2.5&lt;/td>
&lt;td>v2.5.9-fl.3-main-14aff24e&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">v0.38&lt;/td>
&lt;td style="text-align:center">v2.4&lt;/td>
&lt;td>v2.4.21-fl.3-main-14aff24e&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">v0.38&lt;/td>
&lt;td style="text-align:center">v2.3&lt;/td>
&lt;td>v2.3.15-fl.3-main-14aff24e&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">v0.37&lt;/td>
&lt;td style="text-align:center">v2.2&lt;/td>
&lt;td>v2.2.16-fl.3-main-2bba0ae6&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">tf-controller&lt;/a> team
is currently working on getting
&lt;a href="https://github.com/weaveworks/tf-controller/issues/344" target="_blank">the new release
v0.14&lt;/a> out.
They are updating the Terraform binary to version 1.3.7 and the Flux tool
to version 0.38. Additionally, they are fixing the Helm chart and enabling
the parallelism option for the apply stage. They are currently at release
candidate v0.14.0-rc.2 with the new Helm chart version 0.10.0. Please stay
tuned for further updates.&lt;/p>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>Besides a huge amount of general small improvements, the team has fixed two
security vulnerabilities
(
&lt;a href="https://github.com/weaveworks/weave-gitops/security/advisories/GHSA-wr3c-g326-486c" target="_blank">1&lt;/a>,
&lt;a href="https://github.com/weaveworks/weave-gitops/security/advisories/GHSA-89qm-wcmw-3mgg" target="_blank">2&lt;/a>)
and made
&lt;a href="https://web.archive.org/web/20230922003942/https://docs.gitops.weave.works/docs/gitops-run/overview/" target="_blank">GitOps Run&lt;/a> much
more secure along the way. If you&amp;rsquo;re using a version older than 0.12.0 you are highly
encouraged to upgrade.&lt;/p>
&lt;p>Also with GitOps Run you can now open the deployed application&amp;rsquo;s Web UI by
simply hitting a key on your keyboard. GitOps Run sets up the port-forwarding
and opens up a browser window for you.&lt;/p>
&lt;p>As always lots of improvements went into Weave GitOps&amp;rsquo; Web UI so make sure to
take a look.&lt;/p>
&lt;p>On the Weave GitOps Enterprise side you can now automatically
&lt;a href="https://web.archive.org/web/20230929222447/https://docs.gitops.weave.works/docs/pipelines/pipeline-templates/" target="_blank">create Pipelines
from
GitOpsTemplates&lt;/a>,
the
&lt;a href="https://web.archive.org/web/20230922014632/https://docs.gitops.weave.works/docs/terraform/overview/" target="_blank">Terraform UI&lt;/a>
has been improved to allow for a more detailed view into a Terraform inventory
and
&lt;a href="https://web.archive.org/web/20231207164218/https://docs.gitops.weave.works/docs/secrets/intro/#secrets-management" target="_blank">support for observing and managing
Secrets&lt;/a> has
landed in its initial incarnation.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
December and January here are a couple of talks we would like to highlight.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/JHmQlSvL0II" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;blockquote>
&lt;p>HashiCorp User Group Luxembourg: GitOps your Terraform Configurations&lt;/p>
&lt;p>Flux Terraform Controller is a controller for Flux to reconcile Terraform
configurations in the GitOps way with the power of Flux and Terraform,
Terraform Controller allows you to GitOps-ify your infrastructure, and
your application resources, in the Kubernetes and Terraform universe.&lt;/p>
&lt;p>Flux Terraform Controller ensures what you’ve defined in your Terraform
configurations is what’s always running and available. Flux continuously
looks for changes and reconciles with the desired state. Take advantage
of all the benefits of GitOps: streamlined and secure deployments, quicker
time to market, and more time to concentrate on app development!&lt;/p>
&lt;/blockquote>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/uRiCRTSkPOQ" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;blockquote>
&lt;p>Flux’s Security &amp;amp; Scalability with OCI &amp;amp; Helm (Part 2) with Kingdon Barrett&lt;/p>
&lt;p>With Flux, you can distribute and reconcile Kubernetes configuration packaged
as OCI artifacts. Instead of connecting Flux to a Git repository where the
application desired state is defined, you can connect Flux to a container
registry where you’ll push the application deploy manifests, right next to
the application container images.&lt;/p>
&lt;p>During this session Kingdon Barrett, OSS Engineer at Weaveworks &amp;amp; Flux
Maintainer, shows you how to quickly create scalable and Cosign-verified GitOps
configurations with Flux using the same process with two demo environments: one
will be a Kustomize Environment and the other a Helm-based environment.&lt;/p>
&lt;/blockquote>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/Bmh7kKYLIhY" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;blockquote>
&lt;p>Flux Security &amp;amp; Scalability using VS Code GitOps Extension&lt;/p>
&lt;p>Recently Flux has released two new features (OCI and Cosign) for scalable and
secure GitOps. Juozas Gaigalas, a Developer Experience Engineer at Weaveworks,
will demonstrate how developers and platform engineers can quickly create
scalable and Cosign-verified GitOps configurations using VS Code GitOps Tools
extension. New and experienced Flux users can learn about Flux’s OCI and Cosign
support through this demo. Join us!&lt;/p>
&lt;/blockquote>
&lt;p>Here is a list of additional videos and topics we really enjoyed -
please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/H9MJtNSYFi8" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/al049I2j1jk" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
February - tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-02-02 18:00 UTC, 19:00 CET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-02-08 13:00 UTC, 14:00 CET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-02-16 18:00 UTC, 19:00 CET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2023-02-22 13:00 UTC, 14:00 CET&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="conference-call-for-papers">Conference Call For Papers&lt;/h3>
&lt;p>Conferences are all about the people. It&amp;rsquo;s also more fun to present
together. You get to share collective experience and be more entertaining
as a duo!&lt;/p>
&lt;p>Two upcoming call for paper deadlines are the following&lt;/p>
&lt;ul>
&lt;li>CFP until 2023-02-05,
&lt;a href="https://events.linuxfoundation.org/cdcon-gitopscon/program/cfp/" target="_blank">SustainabilityCon&lt;/a>
&lt;blockquote>
&lt;p>May 10 – 12, 2023 | Vancouver, Canada
Join the community of developers, technologists, sustainability leaders
and anyone working on technological solutions to decarbonize the global
economy, mitigate and address the impacts of climate change, and build a
more sustainable future. SustainabilityCon provides a forum to drive open
source innovation in energy efficiency and interoperability and clean
development practices within industries ranging from manufacturing to
agriculture and beyond through collaboration and learning within the community.&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>CFP until 2023-02-10,
&lt;a href="https://events.linuxfoundation.org/cdcon-gitopscon/program/cfp/" target="_blank">GitOpsCon&lt;/a>
&lt;blockquote>
&lt;p>May 8 – 9, 2023 | Vancouver, Canada&lt;/p>
&lt;p>cdCon + GitOpsCon is designed to foster collaboration, discussion, and
knowledge sharing by bringing two communities together. It’s the best
place for vendors and end users to collaborate in shaping the future of
GitOps and Continuous Delivery (CD).&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;/ul>
&lt;p>Talk to Niki Manoledaki for SustainabilityCon and in general to Vanessa
Abankwah and Stacey Potter if you want to present anything Flagger, Flux,
GitOps related at any of the events with us!&lt;/p>
&lt;h3 id="soulé-ba-joins-flux-core-maintainers">Soulé Ba joins Flux Core Maintainers&lt;/h3>
&lt;p>Soulé Ba has been working on Flux for a long while. Already a maintainer
of Flux&amp;rsquo;s &lt;code>go-git-providers&lt;/code>, he didn&amp;rsquo;t stop there but was involved in
a lot of the RFC planning process of many features and contributed code and
fixes for a long long time.&lt;/p>
&lt;p>The Flux community is grateful to have you. Well deserved becoming a
&lt;a href="https://github.com/fluxcd/community/pull/271" target="_blank">Core maintainer now&lt;/a>, Soulé!&lt;/p>
&lt;h3 id="your-community-team">Your Community Team&lt;/h3>
&lt;p>We have been working on filling up the speakers calendar for the next weeks
and organising proposals for the upcoming CFP deadlines for the next
conferences. If you are interested in speaking about Flux and GitOps, please
reach out to us!&lt;/p>
&lt;p>Next up we are going to look into
&lt;a href="https://github.com/fluxcd/website/issues/1102" target="_blank">making our Community page more interesting
and useful&lt;/a>. We are also going
to
&lt;a href="https://github.com/fluxcd/website/issues/1363" target="_blank">apply for Google Season of
Docs&lt;/a>. If you have input or
ideas and would like to get involved, talk to us on Slack!&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;p>
&lt;a href="https://containerjournal.com/features/introduction-to-flux/" target="_blank">Bill Doerrfeld: Introduction to Flux
(containerjournal.com)&lt;/a>&lt;/p>
&lt;p>Read more in this article about Flux, where Bill interviewed Priyanka &amp;ldquo;Pinky&amp;rdquo;
Ravi about what&amp;rsquo;s new in Flux. It&amp;rsquo;s a nice introduction to Flux.&lt;/p>
&lt;blockquote>
&lt;p>GitOps has become a chosen strategy for releasing and deploying
cloud-native microservices. The goal of GitOps, a term coined by Alexis
Richardson, CEO of Weaveworks, in 2017, is to “make operations automatic
for the whole system based on a model of the system which was living
outside the system.” And propelling the GitOps practice is Flux, an open
source tool that provides GitOps for apps and infrastructure.&lt;/p>
&lt;p>In late 2022, Flux became the 18th project to reach graduation status with
the Cloud Native Computing Foundation (CNCF). Earlier this year, downloads of
the Flux container image surpassed a staggering one billion.&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://eng.d2iq.com/blog/automatic-deployment-updates-with-flux/" target="_blank">Max Strübing: Automatic deployment updates with Flux (D2iQ Engineering
Blog)&lt;/a>&lt;/p>
&lt;p>We were very pleased to see this blog post from our friends at D2iQ. Do go
check it out, particularly if you are new to Flux. Max takes a how-to approach
to explaining automatic deployment updates with Flux and explains why this
is generally a good idea:&lt;/p>
&lt;blockquote>
&lt;ul>
&lt;li>You can deploy fast, easily and often by simply pushing to a repository&lt;/li>
&lt;li>You can run a git revert if you messed up your environment and everything
is like it was before&lt;/li>
&lt;li>This means you can easily roll back to every state of your application or
infrastructure&lt;/li>
&lt;li>Not everyone needs access to the actual infrastructure environment, access
to the git repository is enough to manage the infrastructure&lt;/li>
&lt;li>Self-documenting infrastructure: you do not need to ssh into a server and
look around running services or explore all resources on a Kubernetes cluster&lt;/li>
&lt;li>Easy to create a demo environment by replicating the repository or creating
a second deploy target&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://www.doneops.com/" target="_blank">DoneOps&lt;/a> and
&lt;a href="https://riley.ai/" target="_blank">Riley&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we will help to add you. Not only
is it great for us to get to know and welcome you to our community. It
also gives the team a big boost in morale to know where in the world
Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>The
&lt;a href="https://fluxcd.io/">Flux landing page&lt;/a> is shorter and less overwhelming now.
This was achieved by moving the adopters logos into a horizontal
scroll band, dropping some old content and there will be more to
come here.&lt;/li>
&lt;li>Flagger docs were update to the latest.&lt;/li>
&lt;li>Flux Bootstrap: cheatsheet for how to
&lt;a href="https://fluxcd.io/flux/installation/configuration/vertical-scaling/#persistent-storage-for-flux-internal-artifacts">Persistent storage for Flux
internal artifacts&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/faq/">Our FAQ&lt;/a> now has entries about how to safely rename a
Flux Kustomization and how to set local overrides to a Helm chart.
As it&amp;rsquo;s one of the very common FAQs: We also mention the different
Flux UIs a lot more prominently now!&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/use-cases/gcp-source-repository/">Flux GCP docs&lt;/a> were updated.&lt;/li>
&lt;li>We improved the
&lt;a href="https://fluxcd.io/support/">Flux Support page&lt;/a> to be even clearer
about how to get Support for Flux, no matter if it&amp;rsquo;s professionally
or for community support.&lt;/li>
&lt;li>We renived a lot of unnecessary website build code; now a lot of the
dynamic content is generated straight from YAML through Hugo Data
Templates. This makes the website build process a lot more stable
and we have less build scripts to maintain!&lt;/li>
&lt;li>Update to latest hugo plus docsy and gallery themes.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Arhell, Aurel Canciu, Hidde Beydals, Sanskar Jaiswal, h20220026,
Paulo Gomes, Stacey Potter, Johannes Wienke, Jonathan Meyers, Kingdon
Barrett, Lassi Pölönen, Max Jonas Werner, Nate, Scott Rigby, Sunny,
Tarunbot, h20220025, surya.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>
deploy apps with canaries, feature flags, and A/B rollouts. Flux
can also manage any Kubernetes resource. Infrastructure and workload
dependency management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a>)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/">other
chat systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Graduated project
and was categorised as &amp;ldquo;Adopt&amp;rdquo; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2023-02-09 or 2023-02-15.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: November 2022 Update</title><link>https://fluxcd.io/blog/2022/12/november-2022-update/</link><pubDate>Mon, 05 Dec 2022 12:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/12/november-2022-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/12/november-2022-update/flux-graduation-featured_huaab76a8c9c06cffcb342651c1a7caf26_37219_640x0_resize_box_3.png" width="640" height="198"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read
&lt;a href="https://fluxcd.io/blog/2022/11/october-2022-update/">our last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of December 2022 - let&amp;rsquo;s recap together what
happened in November - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-has-graduated">Flux has graduated&lt;/h3>
&lt;p>&lt;img src="flux-graduation-featured.png" alt="Flux is CNCF Graduated project">&lt;/p>
&lt;p>It&amp;rsquo;s been quite the journey, and it wouldn&amp;rsquo;t have been possible without
everybody&amp;rsquo;s help in our community. We made it! Flux is now officially a
CNCF Graduated project. Here are some news pieces you might want to check
out:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.cncf.io/announcements/2022/11/30/flux-graduates-from-cncf-incubator/" target="_blank">CNCF Press Release&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/blog/2022/11/flux-is-a-cncf-graduated-project/">Our very own announcement in the Flux blog&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://web.archive.org/web/20230922005411/https://www.weave.works/blog/flux-reaches-graduation-at-the-cncf" target="_blank">Flux Reaches Graduation at the CNCF (weave.works blog)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.heise.de/news/Cloud-nativ-Flux-reitet-auf-der-GitOps-Welle-zum-Graduate-Status-der-CNCF-7363399.html" target="_blank">Cloud-nativ: Flux reitet auf der GitOps-Welle zum Graduate-Status der CNCF (heise.de - german)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://twitter.com/cloudnativefm/status/1598032539033165825" target="_blank">Cloud Native Podcast announces Flux Graduation episode&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.businesswire.com/news/home/20221130006111/en/Weaveworks%E2%80%99-GitOps-Project-%E2%80%93-Flux-%E2%80%93-Graduates-in-the-Cloud-Native-Computing-Foundation" target="_blank">Business Wire: Flux Graduates in the CNCF&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.itopstimes.com/kubernetes/flux-graduates-from-the-cncf-incubator/" target="_blank">IT Ops Times: Flux Graduates from the CNCF Incubator&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Please help us share the good news - it&amp;rsquo;s the moment of recognition and
endorsement many have still been waiting for!&lt;/p>
&lt;p>Also please join us for our celebratory Flux Graduation AMA sessions:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">December 7, 12:00 UTC&lt;/a> with Flux maintainers: Daniel, Max,
Philip, Sanskar, Stefan, Somtochi&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">December 8, 18:00 UTC&lt;/a> with Flux maintainers: Kingdon,
Paulo, Somtochi, Soulé&lt;/li>
&lt;/ul>
&lt;h3 id="next-flux-release-brings-consolidated-git-implementation">Next Flux release brings consolidated Git implementation&lt;/h3>
&lt;p>The Flux development team keeps on innovating. The latest release is
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.37.0" target="_blank">Flux v0.37&lt;/a> and as
always we encourage you all to upgrade for the best experience.&lt;/p>
&lt;p>The biggest change is that the &lt;code>gitImplementation&lt;/code> field of &lt;code>GitRepository&lt;/code>
by source-controller and image-automation-controller is now deprecated.
Flux will effectively always use &lt;code>go-git&lt;/code>. This now supports all Git
servers, including Azure DevOps and AWS CodeCommit, which previously were
only supported by &lt;code>libgit2&lt;/code>. This is a big improvement and will help us focus
on making Flux work great with just one git implementation.&lt;/p>
&lt;p>Here is our shortlist of features and improvements in the release:&lt;/p>
&lt;ul>
&lt;li>Support for bootstrapping Azure DevOps and AWS CodeCommit repositories
using &lt;code>flux bootstrap git&lt;/code>.&lt;/li>
&lt;li>Support cloning of Git v2 protocol (Azure DevOps and AWS CodeCommit) for
&lt;code>go-git&lt;/code> Git provider.&lt;/li>
&lt;li>Support force-pushing &lt;code>ImageUpdateAutomation&lt;/code> repositories.&lt;/li>
&lt;li>Allow a dry-run of &lt;code>flux build kustomization&lt;/code> with &lt;code>--dry-run&lt;/code> and
&lt;code>--kustomization-file ./path/to/local/my-app.yaml&lt;/code>. Using these flags,
variable substitutions from Secrets and ConfigMaps are skipped, and no
connection to the cluster is made.&lt;/li>
&lt;li>Use signed OCI Helm chart for
&lt;a href="https://fluxcd.io/flux/guides/monitoring/">kube-prometheus-stack&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Check out these new pieces of documentation:&lt;/p>
&lt;ul>
&lt;li>Guide:
&lt;a href="https://fluxcd.io/flux/use-cases/aws-codecommit/">AWS CodeCommit bootstrap&lt;/a>&lt;/li>
&lt;li>Guide:
&lt;a href="https://fluxcd.io/flux/installation/bootstrap/azure-devops/">Azure DevOps
bootstrap&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>💖 Big thanks to all the Flux contributors that helped us with this
release!&lt;/p>
&lt;h3 id="flux-roadmap-updates">Flux Roadmap Updates&lt;/h3>
&lt;p>Here&amp;rsquo;s an update from the
&lt;a href="https://fluxcd.io/roadmap/">Flux roadmap&lt;/a> - we are rushing
forward towards GA!&lt;/p>
&lt;p>Starting with release v0.37, we started solidifying all required changes
for the Bootstrap GA milestone targeted to Q1 2023. That release should
include all major changes from a Git perspective that we want to ship
for GA. Please make sure you upgrade as soon as possible and provide us
with feedback, so we can work on it before the GA release.&lt;/p>
&lt;p>Upcoming in the next release is a new feature for Image Automation
Controller: &lt;code>GitShallowClones&lt;/code>. You can already check it out in the
recently published release candidate. If you are interested, you can
reach out via the PR or on Slack:
&lt;a href="https://github.com/fluxcd/image-automation-controller/pull/463" target="_blank">https://github.com/fluxcd/image-automation-controller/pull/463&lt;/a>&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>To benefit from our strong OCI integration, you might want to take a
look at our latest blog post about
&lt;a href="https://fluxcd.io/blog/2022/11/verify-the-integrity-of-the-helm-charts-stored-as-oci-artifacts-before-reconciling-them-with-flux/">how to verify the integrity of
Helm charts stored as OCI
artifacts&lt;/a>.&lt;/p>
&lt;p>To help you tighten security, the Kubernetes community has released
the
&lt;a href="https://github.com/kubernetes-sigs/security-profiles-operator" target="_blank">security-profiles-operator
project&lt;/a>.
We are very pleased that it now comes with an
&lt;a href="https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/examples/apparmorprofile-flux-controllers.yaml" target="_blank">AppArmor profile for
Flux&lt;/a>.&lt;/p>
&lt;h3 id="flagger-125-and-126-update-to-newest-gateway-api">Flagger 1.25 and 1.26 update to newest Gateway API&lt;/h3>
&lt;p>
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.26.0" target="_blank">Flagger 1.26.0&lt;/a>
comes with support Kubernetes
&lt;a href="https://gateway-api.sigs.k8s.io/" target="_blank">Gateway API&lt;/a>
&lt;code>v1beta1&lt;/code>. For more details see the
&lt;a href="https://fluxcd.io/flagger/tutorials/gatewayapi-progressive-delivery/" target="_blank">Gateway API Progressive Delivery
tutorial&lt;/a>.
Please note that starting with this version, the Gateway API v1alpha2 is
considered deprecated and will be removed from Flagger after 6 months.&lt;/p>
&lt;p>
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.25.0" target="_blank">Flagger 1.25.0&lt;/a>
introduces a new deployment strategy combining Canary releases with
session affinity for Istio. Check out the tutorial
&lt;a href="https://fluxcd.io/flagger/tutorials/istio-progressive-delivery/#session-affinity" target="_blank">here&lt;/a>. Furthermore, it contains a regression fix
regarding metadata in alerts introduced in
&lt;a href="https://github.com/fluxcd/flagger/pull/1275" target="_blank">#1275&lt;/a>.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>The team upgraded
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flux Subsystem for
Argo&lt;/a> aka Flamingo to
support Flux v0.37 and Argo CD v2.5.3, v2.4.17, v2.3.11 and v2.2.16.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The team has released
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">Weave
TF-controller&lt;/a> v0.13.1 and
recently updated its Helm chart to v0.9.3. In this version, the team
started shipping the AWS Package for TF-controller. The AWS Package is
an OCI Image which contains a set of Terraform primitive modules that you
can use out-of-the-box to provision your Terraform resources by describing
them as YAML.Please visit the package repository for more information:
&lt;a href="https://github.com/tf-controller/aws-primitive-modules" target="_blank">https://github.com/tf-controller/aws-primitive-modules&lt;/a>.&lt;/p>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>
&lt;a href="https://web.archive.org/web/20230922003942/https://docs.gitops.weave.works/docs/gitops-run/overview/" target="_blank">GitOps Run&lt;/a>
continues to be enhanced as an easy way to get started with Flux and GitOps,
and now includes yaml validation for both Flux and core Kubernetes resources.
The Weave GitOps UI for Flux is now able to support multiple instances of Flux
on the same cluster, for when resource isolation strategies are in place, so
you can see the health of all controllers in the Flux Runtime view.&lt;/p>
&lt;p>Then in the Enterprise edition of Weave GitOps,
&lt;a href="https://web.archive.org/web/20240213192251/https://docs.gitops.weave.works/docs/pipelines/getting-started/" target="_blank">the Pipelines
feature&lt;/a> is
now enabled by default to help you automatically promote applications through a
series of environments, and GitOpsTemplates continue to be enhanced as a generic
self-service capability for building out an Internal Developer Platform.&lt;/p>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>In its latest pre-release of
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">the
extension&lt;/a> a
&amp;ldquo;Configure GitOps&amp;rdquo; workflow was introduced. It features a new unified
user interface for creating Source and Workload and for attaching Workloads
to Sources. It supports both Generic Flux and Azure Flux (Arc/AKS)
cluster modes. In Azure mode, &lt;code>FluxConfig&lt;/code> resources are created
automatically (this can be disabled if the user wants Generic mode
compatibility). Currently this feature is in the Extension Marketplace
pre-release channel and supports &lt;code>GitRepository&lt;/code> and &lt;code>Kustomization&lt;/code>
resources.&lt;/p>
&lt;p>If you want a user-friendly UI for working with every type of Source
and Workflow please check out this pre-release and give the team feedback!&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
November here are a couple of talks we would like to highlight.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/Bmh7kKYLIhY" target="_blank">Nov 16: Flux Security &amp;amp; Scalability using VS Code GitOps
Extension&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/uRiCRTSkPOQ" target="_blank">Nov 29: WOUG: OCI - Flux ease with helm charts and Flux (Part
2)&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/JHmQlSvL0II" target="_blank">Nov 30: HashiCorp User Group (Luxembourg): GitOps Your Terraform
Configurations with
Flux&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>
&lt;a href="https://youtube.com/playlist?list=PLwjBY07V76p4qczDNgH08GQVdzgcwXpdY" target="_blank">Playlist: Flux at Prometheus Day, GitOpsCon, &amp;amp; KubeCon North America 2022&lt;/a>&lt;/p>
&lt;p>
&lt;a href="https://youtube.com/playlist?list=PLwjBY07V76p4qczDNgH08GQVdzgcwXpdY" target="_blank">This
playlist&lt;/a>
is a curated compilation of all Flux related talks from KubeCon /
CloudNativeCon NA 2022 (Detroit) as well as the respective co-located
events, Prometheus Day and GitOpsCon. We&amp;rsquo;ve also included a list of the
individual videos below.&lt;/p>
&lt;h4 id="prometheus-day-north-america-2022">Prometheus Day North America 2022&lt;/h4>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/Wgp04xTNqq4" target="_blank">Automate Your SLO Validation with Prometheus &amp;amp; Flagger - Sanskar
Jaiswal &amp;amp; Kingdon Patrick Barrett&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="gitopscon-north-america-2022">GitOpsCon North America 2022&lt;/h4>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/EXp2xAbII_k" target="_blank">How to Achieve (Actual) GitOps with Terraform and Flux - Priyanka
Ravi, Weaveworks&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/h8G3LM9uIHk" target="_blank">Toward Full Adoption of GitOps and Best Practices at RingCentral -
Ivan Anisimov &amp;amp; Tamao
Nakahara&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/cYcmXCJ2tLU" target="_blank">Simplifying Edge Deployments Using EMCO and GitOps - Igor DC &amp;amp;
Adarsh Vincent Chittilappilly,
Intel&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/jRil9H1NhZI" target="_blank">Complete DR of Stateful Workloads, PVs and CSI Snapshots via Flux
and Vault OSS - Kingdon
Barrett&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/Ums3Q9kMPd8" target="_blank">GitOps with Flux and OCI Registries - Soulé Ba &amp;amp; Scott Rigby,
Weaveworks&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/G1Mt4KE4Dao" target="_blank">Flux + Observability: Featuring Prometheus Operator and Pixie -
Somtochi Onyekwere,
Weaveworks&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="kubecon-north-america-2022">KubeCon North America 2022&lt;/h4>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/9Ag45POgnKw" target="_blank">Flagger, Linkerd, And Gateway API: Oh My! - Jason Morgan, Buoyant
&amp;amp; Sanskar Jaiswal,
Weaveworks&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/Npvz84HpO3o" target="_blank">Tutorial: How To Write a Reconciler Using K8s
Controller-Runtime! - Scott Rigby, Somtochi Onyekwere, Niki
Manoledaki &amp;amp; Soulé Ba, Weaveworks; Amine Hilaly, Amazon Web
Services&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/PhV5dJtTaDw" target="_blank">Flux Maturity, Feature, and Contrib Update - Kingdon Barrett &amp;amp;
Somtochi Onyekwere,
Weaveworks&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Here is a list of additional videos and topics we really enjoyed -
please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
December- tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/weave-user-group/events/289768509" target="_blank">Dec 13: Implementing Flux for Scale with Soft
Multi-tenancy&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The Flux project continues in active development with the addition of
OCI configuration planned in the GA roadmap.
Another Flux advancement has been the creation of the new VSCode
Extension which provides a convenient interface to Flux that can help
reduce friction moving between editor and terminal, alleviating the
headache of context switching overloading developer focus.&lt;/p>
&lt;p>Flux maintainer Kingdon Barrett will demonstrate the pre-release of
Flux&amp;rsquo;s new OCI features and a convenient way to access them while they
remain in pre-release so you can provide the feedback that is needed by
Flux maintainers to make this feature a success!&lt;/p>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/weave-user-group/events/290045754/" target="_blank">2022-12-08 18:00
UTC&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2022-12-14 13:00 UTC&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/#calendar">2022-12-22 18:00 UTC&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="your-community-team">Your Community Team&lt;/h3>
&lt;p>The
&lt;a href="https://github.com/fluxcd/community/blob/main/COMMUNITY.md" target="_blank">Flux Community
Team&lt;/a> has been
busy this month. We wrapped-up everything related to KubeCon, prepared the
announcement of Flux Graduation and wrote this summary.&lt;/p>
&lt;p>We would love your help, so if you are interested in joining a small team
which handles Community and Communications of Flux, please join our meetings
and introduce yourself!&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;p>Josh Carlisle wrote
&lt;a href="https://www.joshcarlisle.io/2022/11/20/cloud-native-platform-recipe-success/" target="_blank">this blog
post&lt;/a>
as a decision making help for people who are new to Cloud Native. He says&lt;/p>
&lt;blockquote>
&lt;p>I came away with Flux offering some easier onboarding and bootstrapping&lt;/p>
&lt;/blockquote>
&lt;p>and&lt;/p>
&lt;blockquote>
&lt;p>I found Flux to better align with things that were important to me&lt;/p>
&lt;/blockquote>
&lt;p>Thanks for the shout-out!&lt;/p>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://amestofortytwo.com" target="_blank">Amesto
Fortytwo&lt;/a>,
&lt;a href="https://www.datagalaxy.com/" target="_blank">DataGalaxy&lt;/a>,
&lt;a href="https://divistant.com/" target="_blank">Divistant&lt;/a>,
&lt;a href="https://dkb.de" target="_blank">DKB Deutsche
Kreditbank AG&lt;/a>,
&lt;a href="https://housinganywhere.com" target="_blank">Housing
Anywhere&lt;/a>,
&lt;a href="https://synyx.de/" target="_blank">synyx&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>Following the deprecation of Flux Legacy, we have removed the Flux
Legacy docs and
&lt;a href="https://fluxcd.io/flux/migration/">highlighted migration videos and other
helpful content&lt;/a>&lt;/li>
&lt;li>To make it easier to participate, we now show the upcoming event on
the landing page&lt;/li>
&lt;li>Show adopters logos in horizontal scroll band&lt;/li>
&lt;li>Updated
&lt;a href="https://fluxcd.io/flagger/">Flagger docs&lt;/a> to 1.25.0&lt;/li>
&lt;li>Updated
&lt;a href="https://fluxcd.io/flux/use-cases/aws-codecommit/">AWS CodeCommit docs&lt;/a>&lt;/li>
&lt;li>Updated
&lt;a href="https://fluxcd.io/flux/use-cases/azure/">Azure docs&lt;/a>&lt;/li>
&lt;li>Added
&lt;a href="https://fluxcd.io/resources/">GitOpsCon talk videos&lt;/a>&lt;/li>
&lt;li>Many other improvements and fixes&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Arhell, Vanessa Abankwah, David Harris, Sanskar Jaiswal, Batuhan
Apaydın, Max Jonas Werner, André Kesser, Marko Petrovic, Matthieu
Dufourneaud, Paul Lockaby, Paulo Gomes, Piotr Sobieszczański, Roberth
Strand, Tarun Rajpurohit, husni6, surya.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Graduated project
and was categorised as &amp;ldquo;Adopt&amp;rdquo; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-12-07 or 2022-12-15.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: Flux is a CNCF Graduated project</title><link>https://fluxcd.io/blog/2022/11/flux-is-a-cncf-graduated-project/</link><pubDate>Wed, 30 Nov 2022 09:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/11/flux-is-a-cncf-graduated-project/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/11/flux-is-a-cncf-graduated-project/flux-graduation-featured_huaab76a8c9c06cffcb342651c1a7caf26_37219_640x0_resize_box_3.png" width="640" height="198"/>
&lt;p>&lt;img src="flux-graduation-featured.png" alt="Flux is CNCF Graduated project">&lt;/p>
&lt;h2 id="flux-has-graduated">Flux has graduated&lt;/h2>
&lt;p>Today is a very exciting day for the Flux community! Flux is now a
&lt;a href="https://www.cncf.io/announcements/2022/11/30/flux-graduates-from-cncf-incubator/" target="_blank">graduated project&lt;/a>
in the Cloud Native Computing Foundation and joining the ranks of
Kubernetes, Helm, Prometheus and others in this category.&lt;/p>
&lt;h2 id="flux-history">Flux History&lt;/h2>
&lt;p>We all worked very hard to make this happen - it is another important
milestone in the Flux success story. Started in July 2016, engineers at
Weaveworks built the first version of Flux to guarantee predictable
deployments internally. This was way before Kubernetes had won the Cloud
Native market.&lt;/p>
&lt;p>In the coming years at Weaveworks, the learnings with Flux helped to
establish and refine the principles of GitOps. Flux was integrated ever
more closely with Kubernetes, and later on Helm and Kustomize. It also
grew a community and an ecosystem. In 2018, Flagger was born, a Flux
companion that made progressive delivery a natural extension of GitOps.&lt;/p>
&lt;p>When Weaveworks donated Flux and Flagger to the CNCF, we already saw
large-scale adoption growing and cloud vendors making the Flux suite
core of their offerings to provide GitOps functionality.&lt;/p>
&lt;p>This was also the point where we decided to rewrite Flux from scratch,
using modern tooling such as controller-runtime and as a set of targeted
controllers, which made Flux development a lot more straight-forward. In
the past weeks we archived Legacy Flux and are very close to making Flux
v2 GA. Watch this space for the announcement!&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;We created Flux as open source from the beginning, in order to work
out in the open. It was very gratifying therefore, and far from
inevitable, that a loyal and mutually supportive community grew around
it. Making that happen takes a lot of empathy and patience from all
involved &amp;ndash; so, thank you everyone, for carrying Flux ever further.&amp;rdquo;&lt;/p>
&lt;p>&amp;ndash; Michael Bridgen, co-creator of Flux&lt;/p>
&lt;/blockquote>
&lt;h2 id="fluxs-home-the-cncf">Flux&amp;rsquo;s home: the CNCF&lt;/h2>
&lt;p>Today is a great time to look back at our time in the CNCF. We wouldn&amp;rsquo;t
be where we are today without the services and help of people at the
CNCF. It wasn&amp;rsquo;t just the great benefits and infrastructure we enjoy as a
project, but also the careful guidance and collaboration of CNCF groups
such as the TOC, TAG Security / TAG Contributor Experience and all the
adjacent project communities which also live at the CNCF. We also would
like to thank our TOC sponsor, Matt Farina, who helped us navigate this
process and encouraged us to take Flux even further!&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;I feel humbled and honored to be part of the Flux &amp;amp; Flagger team for
the past five years. With the help of our community, we have come a
long way since Flux inception and the start of the GitOps movement.
Today, Flux is an established continuous delivery solution for
Kubernetes, trusted by organisations around the world and backed by
vendors like Amazon AWS, D2iQ, Microsoft Azure, VMware, Weaveworks and
others that offer Flux to their users. The Flux team is very grateful
to the cloud-native community and CNCF who supported us over the years
and made Flux what it is today&amp;rdquo;&lt;/p>
&lt;p>&amp;ndash; Stefan Prodan, Flux maintainer and creator of Flagger&lt;/p>
&lt;/blockquote>
&lt;p>During the Graduation process, we particularly reflected on security and
governance. We threat-modelled the Flux components, which resulted in
documented security best practice. We will continue to educate our user
community on how to use Flux securely. Today both Flux and Flagger are
100% compliant with the CLO monitor, which is the
&lt;a href="https://clomonitor.io/search?maturity=graduated&amp;amp;foundation=cncf&amp;amp;page=1" target="_blank">highest score
amongst graduated CNCF
projects&lt;/a>.
We streamlined our security processes, and have regular conversations
with security professionals from CNCF tag-security. Soon we are going to
undergo a second security audit for an external validation of all the
great work we have done over the last few years.&lt;/p>
&lt;p>We are incredibly proud of what we have achieved and what we have given
to the wider ecosystem. GitOps is close to becoming the de-facto
standard. Cloud vendors offer GitOps capabilities to their customers
these days, a lot of this is based on Flux as a technology and the
learnings we made until today. We are extremely pleased to have this
&lt;a href="https://fluxcd.io/ecosystem/">huge ecosystem&lt;/a> built on
top of and around Flux, including recent
&lt;a href="https://fluxcd.io/ecosystem/#flux-uis--guis">Flux
UIs&lt;/a>!&lt;/p>
&lt;h2 id="next-up-flux-going-ga">Next up: Flux going GA&lt;/h2>
&lt;p>The 2.0.0 release of Flux is drawing near as well!&lt;/p>
&lt;p>While Flux has been production ready for quite some time, we have an
extremely strict backwards compatibility policy and take major versions
very seriously.&lt;/p>
&lt;p>The Flux community was working on a number of concurrent projects at the
same time: qualifying for Graduation, refactoring the controllers to
standardise the internal APIs, stabilizing the use of APIs of e.g. Helm
and Git, integrating OCI artifacts and Cosign verification fully into
Flux, and more. All of these workstreams were happening at the same
time. To make it clear to everyone what a GA release for Flux would look
like, we&amp;rsquo;ve updated
&lt;a href="https://fluxcd.io/roadmap/">our GA
roadmap&lt;/a>. There are many
important details here for those following the 2.0.0 release, but one
thing that is very important to us is further stabilizing Flux and its
APIs so it will be even easier for new community members to contribute
and build on top of Flux!&lt;/p>
&lt;h2 id="-huge-thank-you">💖 Huge thank-you&lt;/h2>
&lt;p>You are all rock stars! 🤩 Continued thanks to everyone of our Flux
community members who have, in ways small and large, contributed to the
success of Flux!&lt;/p>
&lt;p>If you want to celebrate with us or are now more curious about Flux, please join us at our Flux Graduation Ask-Us-Anything sessions:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://zoom.us/j/4381188348" target="_blank">December 7, 12:00 UTC&lt;/a> with Flux maintainers: Daniel, Max, Philip, Sanskar, Stefan, Somtochi&lt;/li>
&lt;li>
&lt;a href="https://weaveworks.zoom.us/j/85821738864?pwd=cjk4QjRabEpUVlRlcFBqMm9UZ2xNZz09" target="_blank">December 8, 18:00 UTC&lt;/a> with Flux maintainers: Kingdon, Paulo, Somtochi, Soulé&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to seeing you and getting to know you there!&lt;/p></description></item><item><title>Blog: Verify the integrity of the Helm Charts stored in OCI-compliant registries as OCI artifacts</title><link>https://fluxcd.io/blog/2022/11/verify-the-integrity-of-the-helm-charts-stored-as-oci-artifacts-before-reconciling-them-with-flux/</link><pubDate>Mon, 14 Nov 2022 10:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/11/verify-the-integrity-of-the-helm-charts-stored-as-oci-artifacts-before-reconciling-them-with-flux/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/11/verify-the-integrity-of-the-helm-charts-stored-as-oci-artifacts-before-reconciling-them-with-flux/_hu6c20d1d06ecc89706fad13ea2ad1710b_87991_8c0395bfd31e0d29f1f54ba50a78c50f.png" width="640" height="897"/>
&lt;p>Cosign integration was one of the most important features we shipped in the Flux
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.35.0" target="_blank">v0.35 release&lt;/a>. After that, we wrote a
&lt;a href="https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-oci-artifacts/">blog post&lt;/a> which explains how to use the feature with
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/">OCIRepository&lt;/a> resources which enables fetching OCI artifacts from container registries. If you haven&amp;rsquo;t read it yet, we highly encourage you to go and check it out first.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 509px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/11/verify-the-integrity-of-the-helm-charts-stored-as-oci-artifacts-before-reconciling-them-with-flux/_hu6c20d1d06ecc89706fad13ea2ad1710b_87991_a5ed55b10233131aecbda548f64b38f4.png" width="499" height="700">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Flux v0.36.0 allows you to prove the authenticity of
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/">HelmChart&lt;/a> resources with the help of the &lt;code>cosign&lt;/code> integration. Here we will demonstrate how to use the cosign integration to verify the integrity of the Helm charts stored in OCI-compliant registries as OCI artifacts.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Not at &lt;a href="https://twitter.com/hashtag/kubecon?src=hash&amp;amp;ref_src=twsrc%5Etfw">#kubecon&lt;/a> so I had time to prepare Flux and Flagger releases. Flagger v1.24 comes with signed releases &amp;amp; OCI Helm charts. Flux v0.36 adds support for verifying Helm charts with Cosign. &lt;a href="https://t.co/6MYwzfMA3W">https://t.co/6MYwzfMA3W&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1585710554018037761?ref_src=twsrc%5Etfw">October 27, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>Starting with Helm
&lt;a href="https://helm.sh/blog/storing-charts-in-oci/" target="_blank">v3.8.0&lt;/a>, Helm supports the OCI registry as a one of the storage option for Helm charts as an alternative to Helm repositories. The
&lt;a href="https://helm.sh/docs/helm/helm/" target="_blank">Helm CLI&lt;/a> can push and pull Helm charts to and from OCI-compliant registries.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;strong>Note:&lt;/strong> Prior to Helm v3.8.0, OCI support was experimental. To use it there, you need to enable the feature by setting the &lt;code>HELM_EXPERIMENTAL_OCI&lt;/code> environment variable to &lt;code>1&lt;/code>.
&lt;/div>
&lt;p>As we store Helm charts in OCI-compliant registries as OCI artifacts, we can now use the cosign integration to sign and verify them. Also, thanks to Flux, you can reconcile resources such as plain-text Kubernetes YAML manifests, Terraform modules, etc. from OCI-compliant registries with the help of &lt;code>OCIRepository&lt;/code> resources. You can achieve the same thing for Helm charts with
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/#helm-oci-repository">HelmRepository&lt;/a> resources. This means that you can store Helm charts in OCI-compliant registries as OCI artifacts and use Flux to reconcile them like the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>default&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;oci&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m0s&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://ghcr.io/stefanprodan/charts&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;strong>Note:&lt;/strong> &lt;p>Here you can review the complete registries lists that support the OCI artifact specification:
&lt;a href="https://conformance.opencontainers.org/#distribution-spec" target="_blank">OCI-Conformant Products&lt;/a>.&lt;/p>
&lt;p>You will notice that when you open the list, DockerHub is not included into the list but it will be added soon because they recently announced OCI Artifacts support, and you can read more about it from
&lt;a href="https://www.docker.com/blog/announcing-docker-hub-oci-artifacts-support/" target="_blank">here&lt;/a>.&lt;/p>
&lt;/div>
&lt;p>Let&amp;rsquo;s jump right into the details of how we can actually use it.&lt;/p>
&lt;p>We will deploy
&lt;a href="https://prometheus.io/" target="_blank">Prometheus&lt;/a> by using its community
&lt;a href="https://github.com/prometheus-community/helm-charts" target="_blank">Helm charts&lt;/a> stored as OCI artifacts in OCI registry. Recently, Prometheus&amp;rsquo; community started to publish their Helm charts to OCI registries and sign them with cosign using the
&lt;a href="https://github.com/sigstore/cosign/blob/main/KEYLESS.md" target="_blank">keyless&lt;/a> approach, you can learn more the process
&lt;a href="https://github.com/prometheus-community/helm-charts/pull/2631" target="_blank">here&lt;/a>. Then we are going to verify it with &lt;em>cosign&lt;/em> and configure Flux to verify the Helm chart&amp;rsquo;s signatures before they are downloaded and reconciled. As the Prometheus community signed their Helm Charts without providing a key pair, we do not need to specify any key in the HelmChart resource&amp;rsquo; &lt;code>provider.cosign&lt;/code> spec to enable keyless verification for Flux.&lt;/p>
&lt;blockquote>
&lt;p>For the sake of simplicity, we&amp;rsquo;ve deployed Prometheus alone but if you want to learn more about installing the Prometheus stack including Grafana, Alertmanager, etc., please refer to the official Flux
&lt;a href="https://fluxcd.io/flux/guides/monitoring">page&lt;/a> that can help you to do that.&lt;/p>
&lt;/blockquote>
&lt;p>You need three things to complete this demo;&lt;/p>
&lt;ul>
&lt;li>&lt;em>cosign&lt;/em> CLI
&lt;ul>
&lt;li>
&lt;a href="https://docs.sigstore.dev/cosign/installation/" target="_blank">https://docs.sigstore.dev/cosign/installation/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A Kubernetes cluster
&lt;ul>
&lt;li>
&lt;a href="https://kind.sigs.k8s.io/#installation-and-usage" target="_blank">https://kind.sigs.k8s.io/#installation-and-usage&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>Flux&lt;/em> CLI
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/cmd/" target="_blank">https://fluxcd.io/flux/cmd/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Let&amp;rsquo;s start by creating a simple Kubernetes cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kind create cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use the Flux CLI to do pre-flight checks:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux check --pre
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>► checking prerequisites
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>✔ Kubernetes 1.25.3 &amp;gt;&lt;span style="color:#666">=&lt;/span>1.20.6-0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>✔ prerequisites checks passed
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If the checks are successful, you can install Flux on the cluster.&lt;/p>
&lt;p>Let&amp;rsquo;s install Flux on it - if you need to use other options, check out the
&lt;a href="https://fluxcd.io/flux/installation/">installation page&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">export&lt;/span> &lt;span style="color:#bb60d5">GITHUB_USER&lt;/span>&lt;span style="color:#666">=&lt;/span>developer-guy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">export&lt;/span> &lt;span style="color:#bb60d5">GITHUB_TOKEN&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#bb60d5">$GITHUB_TOKEN&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>flux bootstrap github &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --owner&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#bb60d5">$GITHUB_USER&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --repository&lt;span style="color:#666">=&lt;/span>flux-cosign-helm-oci-demo &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --branch&lt;span style="color:#666">=&lt;/span>main &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --path&lt;span style="color:#666">=&lt;/span>./clusters/my-cluster &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --personal
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;strong>Note:&lt;/strong> Don’t forget to change the values with your own details!
&lt;/div>
&lt;p>As we stick to GitOps practices, we only create files that contain the &lt;code>HelmRepository&lt;/code> and &lt;code>HelmRelease&lt;/code> resources. After committing and pushing those changes into the upstream repository, Flux will watch for changes and use them as source-of-truth for the configuration:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git clone git@github.com:developer-guy/flux-cosign-helm-oci-demo.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">cd&lt;/span> flux-cosign-helm-oci-demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s create the &lt;em>HelmRepository&lt;/em> resource first:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create &lt;span style="color:#007020">source&lt;/span> helm prometheus-community &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --url&lt;span style="color:#666">=&lt;/span>oci://ghcr.io/prometheus-community/charts &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --interval&lt;span style="color:#666">=&lt;/span>10m &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --export &amp;gt; ./clusters/my-cluster/prometheus-community-helmrepository.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now, let&amp;rsquo;s move on with creating the &lt;em>HelmRelease&lt;/em> resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create helmrelease prometheus &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --source&lt;span style="color:#666">=&lt;/span>HelmRepository/prometheus-community &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --chart&lt;span style="color:#666">=&lt;/span>prometheus &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --interval&lt;span style="color:#666">=&lt;/span>10m &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --release-name prometheus &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --target-namespace&lt;span style="color:#666">=&lt;/span>monitoring &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --create-target-namespace &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --export &amp;gt; ./clusters/my-cluster/prometheus-helmrelease.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and run the following command to add the &lt;code>verify&lt;/code> section to the &lt;em>HelmRelease&lt;/em> resource&amp;rsquo; &lt;code>.spec.chart.spec&lt;/code> section to enable keylesss verification:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>yq e &lt;span style="color:#4070a0">&amp;#39;.spec.chart.spec|=({&amp;#34;verify&amp;#34;: { &amp;#34;provider&amp;#34;: &amp;#34;cosign&amp;#34; } } +.)&amp;#39;&lt;/span> ./clusters/my-cluster/prometheus-helmrelease.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This command above will add the following part to the &lt;code>HelmRelease&lt;/code> resource&amp;rsquo;s &lt;code>.spec.chart.spec&lt;/code> section:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">verify&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>cosign&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>then, commit and push the changes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git commit -m &lt;span style="color:#4070a0">&amp;#34;Add prometheus HelmRelease and HelmRepository resources&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git push
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After a couple of seconds, Flux will have applied these changes. Now let&amp;rsquo;s check the status of them:&lt;/p>
&lt;blockquote>
&lt;p>Or, you can trigger the reconciliation immediately by running the simple command: &lt;code>flux reconcile source git flux-system&lt;/code>&lt;/p>
&lt;/blockquote>
&lt;p>For the &lt;em>HelmRepository&lt;/em> resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux get sources helm
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME REVISION SUSPENDED READY MESSAGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus-community False True Helm repository is ready
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For the &lt;em>HelmRelease&lt;/em> resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux get helmreleases
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME REVISION SUSPENDED READY MESSAGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus 15.18.0 False True Release reconciliation succeeded
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If everything is fine, you can check the pods in the &lt;code>monitoring&lt;/code> namespace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ kubectl get pods -n monitoring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME READY STATUS RESTARTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus-alertmanager-54b7d7cf45-2b7zf 2/2 Running &lt;span style="color:#40a070">0&lt;/span> 115s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus-kube-state-metrics-67f68d64bb-vlmvd 1/1 Running &lt;span style="color:#40a070">0&lt;/span> 115s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus-node-exporter-46gm6 1/1 Running &lt;span style="color:#40a070">0&lt;/span> 115s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus-pushgateway-596cd99697-t79zt 1/1 Running &lt;span style="color:#40a070">0&lt;/span> 115s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prometheus-server-c458cf6f9-nvstw 2/2 Running &lt;span style="color:#40a070">0&lt;/span> 115s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Great! Now, you have installed Prometheus with Flux by using the Helm chart stored in the OCI registry and verified it with &lt;em>cosign&lt;/em>.&lt;/p>
&lt;p>We can assume that the Helm chart&amp;rsquo;s signature is verified as we let it be deployed in a cluster but let&amp;rsquo;s do have double check and check the status of the &lt;em>HelmRelease&lt;/em> to see whether the verification is successful or not:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ kubectl get helmcharts -n flux-system flux-system-prometheus -ojsonpath&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#39;{.status.conditions[?(@.type==&amp;#34;SourceVerified&amp;#34;)]}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">{&lt;/span>&lt;span style="color:#4070a0">&amp;#34;lastTransitionTime&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;2022-11-09T13:27:38Z&amp;#34;&lt;/span>,&lt;span style="color:#4070a0">&amp;#34;message&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;verified signature of version 15.18.0&amp;#34;&lt;/span>,&lt;span style="color:#4070a0">&amp;#34;observedGeneration&amp;#34;&lt;/span>:1,&lt;span style="color:#4070a0">&amp;#34;reason&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;Succeeded&amp;#34;&lt;/span>,&lt;span style="color:#4070a0">&amp;#34;status&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;True&amp;#34;&lt;/span>,&lt;span style="color:#4070a0">&amp;#34;type&amp;#34;&lt;/span>:&lt;span style="color:#4070a0">&amp;#34;SourceVerified&amp;#34;&lt;/span>&lt;span style="color:#666">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That&amp;rsquo;s super cool! Because Flux is going to add a condition to the HelmChart resource&amp;rsquo;s status section to show the verification status. If the verification is successful, it will add a condition like the one above.&lt;/p>
&lt;h2 id="diy-do-it-yourself-approach">DIY (Do it yourself) Approach&lt;/h2>
&lt;p>The Prometheus community Helm charts only serve as an example. Here is how you can do the same thing with your own Helm charts.&lt;/p>
&lt;ol>
&lt;li>Create a Helm chart&lt;/li>
&lt;li>Package the Helm chart as .tar.gz file&lt;/li>
&lt;li>Login to the OCI-compliant registry that you want to use to store your Helm chart&lt;/li>
&lt;li>Push the Helm chart as OCI artifact&lt;/li>
&lt;/ol>
&lt;p>Let&amp;rsquo;s create a sample directory that will contain our Helm chart:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>mkdir -p helm-oci-demo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">cd&lt;/span> helm-oci demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now package the Helm chart as .tar.gz file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span> helm create nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s package the Helm chart as .tar.gz file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>helm package nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now, let&amp;rsquo;s login to the OCI-compliant registry that you want to use to store your Helm chart. In this example, we&amp;rsquo;ll be using the GitHub Container Registry (ghcr.io):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">echo&lt;/span> &lt;span style="color:#bb60d5">$GHCR_PAT&lt;/span> | helm registry login ghcr.io -u &lt;span style="color:#bb60d5">$USER&lt;/span> --password-stdin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;strong>Note:&lt;/strong> Don’t forget to change the values with your own details!
&lt;/div>
&lt;p>At this point, we are ready to push the Helm chart as OCI artifact:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ helm push nginx-0.1.0.tgz oci://ghcr.io/&lt;span style="color:#bb60d5">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Pushed: ghcr.io/developer-guy/nginx:0.1.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Digest: sha256:21f92cbd63ab495d8fc44d54dabc4815c88d37697b3f8b757ca8e51ef178a2e7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So, the Helm chart is pushed to the OCI registry. It&amp;rsquo;s time to sign it with &lt;em>cosign&lt;/em>. As
&lt;a href="https://github.com/sigstore/cosign#sign-a-container-and-store-the-signature-in-the-registry" target="_blank">cosign recommends&lt;/a> we should always sign images based on their digests (@sha256:) rather than a tag. So, we should grab the digest from the command output above which is &lt;code>21f92cbd63ab495d8fc44d54dabc4815c88d37697b3f8b757ca8e51ef178a2e7&lt;/code> in this case, and use that digest while signing the image:&lt;/p>
&lt;p>As we saw the keyless approach before, let&amp;rsquo;s try the key-based approach this time. To do that, we should create public/private key pairs first:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cosign generate-key-pair
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This command will generate two files, a &lt;code>cosign.pub&lt;/code> which is a publickey and &lt;code>cosign.key&lt;/code> which is a private key pair and store them in the current directory directory.&lt;/p>
&lt;p>Now, let&amp;rsquo;s sign the image with the private key:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cosign sign --key cosign.key ghcr.io/&lt;span style="color:#bb60d5">$USER&lt;/span>/nginx@21f92cbd63ab495d8fc44d54dabc4815c88d37697b3f8b757ca8e51ef178a2e7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Cool! Now we have signed the image with the private key. Let&amp;rsquo;s check the signature:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cosign verify --key cosign.key ghcr.io/&lt;span style="color:#bb60d5">$USER&lt;/span>/nginx@21f92cbd63ab495d8fc44d54dabc4815c88d37697b3f8b757ca8e51ef178a2e7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Yay! It&amp;rsquo;s verified. But in order to make the public key accessible by Flux, we need to create a Kubernetes secret to store the public key:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kubectl -n flux-system create secret generic cosign-pub &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --from-file&lt;span style="color:#666">=&lt;/span>cosign.pub&lt;span style="color:#666">=&lt;/span>cosign.pub
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now, we can use it in our Flux configuration. The rest of the steps are the same as the previous section. For the sake of simplicity, we won&amp;rsquo;t repeat them here other than the &lt;em>HelmRepository&lt;/em> and &lt;em>HelmRelease&lt;/em> resources&amp;rsquo; creation steps.&lt;/p>
&lt;p>Let&amp;rsquo;s create the &lt;em>HelmRepository&lt;/em> resource first:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create &lt;span style="color:#007020">source&lt;/span> helm &lt;span style="color:#bb60d5">$USER&lt;/span>-charts&lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --url&lt;span style="color:#666">=&lt;/span>oci://ghcr.io/&lt;span style="color:#bb60d5">$USER&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --interval&lt;span style="color:#666">=&lt;/span>10m &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --export &amp;gt; ./clusters/my-cluster/nginx-helmrepository.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s move on with creating the &lt;em>HelmRelease&lt;/em> resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create helmrelease nginx &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --source&lt;span style="color:#666">=&lt;/span>HelmRepository/&lt;span style="color:#bb60d5">$USER&lt;/span>-charts &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --chart&lt;span style="color:#666">=&lt;/span>nginx &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --interval&lt;span style="color:#666">=&lt;/span>10m &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --release-name nginx &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --target-namespace&lt;span style="color:#666">=&lt;/span>default &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --export &amp;gt; ./clusters/my-cluster/nginx-helmrelease.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Don&amp;rsquo;t forget to run the following command to add the &lt;code>verify&lt;/code> section to the &lt;em>HelmRelease&lt;/em> resource&amp;rsquo; &lt;code>.spec.chart.spec&lt;/code> section to enable verification:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>yq e &lt;span style="color:#4070a0">&amp;#39;.spec.chart.spec|=({&amp;#34;verify&amp;#34;: { &amp;#34;provider&amp;#34;: &amp;#34;cosign&amp;#34;, &amp;#34;secretRef&amp;#34;: { &amp;#34;name&amp;#34;: &amp;#34;cosign-pub&amp;#34; } } } +.)&amp;#39;&lt;/span> ./clusters/my-cluster/nginx-helmrelease.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This command above will add the following part to the &lt;code>HelmRelease&lt;/code> resource&amp;rsquo;s &lt;code>.spec.chart.spec&lt;/code> section:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">verify&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>cosign&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>cosign-pub&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That&amp;rsquo;s all you need to do folks!&lt;/p>
&lt;p>Congratulations! You have successfully signed your Helm chart with &lt;em>cosign&lt;/em> with key-based approach and used it with Flux.&lt;/p></description></item><item><title>Blog: October 2022 Update</title><link>https://fluxcd.io/blog/2022/11/october-2022-update/</link><pubDate>Tue, 01 Nov 2022 15:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/11/october-2022-update/</guid><description>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read
&lt;a href="https://fluxcd.io/blog/2022/10/september-2022-update/">our last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of November 2022 - let&amp;rsquo;s recap together what happened
in October - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-v036-adds-support-for-verifying-helm-charts-with-cosign">Flux v0.36 adds support for verifying Helm charts with Cosign&lt;/h3>
&lt;p>Team Flux has released Flux 0.36 which continues the integration of OCI
features further into Flux. Here is a list of features and improvements
that were added in the last release:&lt;/p>
&lt;ul>
&lt;li>Verify OCI Helm charts signed by Cosign (including keyless) with
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/#verify-helm-charts">&lt;code>HelmChart.spec.verify&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Allow publishing a single YAML file to OCI with
&lt;code>flux push artifact &amp;lt;URL&amp;gt; --path=deploy/install.yaml&lt;/code>.&lt;/li>
&lt;li>Detect changes to local files before pushing to OCI with
&lt;code>flux diff artifact &amp;lt;URL&amp;gt; --path=&amp;lt;local files&amp;gt;&lt;/code>.&lt;/li>
&lt;li>New Alert Provider type named &lt;code>generic-hmac&lt;/code> for authenticating the
webhook requests coming from &lt;code>notification-controller&lt;/code>.&lt;/li>
&lt;li>The &lt;code>Kustomization.status.conditions&lt;/code> have been aligned with
Kubernetes standard conditions and &lt;code>kstatus&lt;/code>.&lt;/li>
&lt;li>The &lt;code>kustomize-controller&lt;/code> memory usage was reduced by 90% when
performing artifact operations.&lt;/li>
&lt;/ul>
&lt;p>For this release we also added new documentation to our site:&lt;/p>
&lt;ul>
&lt;li>Guide:
&lt;a href="https://fluxcd.io/flagger/install/flagger-install-with-flux/">How to deploy Flagger with Flux using signed Helm charts
and OCI artifacts&lt;/a>&lt;/li>
&lt;li>FAQ:
&lt;a href="https://fluxcd.io/flux/faq/#should-i-be-using-kustomize-remote-bases">Should I be using Kustomize remote
bases?&lt;/a>&lt;/li>
&lt;li>FAQ:
&lt;a href="https://fluxcd.io/flux/faq/#should-i-be-using-kustomize-helm-chart-plugin">Should I be using Kustomize Helm chart
plugin?&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Please upgrade for the best experience.&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>Keeping the Flux Community up to date on new Security features and ways
to keep their organisations and clusters secure is important to us. We
are very happy that Flux project member Batuhan Apaydın took the time to
write this
&lt;a href="https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-the-oci-artifacts/">blog post about proving the authenticity of OCI
artifacts&lt;/a>.
Please take a look at to get practical advice on how to make use of
this.&lt;/p>
&lt;p>What&amp;rsquo;s more? CLOMonitor is a service which checks open source project
repositories to verify they meet project health best practices. With the
last Flux release, we
&lt;a href="https://clomonitor.io/projects/cncf/flux-project" target="_blank">have hit 100%
compliance&lt;/a>
with Linux Foundation security best practices.&lt;/p>
&lt;p>We would also like to high five Alexander Block, a member of our
community and maintainer of
&lt;a href="https://kluctl.io/" target="_blank">kluctl&lt;/a>:
he reported the last Flux CVE (CVE-2022-39272)
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-f4p5-x4vc-mh4v" target="_blank">Improper use of
metav1.Duration allows for Denial of
Service&lt;/a>.
Thanks a lot for helping out with this!&lt;/p>
&lt;h3 id="flagger-v124-comes-with-signed-releases--oci-helm-charts">Flagger v1.24 comes with signed releases &amp;amp; OCI Helm charts&lt;/h3>
&lt;p>Starting with
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.24.0" target="_blank">Flagger
1.24.0&lt;/a>,
the Flagger release artifacts are published to GitHub Container
Registry, and they are signed with Cosign and GitHub ODIC.&lt;/p>
&lt;p>OCI artifacts:&lt;/p>
&lt;ul>
&lt;li>&lt;code>ghcr.io/fluxcd/flagger:&amp;lt;version&amp;gt;&lt;/code>: multi-arch container images&lt;/li>
&lt;li>&lt;code>ghcr.io/fluxcd/flagger-manifest:&amp;lt;version&amp;gt;&lt;/code>: Kubernetes manifests&lt;/li>
&lt;li>&lt;code>ghcr.io/fluxcd/charts/flagger:&amp;lt;version&amp;gt;&lt;/code>: Helm charts&lt;/li>
&lt;/ul>
&lt;p>To verify an OCI artifact with Cosign:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">export COSIGN_EXPERIMENTAL=1
cosign verify ghcr.io/fluxcd/flagger:1.24.0
cosign verify ghcr.io/fluxcd/flagger-manifests:1.24.0
cosign verify ghcr.io/fluxcd/charts/flagger:1.24.0
&lt;/code>&lt;/pre>&lt;p>To deploy Flagger from its OCI artifacts the GitOps way, please see the
&lt;a href="https://fluxcd.io/flagger/install/flagger-install-with-flux/">Flux installation guide&lt;/a>.&lt;/p>
&lt;p>The previous release,
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.23.0" target="_blank">Flagger
1.23.0&lt;/a>
added support for Slack bot token authentication.&lt;/p>
&lt;h3 id="flux-legacy-reaches-end-of-life">Flux Legacy reaches End-Of-Life&lt;/h3>
&lt;p>As
&lt;a href="https://fluxcd.io/blog/2022/10/september-2022-update/#flux-legacy-v1-retirement-plan">discussed in the last monthly update for the Flux
project&lt;/a>,
we retired Flux v1 and Helm Operator on November 1st. The projects will
no longer be supported and were archived on GitHub.&lt;/p>
&lt;p>Please look into
&lt;a href="https://fluxcd.io/flux/migration/">migrating to Flux v2&lt;/a> as soon as possible.&lt;/p>
&lt;p>If you still need migration help, there are still
&lt;a href="https://bit.ly/FluxMigrationSurvey" target="_blank">free migration
workshops&lt;/a>, or reach
out for paid support to one of the companies
&lt;a href="https://fluxcd.io/support/#commercial-support">listed
here&lt;/a>.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>The Weave GitOps team continues to iterate and just released
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.10.1" target="_blank">v0.10.1&lt;/a>
of Weave GitOps.&lt;/p>
&lt;p>With the release of v0.10.0 they are excited to announce the beta launch
of a new tool called GitOps Run. GitOps can be challenging for the
everyday developer to work with and it can create some friction,
especially for developers who are less familiar with Kubernetes or Flux.
The purpose of GitOps Run is to remove the complexity for developers so
that platform operators can create developer environments easily, and
application developers can benefit from GitOps and focus on writing
code. Basically, they set up a live reconciliation loop between your
cluster and local working directory of choice. Any changes made to your
local working directory will automatically be pulled onto the cluster so
you can iterate quickly. When you are done you can turn off GitOps Run
and your cluster will go back to the previous state. This tool is
incredibly useful with the
&lt;a href="https://marketplace.visualstudio.com/items?itemName=Weaveworks.vscode-gitops-tools" target="_blank">VSCode GitOps
extension&lt;/a>.&lt;/p>
&lt;p>You can either toggle GitOps Run to allow changes directly on the
cluster or choose a sandbox option as well. The team is definitely
looking for feedback on this exciting new feature so please don&amp;rsquo;t
hesitate to engage and submit feature requests. Check out an overview
and quick getting started video
&lt;a href="https://web.archive.org/web/20230922003942/https://docs.gitops.weave.works/docs/gitops-run/overview/" target="_blank">here&lt;/a>.&lt;/p>
&lt;p>The team continues to make improvements to the GitOps Dashboard as well.
You are now able to inspect the YAML of all objects within the
application as well as being able to navigate to objects via the various
graph views. We have also added support for alerts and providers.&lt;/p>
&lt;h5 id="terraform-controller">Terraform Controller&lt;/h5>
&lt;p>The Weave GitOps team has been hard at work on the next version of the
tf-controller and just released
&lt;a href="https://github.com/weaveworks/tf-controller/releases/tag/v0.13.0" target="_blank">Weave TF-controller
v0.13.0&lt;/a>
this week.&lt;/p>
&lt;h6 id="first-class-yaml-support-tech-preview">First-class YAML Support (tech preview)&lt;/h6>
&lt;p>A notable feature in this version is the first-class YAML support for
Terraform. A Terraform object in v0.13.0+ allows you to better configure
your Terraform resources via YAMLs, without introducing any extra CRDs
to your cluster. Together with a new generator, Tofu-Jet will now be
able to ship pre-generated primitive Terraform modules for all major
cloud providers. The team shipped the alpha version of AWS package in this
release. Tofu-Jet generator will be open-sourced later by the end of
this year.&lt;/p>
&lt;p>A primitive Terraform module is a module that only contains a single
primitive resource like, &lt;code>aws_iam_role&lt;/code> or &lt;code>aws_iam_policy&lt;/code>.
With this concept, we would be able to use Terraform without writing
Terraform codes and make it more GitOps-friendly at the same time.&lt;/p>
&lt;h6 id="new-features-and-bug-fixing">New Features and Bug Fixing&lt;/h6>
&lt;ul>
&lt;li>Implement webhooks for Terraform stages&lt;/li>
&lt;li>Add use case examples&lt;/li>
&lt;li>Add &lt;code>.spec.workspace&lt;/code> field&lt;/li>
&lt;li>Add the default value to workspace&lt;/li>
&lt;li>Implement spec.values and map it to Terraform HCL&lt;/li>
&lt;li>Add docs for preflight checks&lt;/li>
&lt;li>Implement Helm-like template for Terraform files&lt;/li>
&lt;li>Add runner Dockerfile for Azure&lt;/li>
&lt;li>Upgrade Golang to v1.19&lt;/li>
&lt;li>Bundle an alpha version AWS Package&lt;/li>
&lt;li>Fix e2e&lt;/li>
&lt;li>Implement init containers support on the runner pod&lt;/li>
&lt;li>Implement &lt;code>spec.dependsOn&lt;/code> and watch for the output secret changes&lt;/li>
&lt;li>Implement templating for input references&lt;/li>
&lt;li>Fix the check of dependencies by taking the output secret into
account&lt;/li>
&lt;li>Add tests for the &lt;code>spec.dependsOn&lt;/code> feature&lt;/li>
&lt;li>Change templating delimiter to &lt;code>${{ }}&lt;/code>&lt;/li>
&lt;li>Add labels to &lt;code>tfstate&lt;/code> via the K8s backend so that we can group
them by the labels&lt;/li>
&lt;li>Fix dependency in the finalizer&lt;/li>
&lt;li>Add an ability to Helm chart for creating service accounts in each
namespace&lt;/li>
&lt;li>Parameterize AWS package in chart&lt;/li>
&lt;li>Add trace logging&lt;/li>
&lt;li>Fix runner service account template not returning multiple docs&lt;/li>
&lt;li>Implement &lt;code>replan&lt;/code> to avoid double planning&lt;/li>
&lt;li>Add SHA and version information to the binaries&lt;/li>
&lt;/ul>
&lt;h5 id="weave-gitops-enterprise">Weave GitOps Enterprise&lt;/h5>
&lt;p>Weave GitOps Enterprise continues to improve with numerous features
including all of those mentioned in the OSS version above. They have
released v0.10.1. First, you can now view terraform resources from the
UI, plus sync and suspend resources like Kustomizations, HelmReleases,
and Sources.&lt;/p>
&lt;p>&lt;img src="weave-gitops-enterprise.png" alt="Weave GitOps Enterprise">&lt;/p>
&lt;p>The team has also launched their pipeline feature which will enable you
to set up environments for helm charts and track the chart versions
across dev, staging, and production (or however you decide to define
your environment stages).&lt;/p>
&lt;p>Policy sets have been added as well so you can now state whether
policies should just be treated as non-blocking (audit) or blocking
(admission). This means you can easily configure your various policies
to request the team to fix their code, either to future-proof it, or
for the fix to be included before changes can actually be applied to
the clusters.&lt;/p>
&lt;p>Finally, the team has been working hard to open up templates to all
types of objects within the platform. In the past, templates were
isolated to only CAPI providers so you could easily self service
clusters. From Weave GitOps Enterprise you are now able to create
templates for any yaml objects so you can self-serve anything from new
microservices to cloud infrastructure all driven by GitOps and the power
of Flux.&lt;/p>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>Flux Subsystem for Argo (aka Flamingo) is the safe migration path for
Argo CD to Flux and Weave GitOps. A Flamingo image is the drop-in
replacement of the equivalent version of Argo CD. You can safely run
workloads reconciled by Flux and Argo CD on the same clusters.&lt;/p>
&lt;p>The team has upgraded Flamingo to support Flux v0.36 and Argo CD v2.5.
Not only the v2.5 support, this train of releases also include Flamingo
for v2.2 - v2.4 too.&lt;/p>
&lt;p>Here&amp;rsquo;s the updated support matrix&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Flux&lt;/th>
&lt;th>Argo CD&lt;/th>
&lt;th>Flamingo Image&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>v0.36&lt;/td>
&lt;td>v2.5&lt;/td>
&lt;td>v2.5.0-fl.3-main-2bba0ae6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v0.36&lt;/td>
&lt;td>v2.4&lt;/td>
&lt;td>v2.4.15-fl.3-main-2bba0ae6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v0.36&lt;/td>
&lt;td>v2.3&lt;/td>
&lt;td>v2.3.10-fl.3-main-2bba0ae6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v0.36&lt;/td>
&lt;td>v2.2&lt;/td>
&lt;td>v2.2.15-fl.3-main-2bba0ae6&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>A new &amp;ldquo;Configure GitOps&amp;rdquo; workflow is available in the pre-release of
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">the
extension&lt;/a>.
The workflow introduces a new unified user interface for creating Source
and Workload and for attaching Workloads to Sources. It supports both
Generic Flux and Azure Flux (Arc/AKS) cluster modes. In Azure mode,
&lt;code>FluxConfig&lt;/code> resources are created automatically (this can be disabled if
the user wants Generic mode compatibility). Currently this feature is in
the Extension Marketplace pre-release channel and supports &lt;code>GitRepository&lt;/code>
and &lt;code>Kustomization&lt;/code> resources. Final release will be available early in
November and will provide an user-friendly UI for working with every
type of Source and Workflow.&lt;/p>
&lt;h4 id="new-additions-to-the-flux-ecosystem">New additions to the Flux Ecosystem&lt;/h4>
&lt;p>We are very pleased to announce the following new members of the Flux
Ecosystem. We feel blessed to have a lively and active community like
this!&lt;/p>
&lt;p>First up is the
&lt;a href="https://github.com/DataDog/integrations-extras/tree/master/fluxcd" target="_blank">Datadog Agent for
Flux&lt;/a>:
it runs on your hosts and collects events and metrics from hosts and
sends them to Datadog, where you can analyze your monitoring and
performance data.&lt;/p>
&lt;p>
&lt;a href="https://github.com/kubevela/kubevela" target="_blank">KubeVela&lt;/a> is next
on the list, which now integrates Flux as well for
&lt;a href="https://kubevela.io/docs/tutorials/helm" target="_blank">Helm Chart
delivery&lt;/a> and
&lt;a href="https://kubevela.io/docs/case-studies/gitops" target="_blank">GitOps&lt;/a>,
and provides
&lt;a href="https://kubevela.io/docs/tutorials/helm-multi-cluster" target="_blank">multi-cluster
capabilities&lt;/a>.&lt;/p>
&lt;p>We could have some kind of Halloween reference here, but
&lt;a href="https://github.com/raffis/gitops-zombies" target="_blank">GitOps
zombies&lt;/a> is
actually a tool for finding Kubernetes resources which are not managed
via GitOps. Go check it out.&lt;/p>
&lt;p>And last but not least, here is the
&lt;a href="https://github.com/pulumi/pulumi-kubernetes-operator" target="_blank">Pulumi Kubernetes
Operator&lt;/a>,
which runs
&lt;a href="https://www.pulumi.com/docs/intro/concepts/project/" target="_blank">Pulumi
programs&lt;/a>,
and can fetch them via Flux sources.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Really nice to see Pulumi adopting &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> for source management. Pulumi programs can now be packaged as OCI artifacts with the Flux CLI and signed with Cosign. Before the Pulumi operator runs them, Flux pulls the artifacts in-cluster and verifies their signatures 🔐🚀 &lt;a href="https://t.co/Z9KGipWij4">https://t.co/Z9KGipWij4&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1584593166392782850?ref_src=twsrc%5Etfw">October 24, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>Thanks to all the Flux community members who are happy to talk about
their experiences. In October there was obviously KubeCon (which we will
have a separate blog post about), here is one talk already which we
would like to highlight.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/Ums3Q9kMPd8" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>
&lt;a href="https://www.youtube.com/watch?v=Ums3Q9kMPd8" target="_blank">GitOps with Flux and OCI Registries - Soulé Ba &amp;amp; Scott Rigby,
Weaveworks&lt;/a>&lt;/p>
&lt;p>Please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
November - tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;p>
&lt;a href="https://2022.allthingsopen.org/sessions/get-started-with-kubernetes-gitops/" target="_blank">ATO 2022 Get Started with Kubernetes &amp;amp; GitOps Workshop (Nov
1)&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>For those that are new to Kubernetes, don&amp;rsquo;t fret! Justin will give a
brief overview of Kubernetes core concepts, features, architecture, and
key components to ensure you have a necessary understanding of the
Kubernetes ecosystem so that you can follow along with the rest of this
hands-on workshop.&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://www.meetup.com/luxembourg-hashicorp-user-group/events/288797616/" target="_blank">HashiCorp User Group Luxembourg (virtual) (Nov
30)&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Flux Terraform Controller is a controller for Flux to reconcile
Terraform configurations in the GitOps way with the power of Flux and
Terraform, Terraform Controller allows you to GitOps-ify your
infrastructure, and your application resources, in the Kubernetes and
Terraform universe.&lt;/p>
&lt;/blockquote>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/weave-user-group/events/wvhvvsydcpbdb/" target="_blank">2022-11-02 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>2022-11-10 18:00 UTC&lt;/li>
&lt;li>2022-11-16 13:00 UTC&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="your-community-team">Your Community Team&lt;/h3>
&lt;p>The Flux Community Team started its own set of meetings as an experiment
for the next 3 months. Here we want to discuss everything that&amp;rsquo;s
important for the Flux community, such as organisation of events,
advocacy, getting more people involved in the community and more.&lt;/p>
&lt;p>This month we had our first two meetings. Check out
&lt;a href="https://docs.google.com/document/d/12aOlwyYipXH3PJj-m_G09ZijSjBqS6sUpcQYVZF01B0/edit" target="_blank">the meeting
notes&lt;/a>
which include the meeting recordings to see what was discussed in
detail.&lt;/p>
&lt;p>A few themes we are looking into as a group are:&lt;/p>
&lt;ul>
&lt;li>Document and refine processes and tools to make it a lot easier to
be involved&lt;/li>
&lt;li>Highlight events and meetings to our community better&lt;/li>
&lt;li>Make things like our social and editorial calendars public so people
can feed into it more easily and it becomes more of a team effort&lt;/li>
&lt;/ul>
&lt;p>Please join us for the next meeting - instructions and agenda can be
found
&lt;a href="https://docs.google.com/document/d/12aOlwyYipXH3PJj-m_G09ZijSjBqS6sUpcQYVZF01B0/edit" target="_blank">here&lt;/a>.&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://siebjee.nl/posts/using-flux-to-automate-simple-tasks/" target="_blank">Using Flux to Automate Simple
Tasks&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.infracloud.io/blogs/gitops-using-flux-flagger/" target="_blank">GitOps using Flux and
Flagger&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://blog.upbound.io/gitopsify-infrastructure-xp/" target="_blank">GitOpsify Cloud Infrastructure with Crossplane and
Flux&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://cyera.io/" target="_blank">Cyera&lt;/a>,
&lt;a href="https://syneki.com/" target="_blank">Syneki&lt;/a> and
&lt;a href="https://www.u-bordeaux.fr/" target="_blank">University of
Bordeaux&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of things we landed recently:&lt;/p>
&lt;ul>
&lt;li>Update themes and move to using them as Hugo modules. This
simplified our setup quite a bit.&lt;/li>
&lt;li>Generate
&lt;a href="https://fluxcd.io/resources/">resources
section&lt;/a> from YAML.&lt;/li>
&lt;li>Deemphasise Legacy Flux in our docs.&lt;/li>
&lt;li>Updates to the frontpage to make events easier to find.&lt;/li>
&lt;li>Update Flagger docs to 1.24. New guide to
&lt;a href="https://fluxcd.io/flagger/install/flagger-install-with-flux/">set up Flagger on a
Kubernetes cluster the GitOps
way&lt;/a>.&lt;/li>
&lt;li>And lots of other updates and improvements.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Batuhan Apaydın, Mohamed F. Ahmed, Arhell, FG, Hidde Beydals,
Michael Bridgen, Santosh Kaluskar, Jasmin Müller, Kingdon Barrett,
Martin PAUCOT, Raffael Sahli, Shalom Yerushalmy, Steve Wilkerson and
ebCrypto.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev
meetings&lt;/a> on
2022-11-03 or 2022-11-11.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF
Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning
discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a>
and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on
Twitter&lt;/a>, join the
discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: CNCF Talk: Increased security and scalability with OCI</title><link>https://fluxcd.io/blog/2022/10/cncf-talk-flux-oci/</link><pubDate>Wed, 26 Oct 2022 13:20:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/10/cncf-talk-flux-oci/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/10/cncf-talk-flux-oci/oci-featured_hu02c8ff3ca7eb3b16c64ca5ec0f4c7ec0_122624_640x0_resize_q75_box.jpg" width="640" height="360"/>
&lt;p>Integrating OCI into Flux was one of the most-requested features of all
times. We listened to your feedback and in the past couple of releases,
OCI was integrated more deeply into Flux. Here is a brief summary of
what landed when:&lt;/p>
&lt;ul>
&lt;li>v0.31 (Jun 2022): Support for Helm repositories of type OCI&lt;/li>
&lt;li>v0.32 (Aug 2022): Kubernetes manifests, Kustomize overlays and
Terraform code as OCI artifacts&lt;/li>
&lt;li>v0.33 (Aug 2022): More configurability of OCI settings&lt;/li>
&lt;li>v0.34 (Sep 2022): More flexibility when interacting with OCI
artifacts/repositories&lt;/li>
&lt;li>v0.35 (Sep 2022): verify OCI artifacts signed by cosign&lt;/li>
&lt;li>v0.36 (Oct 2022): verify OCI helm charts signed by cosign plus lots
of new tooling to interact with OCI using the Flux CLI&lt;/li>
&lt;/ul>
&lt;p>To bring you up to speed with what&amp;rsquo;s possible, Max Jonas Werner, Flux
Core Maintainer and Senior Software Engineer at Weaveworks, gave a talk
in the CNCF Online Programme series to give some background and do a
practical demo.&lt;/p>
&lt;p>First off, Max explained the core GitOps concepts and gave an overview
of the architecture of Flux. In the next step, he dived into how Docker
and others created the Open Containers Initiative (OCI) which is a part
of the Linux Foundation.&lt;/p>
&lt;p>One of the key points Max is making is that we went through a
transformation from Docker containers to generic application and
configuration containers. More and more OCI is becoming an application
delivery format.&lt;/p>
&lt;p>OCI registries (which implement the distribution spec) are a commodity
in the cloud space. This means that it&amp;rsquo;s very easy to get enhanced
scalability this way, because pulling an OCI image is much less
resource-intensive compared to a full or shallow Git clone.
Additionally, high available registries are available everywhere.&lt;/p>
&lt;p>It also provides many ways to secure your infrastructure.
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/#provider">Flux
leverages Kubernetes workload identity and
IAM&lt;/a>
when pulling OCI artifacts from managed registries. So no more key
management, no more SSH keys to generate, no more proprietary API usage
for token generation. You use the same mechanism that is used for
pulling container images. You might also want to check out this post
about
&lt;a href="https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-oci-artifacts/">verifying authenticity of artifacts with
cosign&lt;/a>.&lt;/p>
&lt;p>Max spends more than half of his presentation time for the demo, so you
get a good idea of how to use these new features and integrate them into
your setup.&lt;/p>
&lt;p>Check out the video here:&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/l5pVzP6wsP0" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Thanks a lot Max for taking the time to walk us through this!&lt;/p>
&lt;p>Start your journey and start
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/">using Flux&amp;rsquo;s OCI
features&lt;/a> today.&lt;/p></description></item><item><title>Blog: Flux proudly representing at KubeCon 2022 NA</title><link>https://fluxcd.io/blog/2022/10/kubecon-2022-na/</link><pubDate>Wed, 19 Oct 2022 15:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/10/kubecon-2022-na/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/10/kubecon-2022-na/kubecon-featured_hu9c2b383eb0ed5a0201dc89a08b690149_203529_640x0_resize_box_3.png" width="640" height="435"/>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 710px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/10/kubecon-2022-na/kubecon-featured_hu9c2b383eb0ed5a0201dc89a08b690149_203529_700x0_resize_box_3.png" width="700" height="476">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Everybody in Team Flux is busy with
&lt;a href="https://fluxcd.io/roadmap/#flux-gitops-ga-completed-in-july-2023">the run-up to Flux
GA&lt;/a>, but &amp;ndash; with the help of
the great folks in our Community and Ecosystem &amp;ndash; we also
managed to put together quite a number of talks, tutorials and sessions
for you at KubeCon / CloudNativeCon!&lt;/p>
&lt;p>We are happy to announce that we will be at GitOpsCon and KubeCon.&lt;/p>
&lt;p>We are only a few days away from the event and we look forward to
meeting you there, or seeing you in the online sessions! Meet us at our
booth in-person at the Project Pavilion during KubeCon, see demos, ask
questions and get involved in our community!&lt;/p>
&lt;p>To make this all easier, we put together this mini-site for you:
&lt;a href="https://bit.ly/flux-kubecon-2022" target="_blank">Flux
@ KubeCon mini site&lt;/a>. Go
ahead and bookmark it now - there you have all the Flux things in one
place.&lt;/p>
&lt;h2 id="monday-october-24-flux-project-meeting-at-kubecon">Monday, October 24 (Flux Project Meeting at KubeCon)&lt;/h2>
&lt;p>13:00 - 17:00
&lt;a href="https://sched.co/1BaSl" target="_blank">Flux Project
Meeting&lt;/a> Room 335, Level 300&lt;/p>
&lt;blockquote>
&lt;p>We will have talks/demos from beginner to advanced, including but not
limited to: Flux basics, what&amp;rsquo;s new with Flux including OCI support,
VS Code, Terraform Controller, Cosign, Helm, &amp;amp; Flagger, and of course
you can ask Maintainers all your questions.&lt;/p>
&lt;/blockquote>
&lt;h2 id="tuesday-october-25-gitopscon">Tuesday, October 25 (GitOpsCon)&lt;/h2>
&lt;p>9:45 - 10:15 GitOpsCon:
&lt;a href="https://sched.co/1AR8M" target="_blank">How to Achieve (Actual) GitOps with Terraform
and Flux&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Priyanka &amp;quot;Pinky&amp;quot; Ravi (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>9:45 - 10:15 GitOpsCon:
&lt;a href="https://sched.co/1AR8J" target="_blank">Toward Full Adoption of GitOps and Best
Practices at RingCentral&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Tamao Nakahara (Weaveworks) and Ivan Anisimov (RingCentral)&lt;/p>
&lt;/blockquote>
&lt;p>11:10 - 11:40 GitOpsCon:
&lt;a href="https://sched.co/1AR8V" target="_blank">Simplifying Edge Deployments Using EMCO and
GitOps&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Igor DC &amp;amp; Adarsh Vincent Chittilappilly (Intel)&lt;/p>
&lt;/blockquote>
&lt;p>11:40 - 12:10 Prometheus Days:
&lt;a href="https://sched.co/1AsMU" target="_blank">Automate your SLO validation with
Prometheus &amp;amp; Flagger&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Sanskar Jaiswal &amp;amp; Kingdon Barrett (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>12:00 - 12:10 GitOpsCon:
&lt;a href="https://sched.co/1AR8b" target="_blank">Why Do We Do This? The Heart of
GitOps&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Leigh Capili (VMware)&lt;/p>
&lt;/blockquote>
&lt;p>13:10 - 13:20 GitOpsCon:
&lt;a href="https://sched.co/1AR8Y" target="_blank">Green(ing) CI/CD: A Sustainability Journey
with GitOps&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Niki Manoledaki (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>13:40 - 14:10 GitOpsCon:
&lt;a href="https://sched.co/1AR9B" target="_blank">Complete DR of Workloads, PVs and CSI
Snapshots via Flux and Vault OSS&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Kingdon Barrett (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>14:15 - 14:45 GitOpsCon:
&lt;a href="https://sched.co/1AR8z" target="_blank">GitOps with Flux and OCI
Registries&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Soulé Ba &amp;amp; Scott Rigby (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>14:15 - 14:45 GitOpsCon:
&lt;a href="https://sched.co/1AR8z" target="_blank">Pixie + Flux, VSCode, GitOps Observability
from Top to Bottom&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Somtochi Onyekwere (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;h2 id="wednesday-october-26-kubecon">Wednesday, October 26 (KubeCon)&lt;/h2>
&lt;p>14:30 - 16:00 KubeCon:
&lt;a href="https://sched.co/182Ha" target="_blank">Tutorial: So You Want To Develop a Cluster API
Provider&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Anusha Hegde &amp;amp; Winnie Kwon &amp;amp; Sedef Savas (VMware), Richard Case
(Weaveworks),&lt;/p>
&lt;p>Avishay Traeger (Red Hat)&lt;/p>
&lt;/blockquote>
&lt;p>15:25 - 16:00 KubeCon:
&lt;a href="https://sched.co/182Go" target="_blank">Flagger, Linkerd, And Gateway API: Oh
My!&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Jason Morgan (Linkerd) &amp;amp; Sanskar Jaiswal (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>15:25 - 16:00 KubeCon:
&lt;a href="https://sched.co/182Hg" target="_blank">Tutorial: How To Write a Reconciler Using K8s
Controller-Runtime!&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Scott Rigby, Somtochi Onyekwere, Niki Manoledaki &amp;amp; Soulé Ba
(Weaveworks),&lt;/p>
&lt;p>Amine Hilaly (Amazon Web Services)&lt;/p>
&lt;/blockquote>
&lt;h2 id="thursday-october-27-kubecon">Thursday, October 27 (KubeCon)&lt;/h2>
&lt;p>11:00 - 11:35 KubeCon:
&lt;a href="https://sched.co/182Ns" target="_blank">Learn About Helm And Its
Ecosystem&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Andrew Block &amp;amp; Karena Angell (Red Hat), Matt Farina (SUSE) Scott Rigby
(Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>14:30 - 15:05 KubeCon:
&lt;a href="https://sched.co/182QX" target="_blank">Flux Maturity, Feature, and Contrib
Update&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Somtochi Onyekwere &amp;amp; Kingdon Barrett (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;h2 id="friday-october-28-kubecon">Friday, October 28 (KubeCon)&lt;/h2>
&lt;p>11:00 - 12:30 KubeCon:
&lt;a href="https://sched.co/182QL" target="_blank">Flux
ContribFest&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Room 410 B&lt;/p>
&lt;/blockquote>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Again: Here is the
&lt;a href="https://bit.ly/flux-kubecon-2022" target="_blank">Flux @ KubeCon mini site&lt;/a>.
Go ahead and bookmark it now - there you have all the Flux things in one place.&lt;/p>
&lt;p>Thanks to everyone who helped to organise and prepare the event and talks!
Good luck and safe travels to everyone - have a lot of fun! See you
soon!&lt;/p></description></item><item><title>Blog: Prove the Authenticity of OCI Artifacts</title><link>https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-oci-artifacts/</link><pubDate>Mon, 17 Oct 2022 12:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-oci-artifacts/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-oci-artifacts/flux-protects-you-against-ssca-featured_hu638e60bae9093dc1de73ef6cbce0e94b_71651_640x0_resize_box_3.png" width="640" height="860"/>
&lt;p>Software supply chain attacks are one of the most critical risks threatening today&amp;rsquo;s software and have begun to collapse like a dark cloud over the software industry. For the Flux family of projects we are taking precautions against these threats. Apart from implementing security features and best practices, it is important to us to educate our users. You can find all Flux&amp;rsquo;s security articles
&lt;a href="https://fluxcd.io/tags/security/">here&lt;/a>. Today we will talk about a new security feature.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 531px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/10/prove-the-authenticity-of-oci-artifacts/flux-protects-you-against-ssca-featured_hu638e60bae9093dc1de73ef6cbce0e94b_71651_0x700_resize_box_3.png" width="521" height="700">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Let&amp;rsquo;s start with a brief historical explanation of how we got to this point. It all started with the following sentence:&lt;/p>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>Flux should be able to distribute and reconcile Kubernetes configuration packaged as OCI artifacts.&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0003-kubernetes-oci" target="_blank">RFC-0003: Flux OCI support for Kubernetes manifests&lt;/a>&lt;/em>.&lt;/p>
&lt;/blockquote>
&lt;/div>
&lt;p>From then on, the Flux community worked hard and brought this feature with
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.32.0" target="_blank">Flux v0.32&lt;/a>. So with that, you can store and distribute various sources such as Kubernetes manifests, Kustomize overlays, and Terraform modules as OCI (Open Container Initiative) artifacts with
&lt;a href="https://fluxcd.io/flux/cmd/flux_push_artifact/#flux-push-artifact">Flux CLI&lt;/a> and tell Flux to reconcile your sources that are stored in OCI Artifacts, and Flux will do that for you. 🕺🏻&lt;/p>
&lt;p>But this only covered the first stage of the entire implementation. There is more than that. ☝️&lt;/p>
&lt;p>One of the most exciting features of this RFC is the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0003-kubernetes-oci#verify-artifacts" target="_blank">verification of artifacts&lt;/a>. But why, what is it, is it really necessary or just a hype thing? This is a long topic that we need to discuss. Suppose you store the cluster desired state as OCI artifacts in a container registry. How can you be one hundred percent sure that the resources that Flux reconciles are the same as the resources that you&amp;rsquo;ve pushed to the OCI registry? This is where the verification of artifacts comes into play. But, how can we do that? 🤔&lt;/p>
&lt;p>Thanks to the
&lt;a href="https://www.sigstore.dev" target="_blank">Sigstore&lt;/a> community we have a great set of services and tools for signing and verifying authenticity. One of the tools is
&lt;a href="https://docs.sigstore.dev/cosign/overview" target="_blank">cosign&lt;/a> which can be used for container signing, verification, and storage in an OCI registry. We will use it to verify the authenticity of the OCI Artifacts in Flux. Starting with
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.35.0" target="_blank">v0.35&lt;/a>, Flux comes with support for verifying OCI artifacts signed with Sigstore Cosign. Documentation for setting it up can be found
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/#signing-and-verification">here&lt;/a>.&lt;/p>
&lt;p>Let&amp;rsquo;s jump right into the details of how we can actually use it.&lt;/p>
&lt;p>We will deploy
&lt;a href="https://cert-manager.io/docs/" target="_blank">cert-manager&lt;/a> by storing its manifests in OCI registry packaged as an OCI Artifacts, using the &lt;em>Flux CLI&lt;/em>. Then we are going to sign it with &lt;em>cosign&lt;/em> and configure Flux to verify the artifacts’ signatures before they are downloaded and reconciled.&lt;/p>
&lt;p>You need three things to complete this demo;&lt;/p>
&lt;ul>
&lt;li>&lt;em>cosign&lt;/em> CLI
&lt;ul>
&lt;li>
&lt;a href="https://docs.sigstore.dev/cosign/installation/" target="_blank">https://docs.sigstore.dev/cosign/installation/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A Kubernetes cluster
&lt;ul>
&lt;li>
&lt;a href="https://kind.sigs.k8s.io/#installation-and-usage" target="_blank">https://kind.sigs.k8s.io/#installation-and-usage&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>Flux&lt;/em> CLI
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/cmd/" target="_blank">https://fluxcd.io/flux/cmd/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Let&amp;rsquo;s start by creating a simple Kubernetes cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kind create cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s install Flux on it - if you need to use other options, check out the
&lt;a href="https://fluxcd.io/flux/installation/">installation page&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">export&lt;/span> &lt;span style="color:#bb60d5">GITHUB_USER&lt;/span>&lt;span style="color:#666">=&lt;/span>developer-guy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">export&lt;/span> &lt;span style="color:#bb60d5">GITHUB_TOKEN&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#bb60d5">$GITHUB_TOKEN&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>flux bootstrap github &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --owner&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#bb60d5">$GITHUB_USER&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --repository&lt;span style="color:#666">=&lt;/span>flux-cosign-demo &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --branch&lt;span style="color:#666">=&lt;/span>main &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --path&lt;span style="color:#666">=&lt;/span>./clusters/my-cluster &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --personal
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>⚠️ Note: Don’t forget to change the values with your own details!&lt;/p>
&lt;/blockquote>
&lt;p>First we download the cert-manager install manifests from GitHub:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>curl -sSLO https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>
&lt;a href="https://github.com/cert-manager/cert-manager/releases/tag/v1.9.1" target="_blank">https://github.com/cert-manager/cert-manager/releases/tag/v1.9.1&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>Next we push the manifests to GitHub container registry with &lt;em>Flux CLI&lt;/em>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>mkdir -p ./manifests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cp cert-manager.yaml ./manifests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ flux push artifact oci://ghcr.io/&lt;span style="color:#bb60d5">$GITHUB_USER&lt;/span>/manifests/cert-manager:v1.9.1 &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --path&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;./manifests&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --source&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;https://github.com/cert-manager/cert-manager.git&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --revision&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;v1.9.1/4486c01f726f17d2790a8a563ae6bc6e98465505&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>► pushing artifact to ghcr.io/developer-guy/manifests/cert-manager:v1.9.1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>✔ artifact successfully pushed to ghcr.io/developer-guy/manifests/cert-manager@sha256:d1fb0442865148a4e9b4c3431c71d8e44af56c3eb658ea495c5ec48d48c6638b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Before signing the OCI artifact with Cosign, we need to create a set of key pairs, a public and private one:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cosign generate-key-pair
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>This command above outputs two files to disk: &lt;code>cosign.pub&lt;/code> and &lt;code>cosign.key&lt;/code>. The cosign.pub file is the public key and the cosign.key file is the private key. You can use the cosign.pub file to verify the container image and the cosign.key file to sign the container image.&lt;/p>
&lt;/blockquote>
&lt;p>To let Flux to verify the signature of the OCI artifact, we should create a secret that contains the public key::&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kubectl -n flux-system create secret generic cosign-pub &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --from-file&lt;span style="color:#666">=&lt;/span>cosign.pub&lt;span style="color:#666">=&lt;/span>cosign.pub
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now, let&amp;rsquo;s sign it:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ cosign sign --key cosign.key ghcr.io/&lt;span style="color:#bb60d5">$GITHUB_USER&lt;/span>/manifests/cert-manager:v1.9.1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter password &lt;span style="color:#007020;font-weight:bold">for&lt;/span> private key:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Pushing signature to: ghcr.io/developer-guy/manifests/cert-manager
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As we stick into the GitOps practices, we should create a file that contains the &lt;em>OCIRepository&lt;/em> resource, then commit and push those changes into the upstream repository that Flux watches for changes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git clone git@github.com:developer-guy/flux-cosign-demo.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#007020">cd&lt;/span> flux-cosign-demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s create a secret with the GitHub token:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux create secret oci ghcr-auth &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --url&lt;span style="color:#666">=&lt;/span>ghcr.io &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --username&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#70a0d0">${&lt;/span>&lt;span style="color:#bb60d5">GITHUB_USER&lt;/span>&lt;span style="color:#70a0d0">}&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --password&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#70a0d0">${&lt;/span>&lt;span style="color:#bb60d5">GITHUB_TOKEN&lt;/span>&lt;span style="color:#70a0d0">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>► oci secret &lt;span style="color:#4070a0">&amp;#39;ghcr-auth&amp;#39;&lt;/span> created in &lt;span style="color:#4070a0">&amp;#39;flux-system&amp;#39;&lt;/span> namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure Flux to pull the cert-manager artifact, verify its signature and apply its contents:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cat &lt;span style="color:#4070a0">&amp;lt;&amp;lt; EOF | tee ./clusters/my-cluster/cert-manager-sync.yaml
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">apiVersion: source.toolkit.fluxcd.io/v1beta2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">kind: OCIRepository
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">metadata:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> name: cert-manager
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> namespace: flux-system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">spec:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> interval: 5m
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> url: oci://ghcr.io/${GITHUB_USER}/manifests/cert-manager
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> ref:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> semver: &amp;#34;*&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> secretRef:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> name: ghcr-auth
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> verify:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> provider: cosign
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> secretRef:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> name: cosign-pub
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">---
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">kind: Kustomization
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">metadata:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> name: cert-manager
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> namespace: flux-system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">spec:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> interval: 1h
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> timeout: 5m
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> sourceRef:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> kind: OCIRepository
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> name: cert-manager
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> path: &amp;#34;.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> prune: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0"> wait: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s commit and push these changes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git add .
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git commit -m&lt;span style="color:#4070a0">&amp;#34;Add cert-manager OCIRepository and Kustomization&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git push
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After couple of seconds for Flux will have applied these changes. Now let&amp;rsquo;s check the status of them:&lt;/p>
&lt;blockquote>
&lt;p>Or, you can trigger the reconcilation immediately by running the simple command: &lt;em>flux reconcile source git flux-system&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>For &lt;em>Kustomization&lt;/em> resources:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux get kustomizations
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME REVISION SUSPENDED READY MESSAGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cert-manager v1.9.1/d1fb0442865148a4e9b4c3431c71d8e44af56c3eb658ea495c5ec48d48c6638b False True Applied revision: v1.9.1/d1fb0442865148a4e9b4c3431c71d8e44af56c3eb658ea495c5ec48d48c6638b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>flux-system main/14f1e66 False True Applied revision: main/14f1e66
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For &lt;em>OCIRepository&lt;/em> resources:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux get sources oci
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME REVISION SUSPENDED READY MESSAGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cert-manager v1.9.1/d1fb0442865148a4e9b4c3431c71d8e44af56c3eb658ea495c5ec48d48c6638b False True stored artifact &lt;span style="color:#007020;font-weight:bold">for&lt;/span> digest &lt;span style="color:#4070a0">&amp;#39;v1.9.1/d1fb0442865148a4e9b4c3431c71d8e44af56c3eb658ea495c5ec48d48c6638b&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you see the status of the &lt;em>OCIRepository&lt;/em> is &lt;code>True&lt;/code>, it means that Flux has successfully verified the signature of the container image. Because Flux adds a condition with the following attributes to the OCIRepository’s &lt;code>.status.conditions&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>type: SourceVerified&lt;/li>
&lt;li>status: &amp;ldquo;True&amp;rdquo;&lt;/li>
&lt;li>reason: Succeeded&lt;/li>
&lt;/ul>
&lt;p>If the verification fails, Flux will set the &lt;code>SourceVerified&lt;/code> status to &lt;code>False&lt;/code> and will not fetch the artifact contents from the registry. If you see the status of the &lt;em>Kustomization&lt;/em> is &lt;code>True&lt;/code>, it means that Flux has successfully applied the manifests that are stored in the container image.&lt;/p>
&lt;p>Let&amp;rsquo;s check the status of the &lt;em>cert-manager&lt;/em> deployment:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ kubectl get pods --namespace cert-manager
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME READY STATUS RESTARTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cert-manager-cainjector-857ff8f7cb-l469h 1/1 Running &lt;span style="color:#40a070">0&lt;/span> 76s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cert-manager-d58554549-9fbgj 1/1 Running &lt;span style="color:#40a070">0&lt;/span> 76s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cert-manager-webhook-76fdf7c485-9v82g 1/1 Running &lt;span style="color:#40a070">0&lt;/span> 76s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="furthermore">Furthermore&lt;/h2>
&lt;p>As we can store &lt;em>Helm Charts&lt;/em> in OCI registries with the release of Helm
&lt;a href="https://helm.sh/blog/storing-charts-in-oci/" target="_blank">v3.8.0&lt;/a> which means that we can also sign them with &lt;em>cosign&lt;/em> and verify them with Flux. The Flux community is already working on it and want to add support for verifying the Helm charts stored in OCI registries as OCI Artifacts in the next releases of Flux. You can follow the progress of this feature in the following issue:
&lt;a href="https://github.com/fluxcd/source-controller/issues/914" target="_blank">fluxcd/source-controller#914&lt;/a>.&lt;/p>
&lt;p>The Sigstore community is aware of the risks and the toil of managing public/private key pairs, so cosign offers another mode for signing and verification called
&lt;a href="https://github.com/sigstore/cosign/blob/main/KEYLESS.md" target="_blank">Keyless&lt;/a>, which do not require managing any keys manually. Flux also supports that. If you omit the &lt;code>.verify.secretRef&lt;/code> field, Flux will try to verify the signature using the Keyless mode. It&amp;rsquo;s worth mentioning keyless verification is an experimental feature, using custom root CAs or self-hosted Rekor instances are currently not supported.&lt;/p></description></item><item><title>Blog: September 2022 Update</title><link>https://fluxcd.io/blog/2022/10/september-2022-update/</link><pubDate>Tue, 04 Oct 2022 11:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/10/september-2022-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/10/september-2022-update/flux+oci-featured_huf432124a529dfb93ede643d3725fac62_31151_640x0_resize_box_3.png" width="640" height="320"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/09/august-2022-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of October 2022 - let&amp;rsquo;s recap together what happened
in September - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-v0340-and-0350-bring-oci-improvements">Flux v0.34.0 and 0.35.0 bring OCI improvements&lt;/h3>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 510px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/10/september-2022-update/flux&amp;#43;oci-featured_huf432124a529dfb93ede643d3725fac62_31151_500x0_resize_box_3.png" width="500" height="250">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.35.0" target="_blank">Flux v0.35&lt;/a>
and
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.34.0" target="_blank">Flux v0.34&lt;/a>
landed in September. They bring tons of improvements, especially in the
area of OCI. We encourage everyone to upgrade for the best experience.&lt;/p>
&lt;p>Please note: there are breaking changes: The Flux controller logs have
been aligned with the Kubernetes structured logging. For more details on
the new logging structure please see:
&lt;a href="https://github.com/fluxcd/flux2/issues/3051" target="_blank">fluxcd/flux2#3051&lt;/a>.&lt;/p>
&lt;p>Here is a quick summary of what you can look forward to in terms of
features and improvements:&lt;/p>
&lt;ul>
&lt;li>Verify OCI artifacts signed by Cosign (including &lt;code>keyless&lt;/code> - currently
still experimental and only supporting GCP and GHCR) with
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#verification">OCIRepository.spec.verify&lt;/a>.
Note this supports contextual login, but not insecure registries.&lt;/li>
&lt;li>Allow pulling Helm charts dependencies from HTTPS repositories with
mixed self-signed TLS and public CAs.&lt;/li>
&lt;li>Allow pulling Helm charts from OCI artifacts stored at the root of
AWS ECR.&lt;/li>
&lt;li>Allow running bootstrap for insecure HTTP Git servers with &lt;code>flux bootstrap git --allow-insecure-http --token-auth&lt;/code>.&lt;/li>
&lt;li>Improve health checking for global objects such as &lt;code>ClusterClass&lt;/code>,
&lt;code>GatewayClass&lt;/code>, &lt;code>StorageClass&lt;/code>, etc.&lt;/li>
&lt;li>The controllers and the Flux CLI are now built with Go 1.19.&lt;/li>
&lt;li>Allow pulling artifacts from an in-cluster Docker Registry over
plain HTTP with
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#insecure">&lt;code>OCIRepository.spec.insecure&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Allow defining OCI sources for non-TLS container registries with
&lt;code>flux create source oci --insecure&lt;/code>.&lt;/li>
&lt;li>Enable contextual login when publishing OCI artifacts from a Cloud
VM using &lt;code>flux push artifact --provider=aws|azure|gcp&lt;/code>.&lt;/li>
&lt;li>Prioritise static credentials over OIDC providers when pulling OCI
artifacts from container registries on multi-tenant cluster.&lt;/li>
&lt;li>Reconcile Kubernetes Class types (&lt;code>ClusterClass&lt;/code>, &lt;code>GatewayClass&lt;/code>,
&lt;code>StorageClass&lt;/code>, etc) in a dedicated stage before any other custom
resources like &lt;code>Clusters&lt;/code>, &lt;code>Gateways&lt;/code>, &lt;code>Volumes&lt;/code>, etc.&lt;/li>
&lt;li>When multiple SOPS providers are available, run the offline
decryption methods first to avoid failures due to KMS
unavailability.&lt;/li>
&lt;li>Add finalizers to the notification API to properly record the
reconciliation metrics for deleted resources.&lt;/li>
&lt;li>Publish the Flux install manifests as OCI artifacts on GitHub and
DockerHub container registries under &lt;code>fluxcd/flux-manifests&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>For more information on OCI and Cosign support please see the
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/#signing-and-verification">Flux
documentation&lt;/a>.&lt;/p>
&lt;p>It took us six months to debate, design and implement OCI support in
Flux. Big thanks to all the Flux contributors that helped us reach this
milestone!&lt;/p>
&lt;h3 id="flux-legacy-v1-retirement-plan">Flux Legacy (v1) Retirement Plan&lt;/h3>
&lt;p>Thanks to so many of you who have been migrating to the latest Flux
version, often in conversation with us. We appreciate your enthusiasm
for the increased capabilities of Flux. In October 2020 we put Flux
Legacy and Helm operator into maintenance mode (cf
&lt;a href="https://github.com/fluxcd/flux/issues/3320" target="_blank">flux#3320&lt;/a>
and
&lt;a href="https://github.com/fluxcd/helm-operator/issues/546" target="_blank">helm-operator#546&lt;/a>).
Back then we promised to continue to support them for 6 months once we
reached feature-parity across all former feature sets, and instead we
have offered extended support for over a year.&lt;/p>
&lt;p>We
&lt;a href="https://fluxcd.io/blog/2021/03/march-2021-update/#feature-parity---what-is-this">reached parity in March
2021&lt;/a>
and announced
&lt;a href="https://fluxcd.io/blog/2021/07/july-2021-update/#from-now-on-flux-apis-will-be-stable">stable APIs in July
2021&lt;/a>.
Since then we added OCI support and many other modern features to Flux
v2. Thanks to you not only for migrating, but also for adding yourselves
to the latest Flux
&lt;a href="https://fluxcd.io/adopters/">adopters page&lt;/a>! We really appreciate
it. Your work has brought down the number of support requests for legacy
Flux to 5% of all volume in the past year.&lt;/p>
&lt;p>We will archive Flux Legacy in November this year. If you still need
migration help, there are still
&lt;a href="https://bit.ly/FluxMigrationSurvey" target="_blank">free migration
workshops&lt;/a>, or reach out for paid
support to one of the companies
&lt;a href="https://fluxcd.io/support/#commercial-support">listed
here&lt;/a>.&lt;/p>
&lt;p>Some recent prompts for this include:&lt;/p>
&lt;ul>
&lt;li>Some of the Flux v1 dependencies are pinned to EOL versions, which
cannot be upgraded without causing regressions or a cascading
amount of changes to the codebase.&lt;/li>
&lt;li>All Kubernetes dependencies are pinned within version v1.21. That
version already reached end-of-life support upstream.&lt;/li>
&lt;/ul>
&lt;p>Thanks for joining us on this journey of building Flux.
&lt;a href="https://github.com/fluxcd/flux2" target="_blank">Please give
Flux a star&lt;/a>!&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>The team is happy to announce that
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flux Subsystem for Argo
(FSA)&lt;/a> is
now on-par with ArgoCD regarding supported versions. FSA now provides
all versions supported by ArgoCD. The project will provide security
updates based on ArgoCD v2.2 and v2.3, and for the active ArgoCD version
(currently v2.4), FSA will support them, starting from v2.4.12.&lt;/p>
&lt;p>For Flux compatibility, FSA will be tested against every release of
future Flux versions.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 910px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/10/september-2022-update/fsa_hu5380555af1d3c2a684fd3516edf7bcb9_404627_900x0_resize_box_3.png" width="900" height="451">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>Weaveworks just released version
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.9.6" target="_blank">v0.9.6&lt;/a>
for Weave GitOps. There are a lot of great new features that have been
released in the last month. First, it is continuing the trend of being a
feature rich Flux UI by adding support for Flux Providers and Alerts.
When you click on the user icon you are then taken to a screen that
contains those objects. As a platform operator, you can easily
understand where events are being sent.&lt;/p>
&lt;p>On the kustomization and helm release detail pages there is now a tab to
check your dependencies for those objects. The &lt;code>dependsOn&lt;/code> is a
powerful feature in Flux and now you can easily see these visualised
within the application. We&amp;rsquo;re also making it easy to navigate from these
graphs to relevant objects in a near future release.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 910px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/10/september-2022-update/wg-dependson_huc9b5628667f5b3d6af972e8db103dd95_828455_900x0_resize_box_3.png" width="900" height="544">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>In addition, the team added numerous improvements to &lt;code>gitops run&lt;/code> our live
coding environment. Now you can run the command against an empty folder
and it will generate a &lt;code>kustomization.yaml&lt;/code> file and give you a live
connection between that working directory and the cluster you are
connected to. The team is full steam ahead on the next set of features
for the run experience.&lt;/p>
&lt;h5 id="terraform-controller">Terraform Controller&lt;/h5>
&lt;p>The Weave GitOps team is continuing to improve our ecosystem of
controllers with the latest release of the tf-controller
&lt;a href="https://github.com/weaveworks/tf-controller/releases/tag/v0.12.0" target="_blank">v0.12.0&lt;/a>.&lt;/p>
&lt;p>The notable features in this release are: custom backend support,
interop with Notification controller, and support human readable plan
output in &lt;code>ConfigMap&lt;/code>. This is all new:&lt;/p>
&lt;ul>
&lt;li>Enable custom backends for Terraform&lt;/li>
&lt;li>Support &lt;code>backendConfigsFrom&lt;/code> for specifying backend configuration
from Secrets&lt;/li>
&lt;li>Add a parameter for specifying max gRPC message size, default to 4MB&lt;/li>
&lt;li>Implement &lt;code>force-unlock&lt;/code> for &lt;code>tfstate&lt;/code> management&lt;/li>
&lt;li>Fix the initialization status&lt;/li>
&lt;li>Recording events to support Flux notification controller&lt;/li>
&lt;li>Support specifying targets for plan and apply&lt;/li>
&lt;li>Add node selector, affinity and tolerations for the runner pod&lt;/li>
&lt;li>Add volume and volumeMounts for the runner pod&lt;/li>
&lt;li>Add file mapping to map files from Secrets to home or workspace
directory&lt;/li>
&lt;li>Fix Plan prompt being overridden by the progressing message&lt;/li>
&lt;li>Support storing human-readable plan output in a ConfigMap&lt;/li>
&lt;/ul>
&lt;p>Learn more at the
&lt;a href="https://fluxcd.io/blog/2022/09/how-to-gitops-your-terraform/">following blog post &amp;ldquo;How to GitOps Your
Terraform&amp;rdquo;&lt;/a>,
by Priyanka Ravi &amp;amp; Daniel Holbach.&lt;/p>
&lt;h5 id="weave-gitops-enterprise">Weave GitOps Enterprise&lt;/h5>
&lt;p>The Weave GitOps Enterprise continues to build on top of the OSS feature
set with its latest
&lt;a href="https://web.archive.org/web/20230528041532/https://docs.gitops.weave.works/docs/releases/" target="_blank">v0.9.5
release&lt;/a>.
First, the team has added a new add application button with support for
both Kustomizations and Helm Releases. This makes it super easy to add
the relevant Flux primitives to get your applications loaded onto the
cluster(s) of your choice.&lt;/p>
&lt;p>Workspaces were added as well. This makes it super easy to manage
multi-tenancy on Weave GitOps Enterprise. It is built on top of Flux&amp;rsquo;s
tenancy model with a lot of extra flexibility and power. For example,
all of your workspaces can be defined in one or more files. We then have
a simple CLI command that will generate all of the necessary YAML for
you. This includes advanced features such as policies to ensure full
compliance within the tenant. You can define which repositories your
users can use as well as which clusters applications can be deployed to.
To learn more about this feature check out the
&lt;a href="https://web.archive.org/web/20230921131521/https://docs.gitops.weave.works/docs/workspaces/multi-tenancy/" target="_blank">documentation&lt;/a>.&lt;/p>
&lt;p>You can also now define pipelines and environments for Helm Charts. This
will allow your application teams to see how things are rolled out
across dev, staging, and production environments; or however you choose
to define your environments. There will be a lot of continued efforts in
this area so stay tuned.&lt;/p>
&lt;p>Your engineering teams are able to see policy violations for
applications across clusters. Policy sets can be used by platform
operators to define in one place whether policies are for auditing
purposes or should be blocked by the admission controller. The team
built out a profile for making it easy to set up policy dashboards using
the ELK stack. Platform operators now have greater flexibility when
configuring the same policy with different values for different
clusters.&lt;/p>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>A lot of great features have been added to the extension, most notably
support for OCI and Azure. Please see the recent
&lt;a href="https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/">blog post in our
ecosystem category&lt;/a> for
more details.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
September here are a couple of talks we would like to highlight.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.cncf.io/online-programs/cncf-on-demand-webinar-flux-increased-security-scalability-with-oci/" target="_blank">CNCF On-Demand Webinar (Sep 15): Flux increased security &amp;amp;
scalability with OCI&lt;br>
&lt;/a>&lt;em>Flux
is trusted for its high levels of security, and new OCI support
brings even greater GitOps security and scalability. Max Jonas
Werner covers the benefits like more streamlined repo structure
options and better ways to manage breaking changes in your app.&lt;/em>&lt;/li>
&lt;li>
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-how-to-gitops-your-terraform/" target="_blank">CNCF On-Demand Webinar (Sep 29) How to GitOps Your
Terraform&lt;/a>&lt;em>&lt;br>
Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi walks you through step-by-step how to manage
Terraform resources the GitOps way, from provisioning to
enforcement. Bring GitOps to infrastructure and application
resources for hybrid automation, state enforcement, drift
detection and more.&lt;/em>&lt;/li>
&lt;/ul>
&lt;p>Here is a list of additional videos and topics we really enjoyed -
please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;h4 id="kubecon">KubeCon&lt;/h4>
&lt;p>We are happy to announce that we will be at GitOpsCon and KubeCon in
October! Visit our booth in-person at the Project Pavilion during
KubeCon and the full schedule is below (and on our
&lt;a href="https://bit.ly/flux-kubecon-2022" target="_blank">Flux @ KubeCon mini
site&lt;/a>. See you soon!&lt;/p>
&lt;h5 id="monday-october-24-flux-project-meeting-at-kubecon">Monday, October 24 (Flux Project Meeting at KubeCon)&lt;/h5>
&lt;p>13:00 - 17:00
&lt;a href="https://sched.co/1BaSl" target="_blank">Flux Project Meeting&lt;/a> Room 335, Level 300&lt;/p>
&lt;blockquote>
&lt;p>We&amp;rsquo;ll have talks/demos from beginner to advanced, including but not limited to:
Flux basics, what&amp;rsquo;s new with Flux including OCI support, VS Code, Terraform Controller,
Cosign, Helm, &amp;amp; Flagger, and of course you can ask Maintainers all your
questions.&lt;/p>
&lt;/blockquote>
&lt;h5 id="tuesday-october-25-gitopscon">Tuesday, October 25 (GitOpsCon)&lt;/h5>
&lt;p>9:45 - 10:15 GitOpsCon:
&lt;a href="https://sched.co/1AR8M" target="_blank">How to Achieve (Actual) GitOps with Terraform
and Flux&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Priyanka &amp;quot;Pinky&amp;quot; Ravi (Weaveworks) and Roberth Stand (Crayon Group)&lt;/p>
&lt;/blockquote>
&lt;p>9:45 - 10:15 GitOpsCon:
&lt;a href="https://sched.co/1AR8J" target="_blank">Toward Full Adoption of GitOps and Best
Practices at RingCentral&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Tamao Nakahara (Weaveworks) and Ivan Anisimov (RingCentral)&lt;/p>
&lt;/blockquote>
&lt;p>11:10 - 11:40 GitOpsCon:
&lt;a href="https://sched.co/1AR8V" target="_blank">Simplifying Edge Deployments Using EMCO and
GitOps&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Igor DC &amp;amp; Adarsh Vincent Chittilappilly (Intel)&lt;/p>
&lt;/blockquote>
&lt;p>11:40 - 12:10 Prometheus Days:
&lt;a href="https://sched.co/1AsMU" target="_blank">Automate your SLO validation with Prometheus &amp;amp; Flagger&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Sanskar Jaiswal &amp;amp; Kingdon Barrett (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>12:00 - 12:10 GitOpsCon:
&lt;a href="https://sched.co/1AR8b" target="_blank">Why Do We Do This? The Heart of
GitOps&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Leigh Capili (VMware)&lt;/p>
&lt;/blockquote>
&lt;p>13:10 - 13:20 GitOpsCon:
&lt;a href="https://sched.co/1AR8Y" target="_blank">Green(ing) CI/CD: A Sustainability Journey
with GitOps&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Niki Manoledaki (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>13:40 - 14:10 GitOpsCon:
&lt;a href="https://sched.co/1AR9B" target="_blank">Complete DR of Workloads, PVs and CSI
Snapshots via Flux and Vault OSS&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Kingdon Barrett (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>14:15 - 14:45 GitOpsCon:
&lt;a href="https://sched.co/1AR8z" target="_blank">GitOps with Flux and OCI
Registries&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Soulé Ba &amp;amp; Scott Rigby (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>14:15 - 14:45 GitOpsCon:
&lt;a href="https://sched.co/1AR8z" target="_blank">Pixie + Flux, VSCode, GitOps Observability
from Top to Bottom&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Somtochi Onyekwere (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;h5 id="wednesday-october-26-kubecon">Wednesday, October 26 (KubeCon)&lt;/h5>
&lt;p>14:30 - 16:00 KubeCon:
&lt;a href="https://sched.co/182Ha" target="_blank">Tutorial: So You Want To Develop a Cluster API
Provider&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Anusha Hegde &amp;amp; Winnie Kwon &amp;amp; Sedef Savas (VMware), Richard Case
(Weaveworks),&lt;/p>
&lt;p>Avishay Traeger (Red Hat)&lt;/p>
&lt;/blockquote>
&lt;p>15:25 - 16:00 KubeCon:
&lt;a href="https://sched.co/182Go" target="_blank">Flagger, Linkerd, And Gateway API: Oh
My!&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Jason Morgan (Linkerd) &amp;amp; Sanskar Jaiswal (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;p>15:25 - 16:00 KubeCon:
&lt;a href="https://sched.co/182Hg" target="_blank">Tutorial: How To Write a Reconciler Using K8s
Controller-Runtime!&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Scott Rigby, Somtochi Onyekwere, Niki Manoledaki &amp;amp; Soulé Ba
(Weaveworks),&lt;/p>
&lt;p>Amine Hilaly (Amazon Web Services)&lt;/p>
&lt;/blockquote>
&lt;h5 id="thursday-october-27-kubecon">Thursday, October 27 (KubeCon)&lt;/h5>
&lt;p>11:00 - 11:35 KubeCon:
&lt;a href="https://sched.co/182Ns" target="_blank">Learn About Helm And Its
Ecosystem&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Andrew Block &amp;amp; Karena Angell (Red Hat), Matt Farina (SUSE) Scott Rigby
(Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;h5 id="friday-october-28-kubecon">Friday, October 28 (KubeCon)&lt;/h5>
&lt;p>11:00 - 12:30 KubeCon:
&lt;a href="https://sched.co/182QL" target="_blank">Flux
ContribFest&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Room 410 B&lt;/p>
&lt;/blockquote>
&lt;p>16:55 - 17:30 KubeCon:
&lt;a href="https://sched.co/182QX" target="_blank">Flux Maturity, Feature, and Contrib
Update&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Somtochi Onyekwere &amp;amp; Kingdon Barrett (Weaveworks)&lt;/p>
&lt;/blockquote>
&lt;h4 id="flux-bug-scrub">Flux Bug Scrub&lt;/h4>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/weave-user-group/events/wvhvvsydcnbhb/" target="_blank">2022-10-05 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/weave-user-group/events/wvhvvsydcnbzb/" target="_blank">2022-10-19 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://sched.co/182QL" target="_blank">2022-10-28 20:55 UTC, 16:55 EDT (The Flux Bug Scrub, Live at
ContribFest)&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="new-flux-project-members-batuhan-apaydın-and-rashed-kamal">New Flux Project Members: Batuhan Apaydın and Rashed Kamal&lt;/h3>
&lt;p>We are very excited to be able to announce two new Flux project members
this month.&lt;/p>
&lt;p>Batuhan Apaydın, Senior Software Engineer at Trendyol, has been
&lt;a href="https://github.com/fluxcd/community/issues/242" target="_blank">helping out quite a bit&lt;/a>
in the OCI discussions and wrote a blog post explaining
&lt;a href="https://fluxcd.io/blog/2022/08/manage-kyverno-policies-as-ocirepositories/">how to manage
Kyverno policies as OCI artifacts&lt;/a>
recently. We are very glad to have him in our community and there&amp;rsquo;s more
OCI awesomeness and blog posts planned.&lt;/p>
&lt;p>Rashed Kamal, Staff Engineer at VMware,
&lt;a href="https://github.com/fluxcd/community/issues/239" target="_blank">joined us in September as
well&lt;/a>. His
interests include OCI, where he contributed to the RFC too. On top of
that he fixed a number of issues in Flux. Thanks for all of that and for
being part of the team!&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/10/september-2022-update/rashedkvm_hucfa2ab54e3b395798972f0356f6fe3b2_36360_400x0_resize_q75_box.jpg" width="400" height="400">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://novaid.vn/" target="_blank">NovaID&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions here&lt;/a>
or give us a ping and we will help to add you. Not only is it great for
us to get to know and welcome you to our community. It also gives the
team a big boost in morale to know where in the world Flux is used
everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>We simplified the build process of the website. We are on a very
recent version of the Docsy theme again!&lt;/li>
&lt;li>Our
&lt;a href="https://fluxcd.io/flux/cheatsheets/bootstrap/">Bootstrap Cheatsheet&lt;/a>
now contains instructions on how to enable notifications for third
party controllers.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/flux-e2e/">Flux End-To-End documentation&lt;/a> was
updated to reflect recent changes.&lt;/li>
&lt;li>We added a lot of new videos to
&lt;a href="https://fluxcd.io/resources/">the Flux Resources page&lt;/a>.&lt;/li>
&lt;li>Many small improvements and fixes across the entire site and docs.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Kingdon Barrett, Arhell, Paulo Gomes, Max Jonas Werner, Vanessa
Abankwah, Santosh Kaluskar, Batuhan Apaydın, Stacey Potter, Bang Nguyen,
Sven Nebel, Aurel Canciu, David Harris, Gustaf Lindstedt, Simo
Aleksandrov and annaken.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-10-06 or 2022-10-12.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, join the
discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: GitOps Without Leaving your IDE</title><link>https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/</link><pubDate>Wed, 28 Sep 2022 11:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/vscode-gitops-commands-featured_hud8bc9c45cad569062b2b353a7572261b_306010_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>Welcome to the second
&lt;a href="https://fluxcd.io/tags/ecosystem/">blog post in our Flux Ecosystem category&lt;/a>!
This time we are talking about one of the
&lt;a href="https://fluxcd.io/ecosystem/#flux-uis--guis">Flux UIs&lt;/a>: it&amp;rsquo;s
the
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">VS Code GitOps Extension&lt;/a>.&lt;/p>
&lt;p>If you already use VS Code, this extension will be straight up your alley: it
provides an intuitive way to manage, troubleshoot and operate your Kubernetes
environment following the GitOps operating model, accelerating your development
lifecycle and simplifying your continuous delivery pipelines. Of course it uses
Flux under the hood.&lt;/p>
&lt;h2 id="getting-started">Getting Started&lt;/h2>
&lt;p>Installing it: It&amp;rsquo;s
&lt;a href="https://marketplace.visualstudio.com/items?itemName=Weaveworks.vscode-gitops-tools" target="_blank">in the Visual Studio Code
Marketplace&lt;/a>, so if you search for it in VS Code, it&amp;rsquo;s just a click of
the Install button away.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 810px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/vscode-gitops-features_huc42989800101be5ffa42886711045c56_143771_800x0_resize_box_3.png" width="800" height="1065">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Additionally, you will need to&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://kubectl.docs.kubernetes.io/installation/kubectl/" target="_blank">Install Kubectl&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/installation/#install-the-flux-cli">Install Flux CLI&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://git-scm.com/downloads" target="_blank">Install git&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Optionally, if available, the extension will make use of the &lt;code>az&lt;/code> tool
(for Azure clusters) and &lt;code>docker&lt;/code> as well.&lt;/p>
&lt;p>With that out of the way, let&amp;rsquo;s get going and take the extension for a
spin.&lt;/p>
&lt;h2 id="drive-everything-from-your-ide">Drive everything from your IDE&lt;/h2>
&lt;p>Once you launch VS Code, you should see available clusters listed in the
Clusters section of the GitOps extension. Now you can easily interact
with the resources in each of the clusters. This makes it very
straightforward to make changes in your manifests, commit and observe
changes in the clusters without leaving your IDE.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 810px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/vscode-gitops-commands-featured_hud8bc9c45cad569062b2b353a7572261b_306010_800x0_resize_box_3.png" width="800" height="450">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 810px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/vscode-gitops-tools_hu600760dc3592d5cf40750027ba68a58a_234068_800x0_resize_box_3.png" width="800" height="450">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>The extension was designed so that you always have access to the
immediate tasks and events. Turning a manifest into a &lt;code>Kustomization&lt;/code> or
&lt;code>Source&lt;/code>? Right-click on the YAML file. View repositories, clusters,
sources, kustomizations, etc. - you see them at the first glance. View
GitOps Output panel with CLI command traces for diagnostics, cluster and
components versions, Flux controller logs, everything you might need to
debug. Enable/disable GitOps cluster operations with just a click.
Reconcile Sources and Workloads demand, and much more - links to
most-needed docs included.&lt;/p>
&lt;h2 id="constantly-evolving">Constantly evolving&lt;/h2>
&lt;p>The extension is rapidly growing new features. In 0.21.0, the team added
OCI support which is supported natively in Flux. If you would like to
see a video demo of this, check out this talk done by Annie Talvasto and
Kingdon Barrett in the CNCF Webinar series.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/Hz8IP_eprec" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>In 0.22.0 basic support for Azure AKS/Arc was added. Future releases
will add a new beginner-friendly UI workflow for creating complete Flux
configurations using both generic Flux Source (Git, OCI, Bucket,
&lt;code>HelmRepository&lt;/code>) and Workload (&lt;code>Kustomization&lt;/code>, &lt;code>HelmRelease&lt;/code>) resources
as well as Azure &lt;code>FluxConfig&lt;/code> resources.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 810px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/gitops-without-leaving-your-ide/azure-support_hu406742798f89d858567e5883bc0c4978_117756_800x0_resize_box_3.png" width="800" height="200">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>The team has begun work to transition the extension implementation from
shell out commands to Javascript APIs for Kubernetes and Azure. Once
that is complete, extension responsiveness and performance will improve
dramatically.&lt;/p>
&lt;h2 id="join-the-community">Join the community&lt;/h2>
&lt;p>The team behind the extension loves feedback. If you like what you see,
please star
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">the extension on
GitHub&lt;/a>
or leave an issue if something is missing, or send a PR if you can.&lt;/p>
&lt;p>All feedback is very welcome!&lt;/p></description></item><item><title>Blog: How to GitOps Your Terraform</title><link>https://fluxcd.io/blog/2022/09/how-to-gitops-your-terraform/</link><pubDate>Wed, 14 Sep 2022 11:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/09/how-to-gitops-your-terraform/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/09/how-to-gitops-your-terraform/tf-controller2-featured_hu4780872c53a7fcf48bdaf1dc3836ae60_2295744_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>This is the first blog post in a series where we want to shine a light
on projects in the
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem&lt;/a>. This time it&amp;rsquo;s
going to be the
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">Terraform
Controller&lt;/a>.&lt;/p>
&lt;p>If you use Terraform, you might think of it as &amp;ldquo;Infrastructure as Code&amp;rdquo;
and to be separate from the concept of GitOps. Quite often we have seen
debates about &amp;ldquo;Infrastructure as Code vs. GitOps&amp;rdquo;. The Terraform
Controller reconciles these two worlds and lets you take advantage of
the benefits of GitOps for existing Terraform resources: one source of
truth, one single pane of glass and drift detection among them.&lt;/p>
&lt;p>You might have resorted to using pipelines or manual deployments up
until now. In this blog post we are going to show how to have your
Terraform resources managed the GitOps way. Without having to convert
your code at all!&lt;/p>
&lt;h2 id="what-is-the-terraform-controller">What is the Terraform Controller?&lt;/h2>
&lt;p>The
&lt;a href="https://weaveworks.github.io/tf-controller/" target="_blank">Terraform Controller&lt;/a>
is a
&lt;a href="https://fluxcd.io" target="_blank">Flux&lt;/a> controller that can manage your
Terraform resources. Although Flux runs on Kubernetes, whatever you are
using Terraform for, the Flux controller can manage it. It has several
features including the ability to do manual approvals or auto-approve
Terraform plans, and the Terraform outputs can be set as a Kubernetes
secret. It is also integrated with Terraform Cloud and Terraform
Enterprise.&lt;/p>
&lt;p>The benefits of using the Terraform Controller is that you are able to
take advantage of GitOps for existing Terraform resources. There is
drift detection of Terraform resources and it can be used as a glue for
Terraform resources and Kubernetes workloads.&lt;/p>
&lt;p>Terraform Controller is very versatile because it offers different modes
of operation and many features which give you the integration points and
control you need. Primarily it supports these use-cases:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GitOps Automation Model:&lt;/strong> Here you GitOps your Terraform
resources from the provision steps to the enforcement steps, like
for example a whole EKS cluster.&lt;/li>
&lt;li>&lt;strong>Hybrid GitOps Automation Model:&lt;/strong> Here you GitOps parts of your
existing infrastructure resources. For example, you have an
existing EKS cluster. You can choose to GitOps only its nodegroup,
or its security group.&lt;/li>
&lt;/ul>
&lt;p>Building on this, you can make use of these features if you have a
&lt;code>TFSTATE&lt;/code> file:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>State Enforcement:&lt;/strong> Use GitOps to enforce it, without changing
anything else.&lt;/li>
&lt;li>&lt;strong>Drift Detection:&lt;/strong> Use GitOps just for drift detection, so you can
decide to do things later when a drift occurs.&lt;/li>
&lt;/ul>
&lt;p>And
&lt;a href="https://weaveworks.github.io/tf-controller/#features" target="_blank">there&amp;rsquo;s more&lt;/a>:
Multi-Tenancy, Plan and Manual Approve and more features on
&lt;a href="https://github.com/weaveworks/tf-controller#roadmap" target="_blank">the
roadmap&lt;/a>.&lt;/p>
&lt;p>Now let&amp;rsquo;s move on to how to integrate it practically!&lt;/p>
&lt;h2 id="gitopsing-your-terraform">GitOpsing your Terraform&lt;/h2>
&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;p>Obviously you will need a Kubernetes cluster and Flux installed.
Terraform Controller will require at least Flux 0.32, which in turn
needs at least Kubernetes version 1.20.6. Either use flux install or
flux bootstrap as explained in
&lt;a href="https://fluxcd.io/flux/get-started/">the Flux documentation&lt;/a>.&lt;/p>
&lt;h3 id="installation">Installation&lt;/h3>
&lt;p>Now you need to install Terraform Controller. There are many ways to do it,
check out the
&lt;a href="https://weaveworks.github.io/tf-controller/getting_started/#installation" target="_blank">installation
docs&lt;/a>
for more information.&lt;/p>
&lt;p>One very easy way to do it is to add this
&lt;a href="https://raw.githubusercontent.com/weaveworks/tf-controller/main/docs/release.yaml" target="_blank">&lt;code>HelmRelease&lt;/code>&lt;/a>
to your bootstrap repository.&lt;/p>
&lt;h3 id="tying-in-your-terraform-resources">Tying in your Terraform resources&lt;/h3>
&lt;p>And here is where all the beauty of Terraform Controller comes in - it
does all the hard work for you. All you will need to do to is&lt;/p>
&lt;ol>
&lt;li>Define the source of your Terraform resources&lt;/li>
&lt;li>Enable GitOps Automation&lt;/li>
&lt;/ol>
&lt;h4 id="define-source">Define source&lt;/h4>
&lt;p>So let&amp;rsquo;s go ahead, here we define a Source controller&amp;rsquo;s source (you can
pick any of &lt;code>GitRepository&lt;/code>, &lt;code>Bucket&lt;/code>, &lt;code>OCIRepository&lt;/code>). A &lt;code>GitRepository&lt;/code>
entry could look like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helloworld&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30s&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/tf-controller/helloworld&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">branch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>main&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="the-gitops-automation-mode">The GitOps Automation mode&lt;/h4>
&lt;p>The GitOps automation mode could be enabled by setting
&lt;code>.spec.approvePlan=auto&lt;/code>. In this mode, Terraform resources will be
planned, and automatically applied for you. Here is a simple example you
can just copy and paste.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>infra.contrib.fluxcd.io/v1alpha1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Terraform&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helloworld&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>1m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">approvePlan&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;auto&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helloworld&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: If you have a &lt;code>kustomization.yaml&lt;/code> file (which is the case in the
basic flux bootstrap use-case), make sure you add the file(s) the above
manifest portions are in into the resources list.&lt;/p>
&lt;p>Once you commit this to Git, you should see Terraform Controller pick
this up quickly. One way to confirm is:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">kubectl -n flux-system get terraforms.infra.contrib.fluxcd.io
NAME READY STATUS AGE
helloworld True No drift:
main/d9c5cc348e555526ea563fb82fc901e37de4d732 1m
&lt;/code>&lt;/pre>&lt;p>Simple, wasn&amp;rsquo;t it?&lt;/p>
&lt;h2 id="what-else-is-there">What else is there?&lt;/h2>
&lt;p>The Terraform Controller team has been hard at work and made sure that
many of the common
&lt;a href="https://weaveworks.github.io/tf-controller/use_cases/" target="_blank">use-cases are
supported&lt;/a>.
Above we covered the automation mode, some teams might want more
control, so there&amp;rsquo;s a &amp;ldquo;plan and manual apply&amp;rdquo; mode as well. You can
configure it as well to just do &amp;ldquo;drift detection only&amp;rdquo;.&lt;/p>
&lt;p>And there&amp;rsquo;s more, you can disable drift detection, use it with AWS EKS
IRSA, interact with Terraform (set variables, manage terraform state),
there&amp;rsquo;s health checks and lots of other flexibility. OCI fans will love
to hear that it supports OCI Artifacts as Source as well.&lt;/p>
&lt;p>It is also
&lt;a href="https://weaveworks.github.io/tf-controller/tfe_integration/" target="_blank">integrated with Terraform Cloud and Terraform
Enterprise&lt;/a>.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/how-to-gitops-your-terraform/tf-controller1_hu6cdbe679a8ab337f70738f9b44aca5c1_411818_600x0_resize_box_3.png" width="600" height="466">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>In past weeks the performance of the Terraform Controller has been
improved significantly as well. Now the controller is greatly scalable
to reconcile and provision a high volume of Terraform modules
concurrently. The team has recently tested the controller with 1,500
Terraform modules.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/how-to-gitops-your-terraform/tf-controller2-featured_hu4780872c53a7fcf48bdaf1dc3836ae60_2295744_600x0_resize_box_3.png" width="600" height="337">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>In the most recent release (v0.12.0) new features are: custom backend
support, interoperability with Flux&amp;rsquo;s Notification Controller, and
supporting human-readable plan output in &lt;code>ConfigMap&lt;/code>.&lt;/p>
&lt;p>And there&amp;rsquo;s more to come, check out
&lt;a href="https://github.com/weaveworks/tf-controller#roadmap" target="_blank">the team&amp;rsquo;s
roadmap&lt;/a>.
While you are checking it out, please give feedback as well. If you are
missing something, if you like it, if you want to contribute - the team
is eager to hear from you.&lt;/p>
&lt;h2 id="want-to-learn-more">Want to learn more?&lt;/h2>
&lt;p>Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi, Developer Experience Engineer at Weaveworks gave
a great introduction to the Terraform Controller a couple of weeks ago.
Take a look to dive into some of the finer details of this!&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/8xhEPPA6XUs" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>You are lucky, there is more to come! Pinky will give an on-demand
webinar as part of the CNCF series. You can
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-how-to-gitops-your-terraform/" target="_blank">sign up for it
here&lt;/a>.
It will become available on Sep 29th, 2022.&lt;/p>
&lt;blockquote>
&lt;p>Title: How to GitOps your Terraform!&lt;/p>
&lt;p>Presenter: Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi&lt;/p>
&lt;p>Link:
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-how-to-gitops-your-terraform/" target="_blank">Registration
here&lt;/a>.&lt;/p>
&lt;/blockquote></description></item><item><title>Blog: August 2022 Update</title><link>https://fluxcd.io/blog/2022/09/august-2022-update/</link><pubDate>Mon, 05 Sep 2022 11:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/09/august-2022-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/09/august-2022-update/0.33-screenshot-featured_hu8cd1741a27c519dcba636a0cc0000bb2_127046_640x0_resize_q75_box.jpg" width="640" height="502"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/08/july-2022-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of September 2022 - let&amp;rsquo;s recap together what
happened in August - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="new-flux-releases-add-oci-support-and-better-integration-with-cloud-services">New Flux releases add OCI support and better integration with cloud services&lt;/h3>
&lt;p>August saw two big releases of Flux:
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.33.0" target="_blank">v0.33&lt;/a>
and
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.32.0" target="_blank">v0.32&lt;/a>.
Let&amp;rsquo;s go through the major changes one by one.&lt;/p>
&lt;ul>
&lt;li>Enable contextual login to container registries when pulling Helm
charts from Amazon Elastic Container Registry, Azure Container
Registry and Google Artifact Registry using
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/#provider">&lt;code>HelmRepository.spec.provider&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Select which layer contains the Kubernetes configs by specifying a
matching OCI media type using
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#layer-selector">&lt;code>OCIRepository.spec.layerSelector&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Authenticate to Azure Blob storage with SAS tokens using
&lt;a href="https://fluxcd.io/flux/components/source/buckets/#azure-blob-sas-token-example">&lt;code>Bucket.spec.secretRef&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Allow filtering OCI artifacts by semver and regex when listing
artifact with &lt;code>flux list artifacts&lt;/code>.&lt;/li>
&lt;li>Allow excluding local files and directories when building and
publishing artifacts with &lt;code>flux push artifact&lt;/code>.&lt;/li>
&lt;li>New Flux CLI commands &lt;code>flux push|pull|tag&lt;/code> artifact for publishing
OCI Artifacts to container registries.&lt;/li>
&lt;li>New source type
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/">&lt;code>OCIRepository&lt;/code>&lt;/a>
for fetching OCI artifacts from container registries.&lt;/li>
&lt;li>Resolve Helm dependencies from OCI for charts defined in Git.&lt;/li>
&lt;/ul>
&lt;p>The big news was of course that we added support for distributing
Kubernetes manifests, Kustomize overlays and Terraform code as OCI
artifacts. For more information on OCI support please see the
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/">Flux
documentation&lt;/a>.&lt;/p>
&lt;p>Big thanks to the Flux contributors that helped us along the way. It
took us almost 4 months, from the first RFC version to shipping OCI
support today. And a special thanks to Rashed and the whole VMware Tanzu
team for the excellent collaboration!&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">No more pesky secrets to authenticate against Azure, AWS and GCP container registries when deploying Helm charts with &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a>. Starting with v0.33, Flux leverages &lt;a href="https://twitter.com/hashtag/Kubernetes?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Kubernetes&lt;/a> workload identity and IAM when pulling OCI artifacts from managed registries. &lt;a href="https://t.co/V9dbT6orrP">https://t.co/V9dbT6orrP&lt;/a> &lt;a href="https://t.co/N7EB4D0Is8">pic.twitter.com/N7EB4D0Is8&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1564999901657894912?ref_src=twsrc%5Etfw">August 31, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">I&amp;#39;m super excited to announce that &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> support for distributing &lt;a href="https://twitter.com/hashtag/Kubernetes?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Kubernetes&lt;/a> manifests, Kustomize overlays and Terraform code as OCI artifacts has finally shipped in v0.32. &lt;a href="https://t.co/144HY6LUTy">https://t.co/144HY6LUTy&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1557754198648913921?ref_src=twsrc%5Etfw">August 11, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>We are continuously putting effort into the security story of Flux. One
cornerstone of this is fuzzing of all code. As
&lt;a href="https://fluxcd.io/blog/2022/02/security-more-confidence-through-fuzzing/#whats-next">promised&lt;/a>,
we started
&lt;a href="https://github.com/fluxcd/flux2/issues/2417" target="_blank">transitioning our fuzz
tests&lt;/a> to the
native Go implementation.&lt;/p>
&lt;p>We are happy to say that we managed to contribute back to Google&amp;rsquo;s
&lt;code>oss-fuzz&lt;/code> improving Go Native Fuzz implementation as well during this
effort (
&lt;a href="https://github.com/google/oss-fuzz/pull/8238" target="_blank">patch
1&lt;/a>,
&lt;a href="https://github.com/google/oss-fuzz/pull/8285" target="_blank">patch
2&lt;/a>).&lt;/p>
&lt;h3 id="flagger-1222">Flagger 1.22.2&lt;/h3>
&lt;p>
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.22.2" target="_blank">Flagger 1.22.2&lt;/a>
received a patch release as well during August. It fixes a bug related
to scaling up the canary deployment when a reference to an auto-scaler
is specified.&lt;/p>
&lt;p>Furthermore, it contains updates to packages used by the project,
including updates to Helm and grpc-health-probe used in the load-tester.&lt;/p>
&lt;p>A number of CVEs originating from its dependencies were fixed as well.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>Flux added &lt;code>OCIRepository&lt;/code> as a new kind of Source in its recent release.
The new version of
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flux Subsystem for Argo
(FSA)&lt;/a> brings these good bits
of Flux to Argo CD. The team has also recently upgraded FSA to Argo CD
v2.2.12 to contain recent security bug fixes again. This version of Flux
Subsystem for Argo requires Flux v0.32.0 to install.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/august-2022-update/fsa_hu7dcf15274b29185f1babb343ac9e71f2_417302_600x0_resize_box_3.png" width="600" height="510">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The team has released
&lt;a href="https://github.com/weaveworks/tf-controller/blob/main/CHANGELOG.md#v0110" target="_blank">TF-controller
v0.11&lt;/a>
which now supports Flux OCIRepository. To use Flux &lt;code>OCIRepository&lt;/code> with
TF-controller, you&amp;rsquo;re required to upgrade Flux to v0.32+.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/august-2022-update/tf-controller1_hu6cdbe679a8ab337f70738f9b44aca5c1_411818_600x0_resize_box_3.png" width="600" height="466">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>In addition to the new &lt;code>OCIRepository&lt;/code> support, the TF-controller team is
glad to announce that the performance of TF-controller has been improved
significantly. Now the controller is greatly scalable to reconcile and
provision high volumes of Terraform modules concurrently. The team has
recently tested the controller with 1,500 Terraform modules.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/august-2022-update/tf-controller2_hu4780872c53a7fcf48bdaf1dc3836ae60_2295744_600x0_resize_box_3.png" width="600" height="337">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>The team at Weaveworks is continuing to invest in Applications first! They’ve
focused this quarter on building and improving the primitives that make up
Weave GitOps. Their aim is to make it easy for platform operators to simplify
adoption of Kubernetes and Cloud Native in general across their engineering
organization. An easy to use platform that is extensible and safe for
organizations to meet their needs.&lt;/p>
&lt;p>The OSS team released
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.9.4" target="_blank">v0.9.4&lt;/a>.
There are a lot of iterative improvements in the app such as the ability to
pause and resume multiple sources or automation objects from the UI. In
addition, there are a bunch of tiny UI and visual improvements. Getting
started is now simpler due to a new &lt;code>gitops create dashboard&lt;/code> command for
producing the &lt;code>HelmRelease&lt;/code> and &lt;code>HelmRepository&lt;/code> objects. Plus, some
foundational improvements for &lt;code>gitops run&lt;/code>.&lt;/p>
&lt;p>On the enterprise side they are wrapping up workspaces including the GUI, that
gives you a single pane of glass what applications and policies belong to which
tenant! That makes governance for Platform teams easy and enables Application
teams to operate efficiently in safe boundaries. In addition, they have a new
add application experience that makes it easy to use Kustomizations and Helm
Charts via their UI. Now you have a single simple flow to add your
workloads/applications independently if it’s k8s manifest in a Git Repository
or Helm Charts. Look for an upcoming release (v0.9.4) in the next week for
these two items.&lt;/p>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>Anyone who loves the GitOps Extension for VS Code should update to the
latest version. Among other things it just received a number of security
fixes. Find the relevant details on its
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools/security/advisories" target="_blank">advisories
page&lt;/a>.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
August here are a couple of talks we would like to highlight.&lt;/p>
&lt;p>&lt;strong>CNCF Livestream with Kingdon Barrett: VSCode and Flux: Testing the new
OCI Repository feature&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>The Flux project continues in active development with the addition of
OCI configuration planned in the GA roadmap. Another Flux advancement
has been the creation of the new VSCode Extension which provides a
convenient interface to Flux that can help reduce friction moving between
editor and terminal, alleviating the headache of context switching
overloading developer focus. Flux maintainer Kingdon Barrett demonstrates
Flux&amp;rsquo;s new OCI features and a convenient way to access them.&lt;/p>
&lt;/blockquote>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/Hz8IP_eprec" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
September - tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-flux-increased-security-scalability-with-oci/" target="_blank">Sep 15 CNCF on-demand webinar: Flux Increased Security &amp;amp;
Scalability with
OCI&lt;/a>
&lt;blockquote>
&lt;p>Flux is trusted for its high levels of security, and new OCI support brings even greater GitOps security and scalability. Max will cover the benefits like more streamlined repo structure options and better ways to manage breaking changes in your app.&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-how-to-gitops-your-terraform/" target="_blank">Sep 29 CNCF on-demand webinar: How to GitOps Your
Terraform&lt;/a>
&lt;blockquote>
&lt;p>Pinky will walk you through step-by-step how to manage Terraform resources the GitOps way, from provisioning to enforcement. Bring GitOps to infrastructure and application resources for hybrid automation, state enforcement, drift detection and more.&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;/ul>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/gitops-community/events/qphvvsydcmbcb/" target="_blank">2022-09-01 17:00 UTC, 19:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/gitops-community/events/gxhvvsydcmbkb/" target="_blank">2022-09-07 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://embark-studios.com" target="_blank">Embark
Studios&lt;/a> and
&lt;a href="https://nexhealth.com/" target="_blank">NexHealth&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>New security docs on
&lt;a href="https://fluxcd.io/flux/security/secrets-management/">Secrets
Management&lt;/a>
and
&lt;a href="https://fluxcd.io/flux/security/contextual-authorization/">Contextual
Authorization&lt;/a>.&lt;/li>
&lt;li>New blog post:
&lt;a href="https://fluxcd.io/blog/2022/08/manage-kyverno-policies-as-ocirepositories">Managing Kyverno Policies as OCI Artifacts with
OCIRepository
Sources&lt;/a>&lt;/li>
&lt;li>Cheatsheet news
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/">OCI
Artifacts&lt;/a>&lt;/li>
&lt;li>Bootstrap:
&lt;a href="https://fluxcd.io/flux/installation/configuration/proxy-setting/#git-repository-access-via-socks5-ssh-proxy">Git repository access via SOCKS5 ssh
proxy&lt;/a>&lt;/li>
&lt;li>Bootstrap:
&lt;a href="https://weaveworks.github.io/tf-controller/how_to/flux_receiver_and_alert/#enable-notifications-for-third-party-controllers" target="_blank">Enable notifications for third party
controllers&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/#flux-works-well-with">Flux&amp;rsquo;s Work Well With section&lt;/a>: find out
how to make Flux work with your favourite other OSS software&lt;/li>
&lt;li>Lots of new videos from GitOpsCon / KubeCon on
&lt;a href="https://fluxcd.io/resources/">our resources
page&lt;/a>&lt;/li>
&lt;li>Various updates to the
&lt;a href="https://fluxcd.io/roadmap/">Flux Roadmap&lt;/a> to indicate what
needs to be done for the Flux GA release&lt;/li>
&lt;li>Move to a &lt;code>fluxcd.io/&amp;lt;project&amp;gt;&lt;/code> kind of structure. Add a project
picker in the main navbar. Updates of Flux Legacy docs to 1.4.4,
Flagger docs to 1.22.2.&lt;/li>
&lt;li>Updates of Docsy theme and dependencies. Prevent click-jacking of the
site.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Paulo Gomes, Arhell, Kingdon Barrett, Max Jonas Werner, Santosh
Kaluskar, David Harris, Sunny, Aurel Canciu, Benny and annaken.&lt;/p>
&lt;h3 id="new-flux-project-member-leigh-capili">New Flux Project Member: Leigh Capili&lt;/h3>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/09/august-2022-update/leigh-capili_hu66bf1c7992615a71e6ab779d83af5d26_122972_600x0_resize_q75_box.jpg" width="600" height="600">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>We are proud to announce a new project member in the Flux project. Leigh
Capili, Staff Developer Advocate at VMware, has been contributing to
Flux for a long time already. If you check out
&lt;a href="https://github.com/fluxcd/community/issues/234" target="_blank">his
application&lt;/a>,
he has left a trail of fixes and improvements across almost all of our
projects.&lt;/p>
&lt;p>What we would like to specifically call out as well, is the countless
talks he has done about Flux and GitOps. Take a look at
&lt;a href="https://fluxcd.io/resources/">the Flux
Resources page&lt;/a> to learn
more. Three of our current favourites are:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/OPI-SEOXW34" target="_blank">Securing GitOps Debug Access with Flux, Pinniped, Dex &amp;amp;
GitHub&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.youtube.com/watch?v=qm1ZKsTcxa4" target="_blank">GitOps with VMware Tanzu Application Platform VMware - Ben Hale &amp;amp;
Leigh
Capili&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.youtube.com/watch?v=9_hoXNZKfOk" target="_blank">Building Flux's Multi-Tenant API with K8s User
Impersonation&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Be like Leigh: If you have contributed to Flux and are interested in
joining the Flux project as a member, please take a look at
&lt;a href="https://github.com/fluxcd/community/blob/main/community-roles.md#project-member" target="_blank">our
governance documentation for
this&lt;/a>.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/providers.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-09-08 or 2022-09-14.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF
Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning
discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a>
and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on
Twitter&lt;/a>, join the
discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: Managing Kyverno Policies as OCI Artifacts with OCIRepository Sources</title><link>https://fluxcd.io/blog/2022/08/manage-kyverno-policies-as-ocirepositories/</link><pubDate>Thu, 01 Sep 2022 11:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/08/manage-kyverno-policies-as-ocirepositories/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/08/manage-kyverno-policies-as-ocirepositories/meme-featured_hu1b81cb8283a13af439b1a218a4c0872a_49442_640x0_resize_box_3.png" width="640" height="480"/>
&lt;p>The Flux team has released a new version of Flux 
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.32.0" target="_blank">v0.32&lt;/a> that includes fantastic features. One of them is OCI Repositories feature that allows us to store and distribute a wide variety of sources such as Kubernetes manifests, Kustomize overlays, and Terraform modules as
&lt;a href="https://github.com/opencontainers/artifacts#project-introduction-and-scope" target="_blank">OCI (Open Container Initiative) artifacts&lt;/a>. Furthermore, the Flux team got us even more excited because they are planning to verify the authenticity of the OCI artifacts before they get applied into Kubernetes by integrating Cosign, which is one of the most significant projects from the @projectsigstore community that help us to sign and verify OCI images, blobs, etc. please see the 
&lt;a href="https://github.com/fluxcd/source-controller/issues/863" target="_blank">issue&lt;/a> to get more details about the plan.&lt;/p>
&lt;blockquote>
&lt;p>⚠️ &lt;strong>Note:&lt;/strong> You can read the RFC of this feature
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0003-kubernetes-oci" target="_blank">here&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">I&amp;#39;m super excited to announce that &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> support for distributing &lt;a href="https://twitter.com/hashtag/Kubernetes?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Kubernetes&lt;/a> manifests, Kustomize overlays and Terraform code as OCI artifacts has finally shipped in v0.32. &lt;a href="https://t.co/144HY6LUTy">https://t.co/144HY6LUTy&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1557754198648913921?ref_src=twsrc%5Etfw">August 11, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>Today’s blog post is all about a quick tour of this feature and will give you a real-world example of it to show you how you can leverage this feature to manage Kyverno policies as OCI Artifacts. It is worth saying that this topic has been discussed for a while in the Kyverno community, too. There is an ongoing 
&lt;a href="https://github.com/kyverno/KDP/pull/19" target="_blank">issue&lt;/a> about packaging and distributing Kyverno policies as OCI Artifacts through its CLI. Also, there is a chance to move that logic into Kyverno’s core.&lt;/p>
&lt;p>But for those who might not be familiar enough with OCI artifacts (including me), it’s worth explaining what the OCI Artifacts are before jumping into the details. OCI Artifacts gives you the power of storing and distributing other types of data (nearly anything), such as Kubernetes deployment files, 
&lt;a href="https://helm.sh/" target="_blank">Helm Charts&lt;/a>, 
&lt;a href="https://cnab.io/" target="_blank">and CNAB&lt;/a>, in addition to container images via OCI registries. And today, we’ll be using this feature for Kyverno policies. To be more precise, OCI Artifacts are not a new specification, format, or API. It just utilizes the existent 
&lt;a href="https://github.com/opencontainers/image-spec/blob/master/manifest.md" target="_blank">OCI manifest&lt;/a> and 
&lt;a href="https://github.com/opencontainers/image-spec/blob/master/image-index.md" target="_blank">OCI index&lt;/a> definitions. Hence, we can quickly start using the same client tooling, such as a crane, skopeo, etc., and distribute them using OCI registries, thanks to the 
&lt;a href="https://github.com/opencontainers/distribution-spec/" target="_blank">OCI distribution-spec&lt;/a>. Because OCI Artifacts does not change anything related to the specs, it only expands them to give people (artifact authors) power to define their content types. It is more like a generic definition for determining what can be stored in an OCI registry and consumed by clients.&lt;/p>
&lt;p>The Flux CLI generates a single layer OCI image for storing things. As you can use some other tools to generate an OCI image with multiple layers in it, you can use the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0003-kubernetes-oci#layer-selection" target="_blank">Layer Selection&lt;/a> feature that Flux provides to select the layers you want to use in the OCI image. If the layer selector matches more than one layer, the first layer matching the specified media type will be used. Note that Flux requires that the OCI layer is compressed in the tar+gzip format.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/08/manage-kyverno-policies-as-ocirepositories/meme-featured_hu1b81cb8283a13af439b1a218a4c0872a_49442_400x0_resize_box_3.png" width="400" height="300">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Today, we’ll leverage the OCI Repositories feature to apply Kyverno policies stored in an OCI registry into the Kubernetes cluster.&lt;/p>
&lt;p>First, we need to install Flux CLI, please see the
&lt;a href="https://fluxcd.io/flux/installation/">installation&lt;/a> page for more details.&lt;/p>
&lt;p>Next, we should have a Kubernetes cluster running. We’ll be using
&lt;a href="https://kind.sigs.k8s.io/docs/user/quick-start#configuring-your-kind-cluster" target="_blank">KinD&lt;/a> for this purpose.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kind create cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once the cluster has been provisioned successfully, we need to install Flux components into it by simply running the command below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux bootstrap github &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --owner&lt;span style="color:#666">=&lt;/span>developer-guy &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --repository&lt;span style="color:#666">=&lt;/span>flux-kyverno-policies &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --path&lt;span style="color:#666">=&lt;/span>clusters/local &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --personal
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>⚠️ &lt;strong>Note:&lt;/strong> Don&amp;rsquo;t forget to change the values with your own details!&lt;/p>
&lt;/blockquote>
&lt;p>This command will install Flux and create necessary files for us and push them into the repository.&lt;/p>
&lt;p>Next, we should install Kyverno by using a GitOps approach with Flux. In order to do that, we use the following resources:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/kyverno/kyverno&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignore&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> /*
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> !/config/&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;1.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">serviceAccountName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./config/release&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">wait&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Do not forget to check whether everything works fine before moving into the next steps:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux get kustomizations kyverno-controller
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME REVISION SUSPENDED READY MESSAGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kyverno-controller v1.7.3/f2b63ce False True Applied revision: v1.7.3/f2b63ce
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now, we are ready to create an OCI image to store my Kyverno policies.&lt;/p>
&lt;blockquote>
&lt;p>⚠️  You can find all the code examples in
&lt;a href="https://github.com/developer-guy/flux-kyverno-policies" target="_blank">GitHub&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;p>In order to do that, we will clone our repository that holds the Kyverno policies and create an OCI artifact to store them.&lt;/p>
&lt;blockquote>
&lt;p>⚠️ We are expecting that some other team like DevSecOps will be responsible for maintaining and publishing the policies to our registry.&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ git clone https://github.com/developer-guy/my-kyverno-policies.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#007020">cd&lt;/span> my-kyverno-policies
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ flux push artifact oci://ghcr.io/developer-guy/policies:v1.0.0 &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --path&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;.&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --source&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>&lt;span style="color:#007020;font-weight:bold">$(&lt;/span>git config --get remote.origin.url&lt;span style="color:#007020;font-weight:bold">)&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --revision&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>&lt;span style="color:#007020;font-weight:bold">$(&lt;/span>git branch --show-current&lt;span style="color:#007020;font-weight:bold">)&lt;/span>&lt;span style="color:#4070a0">/&lt;/span>&lt;span style="color:#007020;font-weight:bold">$(&lt;/span>git rev-parse HEAD&lt;span style="color:#007020;font-weight:bold">)&lt;/span>&lt;span style="color:#4070a0">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>► pushing artifact to ghcr.io/developer-guy/policies:v1.0.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>✔ artifact successfully pushed to ghcr.io/developer-guy/policies@sha256:56e853e3c5c02139c840b7f5c89a02f63ede8dc498ed3925a52360032aa49e60
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>⚠️ &lt;strong>Note:&lt;/strong> Don&amp;rsquo;t forget to change the values with your own details!&lt;/p>
&lt;/blockquote>
&lt;p>Last but not least, we need to create an &lt;code>OCIRepository&lt;/code> resource that points to my OCI artifact:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-policies&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://ghcr.io/developer-guy/policies&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;v1.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ghcr-auth&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-policies&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-policies&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>60m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">wait&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>2m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">dependsOn&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kyverno-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">patches&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># enforce all policies&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">patch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - op: replace
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> path: /spec/validationFailureAction
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> value: enforce&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ClusterPolicy&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I&amp;rsquo;d like to highlight some key points about the resources above. Here in &lt;code>OCIRepository&lt;/code> resource, we are using
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#semver-example">SemVer&lt;/a> to select the policies that we want to apply. &lt;code>.spec.ref&lt;/code> is an optional field to specify the OCI reference to resolve and watch for changes. If not specified, the latest version of the repository will be used. You can reach out to the complete list of references supported in Flux, here is the
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#reference">link&lt;/a> for you.&lt;/p>
&lt;p>Also, in the &lt;code>Kustomization&lt;/code> resource, we are using &lt;code>.spec.patches&lt;/code> to apply patches to the policies that we want to enforce. We are using &lt;code>op: replace&lt;/code> to replace the existing value of the field with the new one. &lt;code>path&lt;/code> is the path to the field that we want to replace. &lt;code>value&lt;/code> is the value of the field that we want to replace. To get more detail about the &lt;code>Patches&lt;/code>, please see the
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomization/#patches">link&lt;/a>.&lt;/p>
&lt;p>Last but not least, we are specifying an explicit dependencies for the &lt;code>Kustomization&lt;/code> resource by using &lt;code>dependsOn&lt;/code> keyword that ensures the Kyverno deployment is ready before applying the policies. This is important because Kyverno needs to be installed before applying the policies. Otherwise, the policies won&amp;rsquo;t be used because CRD (Custom Resource Definitions) won&amp;rsquo;t exist until Kyverno works. You can learn more about the dependencies of &lt;code>Kustomization&lt;/code> resource,
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomization/#dependencies">here&lt;/a>.&lt;/p>
&lt;p>Now, we can apply these manifests by committing and pushing them to the repository and letting Flux take care of the rest but still, one little step left that we need to do, which is authentication.&lt;/p>
&lt;blockquote>
&lt;p>⚠️  Don&amp;rsquo;t forget, the authentication part is only needed when the OCI artifact is not publicly accessible. If your image has publicy available, you can skip that part.&lt;/p>
&lt;/blockquote>
&lt;p>You might notice a &lt;code>secretRef&lt;/code> section in the &lt;code>OCIRepository&lt;/code> resource. We should create this secret because Flux should be able to pull my container image. To do that, we should follow the documentation.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ flux create secret oci ghcr-auth &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --url&lt;span style="color:#666">=&lt;/span>ghcr.io &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --username&lt;span style="color:#666">=&lt;/span>developer-guy &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --password&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#70a0d0">${&lt;/span>&lt;span style="color:#bb60d5">GITHUB_PAT&lt;/span>&lt;span style="color:#70a0d0">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>► oci secret &lt;span style="color:#4070a0">&amp;#39;ghcr-auth&amp;#39;&lt;/span> created in &lt;span style="color:#4070a0">&amp;#39;flux-system&amp;#39;&lt;/span> namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once everything is completed, you should be able to see the following output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ kubectl get clusterpolicies
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME BACKGROUND ACTION READY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>require-base-image &lt;span style="color:#007020">true&lt;/span> enforce &lt;span style="color:#007020">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This is what we expected to happen, whee!🕺🏻&lt;/p>
&lt;p>This is an exciting policy, though, if you want to learn more about it, I wrote a 
&lt;a href="https://nirmata.com/2022/07/14/securing_base_images/" target="_blank">blog post&lt;/a> that explains what the base image concept refers to and how we can enforce policies related to them.&lt;/p>
&lt;p>As you can see, this feature is quite promising and easy to use. I hope you enjoyed it, and please stay tuned because there are more features on the way you don’t want to miss.&lt;/p>
&lt;p>Thanks for reading.&lt;/p></description></item><item><title>Blog: July 2022 Update</title><link>https://fluxcd.io/blog/2022/08/july-2022-update/</link><pubDate>Tue, 02 Aug 2022 11:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/08/july-2022-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/08/july-2022-update/ecosystem1-featured_hu3e8543332e83621938731b733d416470_132374_640x0_resize_box_3.png" width="640" height="500"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/07/june-2022-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of August 2022 - let&amp;rsquo;s recap together what happened
in July - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="next-flux-release-oci-helm-improvements-and-consolidated-git-implementations">Next Flux release: OCI Helm improvements and consolidated Git implementations&lt;/h3>
&lt;p>The whole Flux team is busy working on the v0.32.x Flux release that&amp;rsquo;s
planned for early August. A lot of our planned changes have already
landed and what you can look forward to is: OCI for Kubernetes manifests
and further enhancements to the OCI for Helm support that shipped
already are also included. Support for Cosign will not be included in
this release just yet, but will come later.&lt;/p>
&lt;p>It&amp;rsquo;s not too late to provide early feedback for the
&lt;a href="https://github.com/fluxcd/flux2/issues?q=rfc-0003" target="_blank">OCI
support&lt;/a>,
we still need more user engagement/feedback to guarantee this feature is
ready for release.&lt;/p>
&lt;p>We have planned on this release finally decommissioning our &lt;code>libgit2&lt;/code>
Unmanaged Transport and replacing it with the new Managed Transport (it
will no longer be experimental, now default!)&lt;/p>
&lt;p>The upgrade to managed transport should be opaque and seamless for the
end user. Hopefully Flux users will notice things are more stable, but
no changes are needed in order to take advantage of this upgrade, other
than simply upgrading.&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>When we started writing about
&lt;a href="https://fluxcd.io/tags/security/">Security in Flux&lt;/a>, folks
started asking us more questions about how to ensure their Flux
deployments were secure. We are happy to announce that we documented
&lt;a href="https://fluxcd.io/flux/security/best-practices/">Flux&amp;rsquo;s Security Best Practices&lt;/a>
on our website. It comes with a simple checklist that you can follow to
ensure you implemented it. You can also go deeper and expand the text
blocks to understand the rationale and backgrounds better.&lt;/p>
&lt;p>Please let us know if you have any questions or feedback - we are happy
to add to this section.&lt;/p>
&lt;h3 id="flagger-122-brings-keda-support">Flagger 1.22 brings KEDA Support&lt;/h3>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/08/july-2022-update/keda_hu29a8e2afda62fbab0219d42a0ca83635_22040_400x0_resize_box_3.png" width="400" height="400">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>This Flagger release is a big one. It comes with support for KEDA
ScaledObjects as an alternative to HPAs.
&lt;a href="https://keda.sh/" target="_blank">KEDA&lt;/a> is a CNCF Incubation project and
is supported in e.g. Azure. Check out our
&lt;a href="https://docs.flagger.app/tutorials/keda-scaledobject" target="_blank">tutorial&lt;/a>
to understand how to use it with Flagger.&lt;/p>
&lt;p>Other improvements in the release are:&lt;/p>
&lt;ul>
&lt;li>The &lt;code>.spec.service.appProtocol&lt;/code> field can now be used to specify the
&lt;a href="https://kubernetes.io/docs/concepts/services-networking/service/#application-protocol" target="_blank">appProtocol&lt;/a>
of the services that Flagger generates.&lt;/li>
&lt;li>A bug related to the Contour prometheus query for when service name
is overwritten along with a bug related to Contour &lt;code>HTTPProxy&lt;/code>
annotations have been fixed.&lt;/li>
&lt;li>The installation guide for Alibaba ServiceMesh has been updated.&lt;/li>
&lt;/ul>
&lt;p>Read the full list of improvements and fixes in
&lt;a href="https://github.com/fluxcd/flagger/blob/main/CHANGELOG.md#1220" target="_blank">the
1.22.0&lt;/a>
and
&lt;a href="https://github.com/fluxcd/flagger/blob/main/CHANGELOG.md#1221" target="_blank">1.22.1&lt;/a>
changelog entries.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>The team released Flux Subsystem for Argo by rebasing it to Argo CD v2.2.11,
which contains many serious security fixes. They verified that this
version of FSA worked with recent versions of Flux, including Flux v2
0.31.4.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The authors had been identifying performance bottlenecks in the TF controller.
Now with the bottlenecks identified, they have been able to start
rewriting the certification rotation component to improve the
performance of the controller. The performance improvement is expected
to land by the mid of August.&lt;/p>
&lt;p>Their
&lt;a href="https://github.com/weaveworks/tf-controller/releases/tag/v0.10.0" target="_blank">most recent release
0.10.0&lt;/a>
contains the following improvements:&lt;/p>
&lt;ul>
&lt;li>Add support for Terraform Enterprise&lt;/li>
&lt;li>Implement resource inventory&lt;/li>
&lt;li>Improve security to make the images work with Weave GitOps
Enterprise&lt;/li>
&lt;li>Re-implement certificate rotator&lt;/li>
&lt;li>Correct IRSA docs&lt;/li>
&lt;li>Update Kubernetes libraries to v0.24.3, &lt;code>go-restful&lt;/code> to fix
CVE-2022-1996&lt;/li>
&lt;li>Add pprof to the /debug/pprof endpoint&lt;/li>
&lt;li>Fix race condition to make sure that gRPC client and the runner use
the same TLS&lt;/li>
&lt;/ul>
&lt;h4 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h4>
&lt;p>In our last monthly updates we talked about the GitOps Extension for VS
Code that is based on top of Flux. If you always wanted to see it in
action to be able to understand what it can do for you, check out our
recent blog post which contains the
&lt;a href="https://fluxcd.io/blog/2022/07/gitopsdays-vscode-extension-demo/">VSCode Extension Demo from GitOps
Days&lt;/a>.&lt;/p>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>The team is working towards a new release of Weave GitOps OSS. They&amp;rsquo;ve made
some quality of life improvements in our latest release
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.9.1" target="_blank">v0.9.1&lt;/a>.
I'm so glad you asked. This is a CLI command in Weave GitOps OSS that
will make it simpler to get started with Flux and GitOps. In addition,
it enables live feedback while configuring your cluster. They are aiming
for simplicity for those that are new to Kubernetes and GitOps. They are
looking for beta testers so if you know anyone that might be interested
then please have them sign up
&lt;a href="https://forms.gle/dkHhoZfwaLv52RM17" target="_blank">here&lt;/a>.&lt;/p>
&lt;p>On the Enterprise side they are getting close to enhance and extend the
flux tenant model, providing the user with capabilities to create
tenants from a declarative yaml that can be versioned. Enabling platform
teams to create isolated tenants with boundaries. Define allowed
sources, targets. RBAC and policy with a single tool.&lt;/p>
&lt;h4 id="azure-gitops">Azure GitOps&lt;/h4>
&lt;p>Azure GitOps now supports Flux v2 in Azure Kubernetes Service (AKS) and
Azure Arc-enabled Kubernetes (Arc K8s) clusters (
&lt;a href="https://techcommunity.microsoft.com/t5/azure-arc-blog/announcing-general-availability-for-gitops-with-flux-v2-in-azure/ba-p/3408051" target="_blank">blog
post&lt;/a>).
Azure lets customers use the same managed Flux service for their cluster
configuration and application deployment across all their clusters &amp;ndash;
Azure, on-premises, multi-cloud. The Azure team works closely with
Weaveworks to improve upstream Flux (e.g., multi-tenancy) and continues
the partnership.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 810px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/08/july-2022-update/azure-gitops_hu01e3a12fe1893e08377f2f94995a48b4_159748_800x0_resize_box_3.png" width="800" height="268">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;h4 id="new-additions-to-the-flux-ecosystem">New additions to the Flux Ecosystem&lt;/h4>
&lt;p>We redesigned
&lt;a href="https://fluxcd.io/ecosystem/">our Ecosystem page&lt;/a>! Up until recently we simply listed
tools, extensions and integrations that either simplified using Flux in
various contexts or extended its functionality.&lt;/p>
&lt;p>What was missing was the great work a lot of companies have done to
bring GitOps to their users in the form of products and services. We now
show a list of these and logos for those who approved the use of logos.
If you are in the market for a complete GitOps solution, go check it
out!&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/08/july-2022-update/ecosystem1-featured_hu3e8543332e83621938731b733d416470_132374_600x0_resize_box_3.png" width="600" height="469">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Another big topic in our user community is the one of UIs. We now added
a section with screenshots to give you a good idea of what your options
are and how they can simplify your workflow.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/08/july-2022-update/ecosystem2_huf270cb271d8d7e7b9fcecb68a0ed5b2e_424816_600x0_resize_box_3.png" width="600" height="541">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>We realise that some ecosystem entries might be missing - if you find
one, please send a PR, we want this page to grow!&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
July here are a couple of talks we would like to highlight.&lt;/p>
&lt;p>Check out the recent CNCF livestream with Kingdon Barrett and Priyanka
Ravi,
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cloud-native-live-enhance-your-gitops-experience-with-flux-tools-extensions/" target="_blank">Enhance your GitOps Experience with Flux Tools &amp;amp;
Extensions&lt;/a>.&lt;/p>
&lt;p>In addition to that we recently started discussing a number of great
talks from last month&amp;rsquo;s GitOps Days in blog posts. Check out these
posts - they contain a summary of the talks and show the videos as well:&lt;/p>
&lt;ul>
&lt;li>Weaveworks Blog:
&lt;a href="https://web.archive.org/web/20231207103338/https://www.weave.works/blog/gitops-days-2022-recap-major-clouds-vendors-offering-gitops-with-flux" target="_blank">GitOps Days 2022 recap: major clouds &amp;amp; vendors offering GitOps
with
Flux&lt;/a>&lt;/li>
&lt;li>CNCF Blog:
&lt;a href="https://www.cncf.io/blog/2022/07/26/how-to-apply-gitops-to-everything-with-crossplane-and-flux/" target="_blank">How to apply GitOps to everything with Crossplane and Flux&lt;/a>&lt;/li>
&lt;li>CNCF Blog:
&lt;a href="https://www.cncf.io/blog/2022/07/21/keep-calm-and-trust-a-b-testing-with-flux-flagger-and-linkerd/" target="_blank">Keep calm and trust A/B testing with Flux, Flagger, and Linkerd&lt;/a>&lt;/li>
&lt;li>CNCF Blog:
&lt;a href="https://www.cncf.io/blog/2022/07/28/gitops-with-flux-at-safaricom/" target="_blank">GitOps with Flux at Safaricom&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
August - tune in to learn more about Flux and GitOps best practices, get
to know the team and join our community.&lt;/p>
&lt;p>
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cloud-native-live-vscode-and-flux-testing-the-new-unreleased-oci-repository-feature/" target="_blank">CNCF Livestream (Aug 17) with Kingdon
Barrett&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>The Flux project continues in active development with the addition of
OCI configuration planned in the GA roadmap.
Another Flux advancement has been the creation of the new VSCode
Extension which provides a convenient interface to Flux that can help
reduce friction moving between editor and terminal, alleviating the
headache of context switching overloading developer focus.&lt;/p>
&lt;p>Flux maintainer Kingdon Barrett will demonstrate the pre-release of
Flux's new OCI features and a convenient way to access them while they
remain in pre-release so you can provide the feedback that is needed by
Flux maintainers to make this feature a success!&lt;/p>
&lt;/blockquote>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/de-DE/weave-user-group/events/wvhvvsydclbnb/" target="_blank">2022-08-10 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/de-DE/weave-user-group/events/wvhvvsydclbgc/" target="_blank">2022-08-24 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://www.mintmesh.ai/" target="_blank">Mintmesh&lt;/a> and
&lt;a href="https://senselabs.de/" target="_blank">SenseLabs&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We added a
&lt;a href="https://fluxcd.io/flux/cheatsheets/troubleshooting/">Troubleshooting
cheatsheet&lt;/a>!
This has been a request from our community for a long time and we would
love to hear your feedback! What do you and your team use for incidents?
Is it playbooks? What would you expect in Flux docs for managing
incidents and troubleshooting?&lt;/p>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>New use-case:
&lt;a href="https://fluxcd.io/flux/use-cases/gh-actions-app-builder/">GitHub Actions Basic App
Builder&lt;/a>:&lt;br>
This guide shows how to configure GitHub Actions to build an image
for each new commit pushed on a branch, for PRs, or for tags in
the most basic way that Flux&amp;rsquo;s automation can work with and making
some considerations for both dev and production.&lt;br>
A single GitHub Actions workflow is presented with a few
variations but one simple theme: Flux&amp;rsquo;s only firm requirement for
integrating with CI is for the CI to build and push an image. So
this document shows how to do just that.&lt;/li>
&lt;li>We expanded our documentation on Azure to include
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/#provider">Using Helm OCI
with Azure Container
Registry&lt;/a>.&lt;/li>
&lt;li>Flagger news! We updated the docs on our website to match the newest
version of Flagger (1.22). This adds a tutorial for how to do
&lt;a href="https://fluxcd.io/flagger/tutorials/keda-scaledobject/">Canary analysis with KEDA
SealedObjects&lt;/a>.
In addition to that the install guides were updated, in particular
the instructions for
&lt;a href="https://fluxcd.io/flagger/install/flagger-install-on-alibaba-servicemesh/">setting up Flagger on Alibaba
ServiceMesh&lt;/a>
was simplified quite a bit.&lt;/li>
&lt;li>We updated the resources section on the fluxcd.io landing page to
show updated content with more breadth across the Flux space.&lt;/li>
&lt;li>We updated to a more recent version of the Docsy theme, which
allowed us to drop some of our own customisations. With this we
also updated to the new version of the Algolia API - this should
give you better search results as well.&lt;/li>
&lt;li>And lots of other small improvements.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Paulo
Gomes, Kingdon Barrett, Ihor Sychevskyi, Max Jonas Werner, Santosh
Kaluskar, Stefan Prodan, Hidde Beydals, Jonathan Innis, Soulé Ba, Stacey
Potter, @chengleqi and @kirankldevops.&lt;/p>
&lt;h3 id="archival-of-flux-web-ui">Archival of Flux Web UI&lt;/h3>
&lt;p>The
&lt;a href="https://github.com/fluxcd/webui/pull/65" target="_blank">fluxcd/webui project was
archived&lt;/a>. It was
in active development from November 2020 to June 2021, but unfortunately
it could not be kept alive. This is why we felt the need to point users
to the following alternatives for UIs for Flux instead.&lt;/p>
&lt;ol>
&lt;li>
&lt;a href="https://web.archive.org/web/20231109152254/https://www.weave.works/" target="_blank">Weaveworks&lt;/a> offers a free
and open source GUI for Flux under the
&lt;a href="https://github.com/weaveworks/weave-gitops" target="_blank">weave-gitops&lt;/a>
project.
&lt;br>
&lt;img src="https://fluxcd.io/ecosystem/img/weave-gitops3.png" alt="weave-gitops-flux-ui">
&lt;br>
You can install the Weave GitOps UI
using a Flux HelmRelease, please see the
&lt;a href="https://web.archive.org/web/20240213192000/https://docs.gitops.weave.works/docs/getting-started/intro/" target="_blank">Weave GitOps
documentation&lt;/a>
for more details.&lt;/li>
&lt;li>The Flux community maintains a series of Grafana dashboards for
monitoring Flux.&lt;br>
&lt;br>
&lt;img src="https://fluxcd.io/img/cluster-dashboard.png" alt="flux-grafana">
&lt;br>
See
&lt;a href="https://fluxcd.io/flux/guides/monitoring/">the monitoring section of the Flux
documentation&lt;/a>
for how to install Flux's Grafana dashboards.&lt;/li>
&lt;/ol>
&lt;h3 id="new-flux-project-member-ihor-sychevskyi">New Flux Project Member: Ihor Sychevskyi&lt;/h3>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/08/july-2022-update/arhell_hu5a3a71e501955cd417b81a86d9ced301_22931_400x0_resize_q75_box.jpg" width="400" height="400">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>We are very pleased to welcome Ihor Sychevskyi as a project member into
the Flux family. Over the past months Ihor has been busy improving our
website in many many places. A lot of small UI glitches all over the
place fell into this category and if you view fluxcd.io on mobile the
site is getting better all the time!&lt;/p>
&lt;p>Be like Ihor: If you have contributed to Flux and are interested in
joining the Flux project as a member, please take a look at
&lt;a href="https://github.com/fluxcd/community/blob/main/community-roles.md#project-member" target="_blank">our
governance documentation for
this&lt;/a>.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-08-03 or 2022-08-11.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, join the
discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: GitOps Days - VSCode Extension Demo</title><link>https://fluxcd.io/blog/2022/07/gitopsdays-vscode-extension-demo/</link><pubDate>Mon, 11 Jul 2022 14:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/07/gitopsdays-vscode-extension-demo/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/07/gitopsdays-vscode-extension-demo/vscode-gitops-commands-featured_hud8bc9c45cad569062b2b353a7572261b_306010_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>Helping to close out GitOps Days 2022, Kingdon Barrett, OSS Engineer
at Weaveworks, Flux Maintainer, and maintainer of the Weaveworks
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">GitOps Tools extension for VSCode&lt;/a>
presented the new Flux extension. Kingdon showed the new extension and
how it helps minimize context switching, keeping you in your editor
where you can be most productive!&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 810px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/07/gitopsdays-vscode-extension-demo/vscode-gitops-commands-featured_hud8bc9c45cad569062b2b353a7572261b_306010_800x0_resize_box_3.png" width="800" height="450">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>The presentation starts down in the trenches after
Kingdon launched the new VSCode
&lt;a href="https://marketplace.visualstudio.com/items?itemName=Weaveworks.vscode-gitops-tools" target="_blank">Extension
Marketplace&lt;/a>
page and soft-launched the extension&amp;rsquo;s availability to install from the
store the night before, and fully launching the marketplace entry during
the conference only a few hours earlier!&lt;/p>
&lt;p>The VSCode extension is still considered a prerelease even though it&amp;rsquo;s
been available for some time and is in the store now. Since the
extension was first launched outside of the marketplace its development
was hampered with low usage and low discoverability. He wanted to avoid
launching with glaring usability issues and ensure that integration with
Flux was a tight fit. Ultimately several key usability issues have been
addressed since the alpha extension was demonstrated in an earlier
state, and he decided that GitOpsDays was going to be a great time to
formally launch the extension in the store!&lt;/p>
&lt;p>The addition of a Flux status widget in the VSCode editor makes
monitoring the changes as Flux automatically deploys without leaving the
comfort of your editor window a total snap.&lt;/p>
&lt;p>When Flux detects an issue in your manifest and the deployment fails,
the editor extension shines most brightly as you can see the error and
the condition status in a mouse-over hover panel above the resources
that are having issues.&lt;/p>
&lt;p>This quick demonstration gives an overview of the GitOps extension for
Flux, and also what it&amp;rsquo;s like to use the extension to help recover when
things have gone wrong. What kind of live demo is it if nothing went
wrong? (Hint&amp;hellip;an unrealistic one, as something always goes
wrong!) These tools make recovery fast and ensure you can do it without
a heavy context switch out of the editor and into monitoring dashboards
or terminal CLI debugging land.&lt;/p>
&lt;p>If you want to try it out, just search &amp;ldquo;GitOps&amp;rdquo; or &amp;ldquo;FluxCD&amp;rdquo; in the
extension marketplace! The new VSCode extension is available right now,
in the marketplace, no compiler necessary.&lt;/p>
&lt;p>If you&amp;rsquo;re already familiar with the VSCode Kubernetes extension then
you&amp;rsquo;ll be happy to know the configuration of both are identical, as the
Flux VSCode extension just uses your KUBECONFIG there is nothing else to
configure, so you can start using the extension to help manage your
workloads and avoid unnecessary context switching in your day to day!&lt;/p>
&lt;p>Here&amp;rsquo;s the video in its entirety if you&amp;rsquo;d like to watch from start to
finish:&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/QRZTc6hlCjI" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h3 id="next-steps">Next Steps&lt;/h3>
&lt;p>The GitOps Days team will be publishing more blog posts along with videos
from the event to the
&lt;a href="https://youtube.com/playlist?list=PL9lTuCFNLaD0NVkR17tno4X6BkxsbZZfr" target="_blank">GitOps Days 2022
Playlist&lt;/a>,
so stay tuned for more as they become available. And don&amp;rsquo;t forget to
&lt;a href="https://www.youtube.com/channel/UCmIz9ew1lA3-XDy5FqY-mrA?sub_confirmation=1" target="_blank">subscribe to the YouTube
channel&lt;/a>!&lt;/p></description></item><item><title>Blog: June 2022 Update</title><link>https://fluxcd.io/blog/2022/07/june-2022-update/</link><pubDate>Mon, 04 Jul 2022 13:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/07/june-2022-update/</guid><description>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/06/may-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of July 2022 - let&amp;rsquo;s recap together what happened in
June - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;p>A lot of work culminated in the 0.31 release series, where we landed at
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.31.3" target="_blank">Flux v0.31.3&lt;/a>.
You can look forward to the the following set of important fixes and
documentation improvements:&lt;/p>
&lt;h3 id="-flux-releases-v031">✨ Flux releases v0.31&lt;/h3>
&lt;p>We&amp;rsquo;ve released
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.31.0" target="_blank">Flux v0.31&lt;/a>.
This release comes with new features and improvements.&lt;/p>
&lt;p>&lt;strong>🚀 New features&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Pull Helm charts from container registries by configuring Helm
repositories with &lt;code>type: oci&lt;/code>.&lt;br>
For more information please see the
&lt;a href="https://fluxcd.io/flux/guides/helmreleases/#helm-oci-repository">Helm OCI
documentation&lt;/a>&lt;/li>
&lt;li>Trigger GitHub Actions workflows from Flux by configuring alerting
providers with &lt;code>type: githubdispatch&lt;/code>.&lt;br>
For more information please see the
&lt;a href="https://fluxcd.io/flux/components/notification/provider/#setting-up-the-github-dispatch-provider">GitHub dispatch provider
documentation&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>📔 New guides&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.io/flux/use-cases/gh-actions-helm-promotion/">Promote Flux Helm Releases with GitHub
Actions&lt;/a>.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/use-cases/gcp-source-repository/">Using Flux on GKE with Google Cloud Source
Repositories&lt;/a>.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/guides/monitoring/">Monitoring Flux logs with Loki and
Grafana&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>🤖 New improvements and fixes&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Starting with this version, all Flux controllers conform to the
Kubernetes API Priority and Fairness.&lt;/li>
&lt;li>Add support for configuring the authentication to AWS KMS, Azure Key
Vault and Google Cloud KMS on multi-tenant clusters.&lt;/li>
&lt;li>The Git reconciliation has been made more efficient by adding
support for no-op clones that should reduce the outbound traffic
substantially.&lt;/li>
&lt;li>The &lt;code>libgit2&lt;/code> managed transport feature has been enabled by default to
improve the Azure DevOps and AWS CodeCommit Git operations.&lt;/li>
&lt;li>Fix an issue where the token used for Helm operations would go stale
if it was provided using a Bound Service Account Token Volume.&lt;/li>
&lt;li>Update the controllers and CLI dependencies to Kubernetes v1.24,
Kustomize v4.5.5 and Helm v3.9.0.&lt;/li>
&lt;li>Fix caching issue in registry client (source-controller)&lt;/li>
&lt;li>Fix repository url error for Helm OCI (source-controller)&lt;/li>
&lt;li>Fix semver sorting for Helm OCI charts (source-controller)&lt;/li>
&lt;li>Fix service account impersonation when using target namespace
(helm-controller)&lt;/li>
&lt;li>Validate that the image name does not contain tags
(image-reflector-controller)&lt;/li>
&lt;li>Fix &lt;code>libgit2&lt;/code> SSH host key verification (source-controller &amp;amp;
image-automation-controller)&lt;/li>
&lt;li>Fix authentication when using Gitlab via HTTP/S (source-controller &amp;amp;
image-automation-controller)&lt;/li>
&lt;/ul>
&lt;p>Thanks to everyone who contributed to this release. 🤗&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;p>Since the rewrite of Flux as a set of targeted controllers, we believe
it has become a lot easier to extend Flux to whatever you need it to do.
If you check out the
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem page&lt;/a> you can see a lot of
very useful extensions, products and tools you might find useful.&lt;/p>
&lt;p>In this section of our monthly update, let&amp;rsquo;s go through what happened in
the ecosystem.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>The team around terraform-controlle started the new development cycle towards
v0.10.0. They introduced a new feature that supports resource inventory inside
a Terraform object so that other controllers like an external drift detector,
or a cost estimator would be able to leverage it.&lt;/p>
&lt;p>For the coming v0.10.0 release, they will focus on performance improvements so
that the controller will handle large numbers of objects better.&lt;/p>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>The GitOps Dashboard is continuing to evolve and we have added a bunch
of new features with the release of
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.9.0" target="_blank">v0.9.0&lt;/a>.
You can now pause and resume automations and sources within the UI. The team
also added a new yaml tab to each object page so you can see the full
detail of the object on the cluster.&lt;/p>
&lt;p>They have also added support for
&lt;a href="https://web.archive.org/web/20240107222734/https://docs.gitops.weave.works/docs/guides/displaying-custom-metadata/" target="_blank">displaying custom
metadata&lt;/a>.
It is super easy to use and enables you to put relevant information such
as a description of the object or hyperlinks to metrics dashboards.&lt;/p>
&lt;p>They have also improved the detail and graph views in the application. They
were only able to show a subset of kubernetes objects that were created
by Kustomizations and Helm Releases. You can now get a full view of all
of the objects that were created.&lt;/p>
&lt;p>The team is turning their attention to a new feature at the moment and are
looking for people willing to participate as early beta users. They are
building a new feature in Weave GitOps that will change the way you can
interact with Kubernetes as you build out your system. The idea is to
reduce friction as much as possible and get live feedback. Once you are
done then you will be able to easily transition the workload management
over to GitOps via Flux.&lt;/p>
&lt;p>They are excited about this feature and would appreciate people that are
willing to test early versions so they build the best possible solution that
solves problems. If you are interested please sign up
&lt;a href="https://forms.gle/NaVBKVLjvErxgpyEA" target="_blank">here&lt;/a> and they will
reach out to you via email when they are ready to start the beta test.&lt;/p>
&lt;h4 id="new-additions-to-the-flux-ecosystem">New additions to the Flux Ecosystem&lt;/h4>
&lt;p>We are very pleased to recognise
&lt;a href="https://github.com/kubevela/kubevela" target="_blank">KubeVela&lt;/a> as part
of the Flux Ecosystem: it integrates Flux well for
&lt;a href="https://kubevela.io/docs/tutorials/helm" target="_blank">Helm Chart
delivery&lt;/a> and
&lt;a href="https://kubevela.io/docs/case-studies/gitops" target="_blank">GitOps&lt;/a>,
and provides
&lt;a href="https://kubevela.io/docs/tutorials/helm-multi-cluster" target="_blank">multi-cluster
capabilities&lt;/a>.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="upcoming-events">Upcoming Events&lt;/h3>
&lt;h4 id="flux-maintainer-somtochi-onyekwere-at-kcd-africa-2022---virtual">Flux maintainer Somtochi Onyekwere at KCD Africa 2022 - Virtual&lt;/h4>
&lt;p>&lt;img src="kcdafrica.png" alt="KCD Africa 2022 - Virtual">&lt;/p>
&lt;p>Somtochi Onyekwere has been contributing to Kubernetes and Flux for
a long while already. We are very grateful to have her as part of the
Flux maintainers team.&lt;/p>
&lt;p>At the keynote at
&lt;a href="https://community.cncf.io/events/details/cncf-kcd-africa-presents-kubernetes-community-days-africa-2022-virtual/" target="_blank">Kubernetes Community Days Africa 2022 -
Virtual&lt;/a>,
she will be speaking about her experience going from contributor to
project maintainer.&lt;/p>
&lt;p>Join her and all the other speakers on July 7 &amp;amp; 8.
&lt;a href="https://community.cncf.io/events/details/cncf-kcd-africa-presents-kubernetes-community-days-africa-2022-virtual/" target="_blank">Register
here&lt;/a>.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;h4 id="gitops-days-2022">GitOps Days 2022&lt;/h4>
&lt;p>
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps Days&lt;/a> was a big
celebration of everything we achieved as the Flux community in the past
years. It was a big get-together of its maintainers, GitOps
practitioners, cloud service vendors and our big community to talk about
everything that&amp;rsquo;s possible today.&lt;/p>
&lt;p>If you check out the schedule on
&lt;a href="https://www.gitopsdays.com/" target="_blank">its
website&lt;/a> you get a good idea
of the high quality talks and workshops that happened there.&lt;/p>
&lt;p>If you should have missed it, don&amp;rsquo;t despair - the GitOps Days team is
working on publishing separate videos and dedicated videos very soon. In
the meantime you can still hit the &amp;ldquo;Register&amp;rdquo; button on the website to
get a link to the recordings of the two days!&lt;/p>
&lt;p>Thanks to everyone who attended and organised the event - we had a
fabulous time!&lt;/p>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/gitops-community/events/qphvvsydckbkb/" target="_blank">2022-07-07 17:00 UTC, 1pm
ET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/gitops-community/events/gxhvvsydckbrb/" target="_blank">2022-07-13 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/gitops-community/events/qphvvsydckbcc/" target="_blank">2022-07-21 17:00 UTC, 1pm
ET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/gitops-community/events/gxhvvsydckbkc/" target="_blank">2022-07-27 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services. If folks have other
Flux-related topics and want a friendly audience to present for interest
and feedback, we are always open to ideas and will host, come pitch us
with your Flux talks while we iterate weekly issue queue hygiene!&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;h4 id="alexander-block-multiple-environments-with-flux-and-kluctl">Alexander Block: Multiple Environments with Flux and Kluctl&lt;/h4>
&lt;p>&lt;img src="kluctl-blog.jpg" alt="Multiple Environments">&lt;/p>
&lt;p>Alexander Block is not only the author of
&lt;a href="https://kluctl.io/" target="_blank">Kluctl&lt;/a>, but has joined us as a Flux
contributor as well. If you are new to Kluctl, it says on its website
that&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>Kluctl is the missing glue to put together large Kubernetes
deployments.&lt;/em>&lt;/p>
&lt;p>&lt;em>It allows you to declare and manage small, large, simple and/or
complex multi-env and multi-cluster deployments.&lt;/em>&lt;/p>
&lt;p>&lt;em>Kluctl does not have cluster-side dependencies and works out of the
box.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>Check out the
&lt;a href="https://medium.com/kluctl/multiple-environments-with-flux-and-kluctl-199f8a00a950" target="_blank">new blog
post&lt;/a>
to get an idea how Kluctl helps you wire up multiple environments.&lt;/p>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://www.autops.eu/" target="_blank">Autops&lt;/a>,
&lt;a href="https://www.mediamarktsaturn.com" target="_blank">MediaMarktSaturn&lt;/a>,
&lt;a href="https://www.jbhunt.com/" target="_blank">J.B. Hunt&lt;/a>,
&lt;a href="https://www.quicktable.io/" target="_blank">QuickTable&lt;/a>,
&lt;a href="https://senselabs.de/" target="_blank">SenseLabs&lt;/a> and
&lt;a href="https://traefik.io/" target="_blank">TraefikLabs&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>Add section for OCI Helm repositories&lt;/li>
&lt;li>Add documentation for how to run jobs with Flux.&lt;/li>
&lt;li>Add post-deployment jobs and repo structure.&lt;/li>
&lt;li>Add &amp;quot;Karmada + Flux&amp;quot; user guide.&lt;/li>
&lt;li>Add --ssh-hostkey-algos to image-automation-controller docs.&lt;/li>
&lt;li>helm gh actions guide: Exclude events related to dependencies check.&lt;/li>
&lt;li>Add guide: Promote Flux Helm Releases with GitHub Actions.&lt;/li>
&lt;li>Monitoring: Add Loki and Flux logs to guide.&lt;/li>
&lt;li>Update azure docs on mozilla sops.&lt;/li>
&lt;li>Migration: Add links for flux v1 uninstall.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/roadmap/">Roadmap&lt;/a>: Add OCI items
for GA.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/ecosystem/">Ecosystem page&lt;/a>: We
finally got around to adding
&lt;a href="https://github.com/weaveworks/weave-gitops" target="_blank">Weave
GitOps&lt;/a>.&lt;/li>
&lt;li>Build: Update docsy and hugo. Make builds more robust.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Ihor Sychevskyi, Ed Briggler, Max Jonas Werner, Paulo Gomes,
xiexiong, Chrliey Haley, Hidde Beydals, Jianbo Sun, Kevin Fritz, LXM,
Philip Laine, Poor12, Somtochi Onyekwere, Soulé Ba, Vincent Palmer,
Vincent Van der Kussen, Wiliam Brode, netthier.&lt;/p>
&lt;p>In particular we would like to thank Ihor Sychevskyi again who took on
fixing small UI glitches all over the place - especially on mobile the
site should work a lot better now!&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-07-06 or 2022-07-14.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: GitOps Days 2022</title><link>https://fluxcd.io/blog/2022/06/gitops-days-2022/</link><pubDate>Fri, 03 Jun 2022 14:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/06/gitops-days-2022/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/06/gitops-days-2022/gitopsdays-featured_hu66cbb25b1b3ae857156f6e6792af8ff4_469348_640x0_resize_box_3.png" width="640" height="160"/>
&lt;p>&lt;img src="gitopsdays-featured.png" alt="GitOps Days 2022">&lt;/p>
&lt;p>The Flux Community is proud to play a central part in the upcoming
GitOps Days event. In a free two-day event we will join in and all learn
from Flux maintainers, adopter use-cases, end-user stories and
integrators who use Flux to power their GitOps offerings.&lt;/p>
&lt;p>The event is a testament to what we as a community have accomplished
together, how GitOps as a best-practise has evolved and to the general
growth of the ecosystem.&lt;/p>
&lt;p>We hope you will join us, as the event is a lot of fun, a great way to
get to know people and get inspired.&lt;/p>
&lt;p>&lt;strong>GitOps Days 2022 is a free 2-day online event on June 8-9, 2022.&lt;/strong>&lt;/p>
&lt;p>This is &lt;strong>THE&lt;/strong> event for your GitOps journey! Getting started? Taking
GitOps to the next level? We&amp;rsquo;ll cover all of the steps for your success!&lt;/p>
&lt;p>The event will run from ~7:00 am Pacific Time to ~3:00 pm PT each day
as a free online event.&lt;/p>
&lt;p>✨✨ &lt;strong>
&lt;a href="https://youtube.com/playlist?list=PL9lTuCFNLaD0NVkR17tno4X6BkxsbZZfr" target="_blank">Register now&lt;/a> to
reserve your spot to receive updates to the schedule and speakers.&lt;/strong> ✨✨&lt;/p>
&lt;p>&lt;strong>Join the conversation!&lt;/strong> Chat with the speakers and other attendees!&lt;/p>
&lt;p>&lt;strong>Invite yourself at
&lt;a href="https://weave-community.slack.com/join/shared_invite/zt-yqwtav03-QPo7W4Qoi1pL6W8UQYk2yQ" target="_blank">https://slack.weave.works&lt;/a> and hang out with us at
&lt;a href="https://bit.ly/GitOpsDays_Slack" target="_blank">#gitopsdays&lt;/a>&lt;/strong>&lt;/p>
&lt;p>&lt;img src="gitopsdays-2022-speakers.png" alt="GitOps Days 2022 Speakers">&lt;/p>
&lt;h2 id="event-schedule">Event Schedule&lt;/h2>
&lt;p>The event is packed with great speakers and talks, here is an excerpt to
whet your appetite.&lt;/p>
&lt;p>Day 1 will bring you the fantastic mix of a GitOps hands-on tutorial,
keynotes, demos how GitOps products have been successfully based on top
of Flux and other news from our ecosystem.&lt;/p>
&lt;ul>
&lt;li>Hands-on Tutorial: Intro to Kubernetes, GitOps, and Observability &amp;ndash; Tiffany Wang (Weaveworks) &amp;amp; Joaquin Rodriguez (Microsoft)&lt;/li>
&lt;li>Keynote: CNCF Ecosystem &amp;amp; GitOps as a Natural Evolution of Kubernetes &amp;ndash; Taylor Dolezal (CNCF)&lt;/li>
&lt;li>Keynote: GitOps is the Way to Overcome the Scaling Wall by Introducing New Operational Models? An Enterprise Market Perspective &amp;ndash; Philippe Ensarguet (Orange)&lt;/li>
&lt;li>Keynote: GitOps&amp;rsquo; Wealth of Opportunity &amp;ndash; Mae Large (VMware)&lt;/li>
&lt;li>Keynote: GitOps Business Benefits at State Farm &amp;ndash; Rayce Brossette (State Farm)&lt;/li>
&lt;li>GitOps with Weave GitOps &amp;ndash; James Wilson (Weaveworks)&lt;/li>
&lt;li>GitOps in Microsoft Azure with Flux &amp;ndash; Chris Sanders &amp;amp; Jonathan Innis (Microsoft)&lt;/li>
&lt;li>GitOps with Amazon EKS Anywhere &amp;ndash; Chandler Hoisington &amp;amp; Joey Wang (AWS)&lt;/li>
&lt;li>GitOps with VMware Tanzu Application Platform &amp;ndash; Leigh Capili (VMware)&lt;/li>
&lt;li>How D2iQ Operates Flux &amp;ndash; Deepak Goel &amp;amp; Max Jonas Werner (D2iQ)&lt;/li>
&lt;li>GitOps with Flux on OpenShift &amp;ndash; Andrew Block (Red Hat)&lt;/li>
&lt;li>Reconcile Terraform Resources the GitOps Way &amp;ndash; Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi (Weaveworks) &amp;amp; Roberth Strand (Crayon)&lt;/li>
&lt;li>Securing Kubernetes Secrets for GitOps with HashiCorp Vault &amp;ndash; Rosemary Wang (HashiCorp)&lt;/li>
&lt;li>Happier Helming with GitOps and Flux &amp;ndash; Scott Rigby (Weaveworks, Flux &amp;amp; Helm Maintainer)&lt;/li>
&lt;li>Introducing Flux Visual Studio Code Extension in Public Beta &amp;ndash; Kingdon Barrett (Weaveworks)&lt;/li>
&lt;/ul>
&lt;p>On Day 2 we will dive deeper. Particularly security and policy
management will be hot topics. And if you are interested in how other
organisations implemented GitOps, check out the wealth of user success
stories.&lt;/p>
&lt;ul>
&lt;li>Flux &amp;amp; Flagger Deep Dives &amp;ndash; Philip Laine (Xenit) &amp;amp; Stefan Prodan (Weaveworks)&lt;/li>
&lt;li>Crayon&amp;rsquo;s Cloud Native Journey &amp;ndash; Roberth Strand (Crayon)&lt;/li>
&lt;li>GitOps &amp;amp; Progressive Delivery with Flux, Flagger, and Istio &amp;ndash; Marco Amador (Anova)&lt;/li>
&lt;li>GitOps with Flux at Safaricom &amp;ndash; Winnie Gakuru (Safaricom)&lt;/li>
&lt;li>Key Learnings from Migrating from Flux1 to Flux2 &amp;ndash; Josh Callis (OSO.sh)&lt;/li>
&lt;li>GitOps, A Slightly Realistic Situation on Kubernetes with Flux &amp;ndash; Laurent Grangeau (Google) &amp;amp; Ludovic Piot (theGarageBandOfIT)&lt;/li>
&lt;li>GitOps + Security &amp;ndash; Anaïs Urlichs (Aqua Security)&lt;/li>
&lt;li>Applying GitOps to Everything with Flux + Crossplane &amp;ndash; Viktor Farcic (Upbound)&lt;/li>
&lt;li>GitOps and Flux at State Farm (Technical Deep Dive) &amp;ndash; Rayce Brossette &amp;amp; Perry Wu (State Farm)&lt;/li>
&lt;li>Multi-tenancy Best Practices Using the Cloud Native Ecosystem: ZScaler&amp;rsquo;s GitOps Journey &amp;ndash; Josh Carlisle &amp;amp; Neeta Rathi (ZScaler)&lt;/li>
&lt;li>GitOps at RingCentral with Flux &amp;amp; Flagger &amp;ndash; Ivan Anisimov (RingCentral)&lt;/li>
&lt;li>Flagger and Linkerd revisited: how I learned to stop worrying and use A/B testing &amp;ndash; Jason Morgan (Buoyant)&lt;/li>
&lt;li>GitOps and Flux Scaled to Hundreds of Developers &amp;ndash; Bryan Oliver (Independent) &amp;amp; Kingdon Barrett (Weaveworks)&lt;/li>
&lt;li>Policy Management &amp;amp; GitOps &amp;ndash; Tony Chong (Weaveworks / Magalix)&lt;/li>
&lt;/ul>
&lt;p>Leading through the programme are our MCs Tamao Nakahara and Vanessa
Abankwah from Weaveworks&amp;rsquo; DX team. Daniel Holbach aka DJ Desired State
will play his newest favorites in the breaks.&lt;/p>
&lt;p>Please make sure you check the actual schedule on
&lt;a href="https://www.gitopsdays.com/" target="_blank">https://www.gitopsdays.com/&lt;/a>
as it might be subject to change.&lt;/p>
&lt;p>We are very much looking forward to the event and hope you&amp;rsquo;ll be there
with us too!
&lt;a href="https://www.gitopsdays.com" target="_blank">Register today!&lt;/a>&lt;/p>
&lt;h2 id="flexyourflux">#flexyourflux&lt;/h2>
&lt;p>The #flexyourflux campaign we started for KubeCon is still ongoing.
Only here you can still win a 1h-long 1-on-1 meeting with Flux Core
Maintainer Stefan Prodan.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Get your limited edition &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> T-shirts at &lt;a href="https://twitter.com/KubeCon_?ref_src=twsrc%5Etfw">@KubeCon_&lt;/a> EU only! In person at Valencia only!&lt;a href="https://twitter.com/hashtag/flexyourflux?src=hash&amp;amp;ref_src=twsrc%5Etfw">#flexyourflux&lt;/a> with our quiz at pick up your shirt at the Flux booth! &lt;a href="https://t.co/BHxJxeYhRq">https://t.co/BHxJxeYhRq&lt;/a> &lt;a href="https://twitter.com/kubernetesio?ref_src=twsrc%5Etfw">@kubernetesio&lt;/a> &lt;a href="https://twitter.com/hashtag/GitOps?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOps&lt;/a> &lt;a href="https://t.co/HWD2Uru0PX">pic.twitter.com/HWD2Uru0PX&lt;/a>&lt;/p>&amp;mdash; Tamao Nakahara - DevRelCon July 18-19🎉 (@mewzherder) &lt;a href="https://twitter.com/mewzherder/status/1526622072960479232?ref_src=twsrc%5Etfw">May 17, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>The t-shirts unfortunately are out of stock, but the meeting with Stefan
is still up for grabs! We will draw the lucky winners live at the
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps Days event&lt;/a>.&lt;/p></description></item><item><title>Blog: May 2022 Update</title><link>https://fluxcd.io/blog/2022/06/may-update/</link><pubDate>Wed, 01 Jun 2022 12:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/06/may-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/06/may-update/gitopsdays-featured_hu66cbb25b1b3ae857156f6e6792af8ff4_469348_640x0_resize_box_3.png" width="640" height="160"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/05/april-2022-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of June 2022 - let&amp;rsquo;s recap together what happened in
May - it has been a lot!&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="flux-v030-release">Flux v0.30 release&lt;/h3>
&lt;p>The latest Flux release is the v0.30 release series. It comes with new
features and improvements. Users are encouraged to upgrade for the best
experience. Note:
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.0" target="_blank">v0.29.0&lt;/a>
included breaking changes.&lt;/p>
&lt;p>&amp;#x1f680; Features and improvements&lt;/p>
&lt;ul>
&lt;li>Support for disabling remote bases in Kustomize overlays: this
release adds support to the &lt;code>kustomize-controller&lt;/code> for disallowing
remote bases in Kustomize overlays using &lt;code>--no-remote-bases=true&lt;/code>
(&lt;code>default: false&lt;/code>). When this flag is enabled on the controller, all
resources must refer to local files included in the Source
Artifact, meaning only the Flux Sources can affect the
cluster-state. Users are advised to enable it on production
systems for security and performance reasons.&lt;/li>
&lt;li>Support for defining a &lt;code>KubeConfig&lt;/code> Secret data key: both
&lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> resources do now accept a
&lt;code>.spec.kubeConfig.SecretRef.key&lt;/code> definition. When the value is
specified, the &lt;code>KubeConfig&lt;/code> JSON is retrieved from this data key in
the referred Secret, instead of the defaults (value or
&lt;code>value.yaml&lt;/code>).&lt;/li>
&lt;li>Support for defining a &lt;code>ServiceAccountName&lt;/code> in &lt;code>ImageRepository&lt;/code>
objects: the &lt;code>ImageRepository&lt;/code> object does now accept a
&lt;code>.spec.serviceAccountName&lt;/code> definition. When specified, the image
pull secrets attached to the ServiceAccount are used to
authenticate towards the registry.&lt;/li>
&lt;/ul>
&lt;p>&amp;#x1f381;
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.30.2" target="_blank">Link to release
page&lt;/a>&lt;/p>
&lt;h3 id="-flux-security-announcement">🔒 Flux Security announcement&lt;/h3>
&lt;p>We published three CVEs today which affect Flux versions earlier than
v0.29.0. We recommend updating your Flux system at your earliest
convenience.&lt;/p>
&lt;p>More information on the advisories can be found in our
&lt;a href="https://github.com/fluxcd/flux2/security/policy#advisories" target="_blank">security policy
page&lt;/a>.&lt;/p>
&lt;p>To get some additional background on the advisories and what steps we
are taking to make Flux more secure, check out our
&lt;a href="https://fluxcd.io/blog/2022/05/may-2022-security-announcement/">blog post about the
advisories&lt;/a>
as well.&lt;/p>
&lt;h3 id="upcoming-flux-release">Upcoming Flux Release&lt;/h3>
&lt;p>The next Flux release is just a few days out. Here is in a nutshell what you can look forward to - but there’ll be more!&lt;/p>
&lt;ul>
&lt;li>OCI Helm chart support as described in
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs/0002-helm-oci" target="_blank">RFC-0002&lt;/a> will become available. But at time of writing, has two caveats:
&lt;ul>
&lt;li>Chart dependencies from OCI repositories are not supported.
&lt;a href="https://github.com/fluxcd/source-controller/issues/722" target="_blank">#722&lt;/a>&lt;/li>
&lt;li>Custom CA certificates are not supported.
&lt;a href="https://github.com/fluxcd/source-controller/issues/723" target="_blank">#723&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>GitRepository&lt;/code> reconciliation will be more efficient when checking out repositories using branches or tags by added support for no-op clones.&lt;/li>
&lt;li>The &lt;code>libgit2&lt;/code> managed transport will be moved out of experimental mode, and is the new default.&lt;/li>
&lt;/ul>
&lt;p>Make sure you watch our Slack and Twitter to get the update.
&lt;a href="https://github.com/fluxcd/flux2" target="_blank">Give us a star&lt;/a> and watch for releases maybe as well.&lt;/p>
&lt;h3 id="flagger-1210-brings-lots-of-improvements">Flagger 1.21.0 brings lots of improvements&lt;/h3>
&lt;p>
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.21.0" target="_blank">This release&lt;/a>
comes with an option to disable cross-namespace references to Kubernetes
custom resources such as &lt;code>AlertProviders&lt;/code> and &lt;code>MetricProviders&lt;/code>. When
running Flagger on multi-tenant environments it is advised to set the
&lt;code>-no-cross-namespace-refs=true&lt;/code> flag.&lt;/p>
&lt;p>In addition, this version enables Flagger to target Istio and Kuma
multi-cluster setups. When installing Flagger with Helm, the service
mesh control plane &lt;code>kubeconfig&lt;/code> secret can be specified using &lt;code>--set controlplane.kubeconfig.secretName&lt;/code>.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;p>We have a lot of updates from the Flux Ecosystem and love how everything
keeps on growing! If you are interested in more news from Flux
integration, make sure you register for
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps
Days&lt;/a> at 8-9 June - a lot of
engineers and companies will be talking about their work and how you can
benefit from it.&lt;/p>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">Flux Subsystem for Argo&lt;/a>
was upgraded to support Argo CD v2.2.9, and welcomed Kingdon Barrett as
a new maintainer for the project.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>
&lt;a href="https://github.com/weaveworks/tf-controller" target="_blank">terraform-controller&lt;/a> v0.9.5
was released which contains new features such as support for Runner Pod&amp;rsquo;s
metadata, support environment variables for Runner Pod so that you can set
proxy for Terraform binary with &lt;code>HTTPS_PROXY&lt;/code> for example. This release
also included many bug fixes.&lt;/p>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>The
&lt;a href="https://github.com/weaveworks/weave-gitops" target="_blank">Weave GitOps&lt;/a> team released
v0.8.1 for Weave GitOps. This release is an iteration on top of our prior
release. We have fixed a lot of bugs and made UI enhancements based on
feedback from the community. For example, you are able to reconcile Flux
objects directly from the UI. We have a lot of great features planned
over the next couple months. Please do not hesitate to drop in some
feature requests.&lt;/p>
&lt;h4 id="new-additions-to-the-flux-ecosystem">New additions to the Flux Ecosystem&lt;/h4>
&lt;p>We are thrilled to see the Flux Ecosystem growing on a continuous basis.
The most recent additions to our
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem page&lt;/a> are
&lt;code>flux-kluctl-controller&lt;/code> and &lt;code>gardener-extension-shoot-flux&lt;/code>.&lt;/p>
&lt;p>
&lt;a href="https://github.com/kluctl/flux-kluctl-controller" target="_blank">kluctl/flux-kluctl-controller&lt;/a>
is a Flux controller for managing
&lt;a href="https://kluctl.io" target="_blank">Kluctl&lt;/a> deployments.
Its website explains kluctl as follows&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>Kluctl is the missing glue to put together large Kubernetes
deployments.&lt;/em>&lt;/p>
&lt;p>&lt;em>It allows you to declare and manage small, large, simple and/or
complex multi-env and multi-cluster deployments.&lt;/em>&lt;/p>
&lt;p>&lt;em>Kluctl does not have cluster-side dependencies and works out of the
box.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://github.com/23technologies/gardener-extension-shoot-flux" target="_blank">23technologies/gardener-extension-shoot-flux&lt;/a> is a new integration with Flux. Gardener
implements the automated management and operation of Kubernetes clusters
as a service. With this extension fresh clusters will be reconciled to
the state defined in the Git repository by the Flux controller.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
May here are a couple of talks we would like to highlight.&lt;/p>
&lt;p>Last month was all about KubeCon and there were lots of great sessions
we enjoyed and recommend watching. It might be best if you just head to
our
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/">KubeCon Re-Cap blog post&lt;/a>
and take it from there!&lt;/p>
&lt;p>Here is a list of additional videos and topics we really enjoyed -
please let us know if we missed anything of interest and we will make
sure to mention it in the next post!&lt;/p>
&lt;p>📺
&lt;a href="https://www.youtube.com/watch?v=hoD5-I4DjNY" target="_blank">GitOps with Flux on AKS @AzureKubernetesService (Amsterdam) Meetup - Kingdon Barrett (Weaveworks) &amp;amp; Jonathan Innis (Microsoft)&lt;/a>&lt;/p>
&lt;p>📺
&lt;a href="https://youtu.be/vLNZA_2Na_s" target="_blank">GitOps: Core Concepts &amp;amp; How to Structure Your Repos - Scott Rigby &amp;amp; Priyanka Ravi (Weaveworks)&lt;/a>&lt;/p>
&lt;p>📺
&lt;a href="https://www.youtube.com/watch?v=G8cUcyGD5j4" target="_blank">DevOpsDays Birmingham AL: GitOps and Flux scaled to 100s of Developers - Bryan Oliver &amp;amp; Kingdon Barrett (Weaveworks)&lt;/a>&lt;/p>
&lt;p>📺
&lt;a href="https://youtu.be/xLhBbRkLeAc" target="_blank">DOK (Data On Kubernetes) #127: Flux for Helm Users! With Scott Rigby (Weaveworks)&lt;/a>&lt;/p>
&lt;p>📺
&lt;a href="https://youtu.be/bvs7BkHRpl0" target="_blank">Community Office Hours: Injecting Secrets from HashiCorp Vault into Flux - Priyanka Ravi (Weaveworks) &amp;amp; Rosemary Wang (Hashicorp)&lt;/a>&lt;/p>
&lt;p>📺
&lt;a href="https://youtu.be/8xhEPPA6XUs" target="_blank">Reconcile Terraform Resources the GitOps Way - Priyanka Ravi (Weaveworks)&lt;/a>&lt;/p>
&lt;p>📺
&lt;a href="https://youtu.be/bY-yFdc73Zc" target="_blank">GitOps (Flux) Extension for VS Code - Kingdon Barrett (Weaveworks)&lt;/a>&lt;/p>
&lt;h3 id="flexyourflux">#flexyourflux&lt;/h3>
&lt;p>The #flexyourflux campaign we started for KubeCon is still ongoing.
Until GitOps Days (see below) you can still win a 1h-long 1-on-1 meeting
with Flux Core Maintainer Stefan Prodan.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Get your limited edition &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> T-shirts at &lt;a href="https://twitter.com/KubeCon_?ref_src=twsrc%5Etfw">@KubeCon_&lt;/a> EU only! In person at Valencia only!&lt;a href="https://twitter.com/hashtag/flexyourflux?src=hash&amp;amp;ref_src=twsrc%5Etfw">#flexyourflux&lt;/a> with our quiz at pick up your shirt at the Flux booth! &lt;a href="https://t.co/BHxJxeYhRq">https://t.co/BHxJxeYhRq&lt;/a> &lt;a href="https://twitter.com/kubernetesio?ref_src=twsrc%5Etfw">@kubernetesio&lt;/a> &lt;a href="https://twitter.com/hashtag/GitOps?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOps&lt;/a> &lt;a href="https://t.co/HWD2Uru0PX">pic.twitter.com/HWD2Uru0PX&lt;/a>&lt;/p>&amp;mdash; Tamao Nakahara - DevRelCon July 18-19🎉 (@mewzherder) &lt;a href="https://twitter.com/mewzherder/status/1526622072960479232?ref_src=twsrc%5Etfw">May 17, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>We will draw the lucky winners live at the
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps Days
event&lt;/a> (8-9 June).&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
June - tune in to learn more about Flux and GitOps best practices, get
to know the team and join our community.&lt;/p>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/Weave-User-Group/events/qwbmssydcjbcb/" target="_blank">2022-06-01 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/Weave-User-Group/events/zzbmssydcjbmb/" target="_blank">2022-06-09 17:00 UTC, 1pm
ET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/Weave-User-Group/events/qwbmssydcjbtb/" target="_blank">2022-06-15 12:00 UTC, 14:00
CEST&lt;/a> -
Host: Sunny&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/Weave-User-Group/events/zzbmssydcjbfc/" target="_blank">2022-06-23 17:00 UTC, 1pm
ET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/Weave-User-Group/events/qwbmssydcjbmc/" target="_blank">2022-06-29 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h3 id="gitops-days-2022">GitOps Days 2022&lt;/h3>
&lt;p>&lt;img src="gitopsdays-featured.png" alt="GitOps Days">&lt;/p>
&lt;p>GitOps Days 2022 is a free 2-day online event on June 8-9, 2022 with
Flux center stage!&lt;/p>
&lt;p>This is &lt;strong>THE&lt;/strong> event for your GitOps journey! Getting started? Taking
GitOps to the next level? We&amp;rsquo;ll cover all of the steps for your success!&lt;/p>
&lt;p>The event will run from ~9:00 am PT to ~3:00 pm PT each day as a free
online event.&lt;/p>
&lt;p>✨✨
&lt;a href="https://youtube.com/playlist?list=PL9lTuCFNLaD0NVkR17tno4X6BkxsbZZfr" target="_blank">Register now&lt;/a> to
reserve your spot to receive updates to the schedule and speakers. &lt;em>Join
the conversation!&lt;/em> Chat with the speakers and other attendees! Invite
yourself at
&lt;a href="https://weave-community.slack.com/join/shared_invite/zt-yqwtav03-QPo7W4Qoi1pL6W8UQYk2yQ" target="_blank">https://slack.weave.works&lt;/a> and hang out with us at
&lt;a href="https://bit.ly/GitOpsDays_Slack" target="_blank">#gitopsdays&lt;/a>&lt;/p>
&lt;ul>
&lt;li>Talks and tutorials on how to get started with Kubernetes and GitOps&lt;/li>
&lt;li>Talks from Flux users about their use cases&lt;/li>
&lt;li>How to do GitOps securely&lt;/li>
&lt;li>Platforms that offer GitOps: Microsoft Arc Kubernetes, AWS Anywhere,
Weave GitOps, D2iQ Kubernetes Platform, and more! all using Flux!&lt;/li>
&lt;li>Flux in the CNCF and the GitOps Ecosystem&lt;/li>
&lt;li>Flux support and Integrations: Flux + Helm, Terraform, HashiCorp
Vault, Jenkins, OpenShift, Visual Studio Code, and much much more!&lt;/li>
&lt;li>Technical deep dives with Flux maintainers&lt;/li>
&lt;li>Speakers from Orange, RingCentral, and more just added&lt;/li>
&lt;/ul>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://www.tietoevry.com/" target="_blank">Tietoevry&lt;/a>,
&lt;a href="https://grafana.com/" target="_blank">Grafana Labs&lt;/a>,
&lt;a href="https://ailylabs.com/" target="_blank">Aily Labs&lt;/a>,
&lt;a href="https://sis-id.com/" target="_blank">SisID&lt;/a>,
&lt;a href="https://www.fhe3.com/" target="_blank">FHE3&lt;/a>,
&lt;a href="https://qualifio.com" target="_blank">Qualifio&lt;/a>,
&lt;a href="https://axelspringer.de" target="_blank">Axel Springer SE&lt;/a>,
&lt;a href="https://www.cookpadteam.com/" target="_blank">Cookpad&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;p>If you are like us, you really enjoy hearing adopter use case stories.
At
&lt;a href="https://www.gitopsdays.com/" target="_blank">Gitops Days&lt;/a>, there will
be loads of those, so join us 8-9 June.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently:&lt;/p>
&lt;ul>
&lt;li>By updating to the latest hugo and docsy, we were able to drop some
of our custom code to show e.g. tabs in our documentation.&lt;/li>
&lt;li>We added a gallery shortcode to be able to show a collection of
pictures nicely.&lt;/li>
&lt;li>New docs for
&lt;ul>
&lt;li>Enable Helm repositories caching&lt;/li>
&lt;li>Locking down multi-tenant clusters by disabling Kustomize remote
bases&lt;/li>
&lt;li>Deploy key rotation&lt;/li>
&lt;li>How to disable cross namespace references&lt;/li>
&lt;li>How to bootstrap Flux on GCP GKE with Cloud Source repositories&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>New videos added to our
&lt;a href="https://fluxcd.io/resources/">Flux Resources page&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Stefan
Prodan, Ihor Sychevskyi, Matt J WIlliams, Paulo Gomes, Alexander Block,
Andreas Loholt, Axel Fontana, Cosmin Banciu, Christian Berendt, Jiri
Tyr, Julien Duchesne, Martin Weber, Max Jonas Werner, Steven Koeberich,
as09.&lt;/p>
&lt;p>In particular we would like to thank Ihor Sychevskyi who recently took
on fixing small UI glitches all over the place - especially on mobile
the site should work a lot better now!&lt;/p>
&lt;h3 id="new-project-member-stacey-potter">New Project Member: Stacey Potter&lt;/h3>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/06/may-update/staceypotter_hudc755fdee03b4682f74e0bc8ac11d974_17990_400x0_resize_q75_box.jpg" width="400" height="400">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
Stacey Potter
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>We are very happy to announce that
&lt;a href="https://github.com/fluxcd/community/issues/210" target="_blank">Stacey Potter joined us as a Flux
Project Member&lt;/a>.&lt;/p>
&lt;p>Stacey has helped the Flux team out a great deal by organising a lot of
Flux-related events like GitOps Days, Weave Online User Groups, adding
videos to the Flux Resources page and our YouTube playlist, and
coordinating with the team on our Project presence for KubeCon events.
She&amp;rsquo;s such a pleasure to work with and we owe quite a bit of Flux&amp;rsquo;s
success to the stages she created for our speakers.&lt;/p>
&lt;p>As a side-note: we updated the
&lt;a href="https://fluxcd.io/governance/">Flux Governance&lt;/a> recently to make
it even clearer that we love all kinds of contributions, be they code or
not. We hope that many more of you will follow this path.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@FluxCD&lt;/a> welcomes contributors of all kinds, for realz!&lt;br>&lt;br>🥳Today I joined as an official Project Member - without a single line of code written.🤩 Thx to all the Flux Fam, esp &lt;a href="https://twitter.com/dHolbach?ref_src=twsrc%5Etfw">@dholbach&lt;/a> &lt;a href="https://twitter.com/makkes?ref_src=twsrc%5Etfw">@makkes&lt;/a> for sponsoring me.&lt;br>&lt;br>If I can do it, you can too! Join us!&lt;a href="https://t.co/RO6CbSKiBK">https://t.co/RO6CbSKiBK&lt;/a>&lt;/p>&amp;mdash; Stacey Potter (@stacey_potter) &lt;a href="https://twitter.com/stacey_potter/status/1529450484867731456?ref_src=twsrc%5Etfw">May 25, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h3 id="new-flagger-maintainer-sanskar-jaiswal">New Flagger Maintainer: Sanskar Jaiswal&lt;/h3>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/06/may-update/sanskarjaiswal_huc5200d3a6532d1f4c30071f5675d7ffb_132491_400x0_resize_q75_box.jpg" width="400" height="400">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
Sanskar Jaiswal
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Sanskar Jaiswal has been working on Flux and Flagger for quite a while
now. One of his major contributions was to
&lt;a href="https://fluxcd.io/blog/2022/03/flagger-adds-gateway-api-support/">add Gateway API support to
Flagger&lt;/a>.
We are very pleased to let you know that he
&lt;a href="https://github.com/fluxcd/flagger/pull/1191" target="_blank">joined the ranks of
Flagger maintainers
now&lt;/a>.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-06-02 or 2022-06-08.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: KubeCon EU 2022 Wrap-Up</title><link>https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/</link><pubDate>Wed, 25 May 2022 10:00:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/kubecon-welcome-featured_hud606a11bb52fa20e20cee4d806d0043a_251153_640x0_resize_q75_box.jpg" width="640" height="506"/>
&lt;p>It was KubeCon + CloudNativeCon EU 2022 last week and if you weren&amp;rsquo;t
able to attend, this post provides you with everything you need to know
about Flux and GitOps that happened there. The schedule was packed with
case studies, development updates and many new friendships formed at our
booths and in the hallway track.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/kubecon-welcome-featured_hud606a11bb52fa20e20cee4d806d0043a_251153_600x0_resize_q75_box.jpg" width="600" height="474">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Here we go &lt;a href="https://twitter.com/hashtag/KubeConEU?src=hash&amp;amp;ref_src=twsrc%5Etfw">#KubeConEU&lt;/a> 🎉 Flux office hours starts at 1PM room 2H. Come join us 🤗 &lt;a href="https://t.co/RfcTioi58Q">pic.twitter.com/RfcTioi58Q&lt;/a>&lt;/p>&amp;mdash; Stefan Prodan (@stefanprodan) &lt;a href="https://twitter.com/stefanprodan/status/1526120707993878531?ref_src=twsrc%5Etfw">May 16, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h2 id="monday">Monday&lt;/h2>
&lt;p>On Monday we kicked off the day for Flux with a Project Meeting. We are
grateful we had this opportunity through the CNCF to offer a 4 hour
event available to any interested community members. Stefan Prodan,
Leigh Capili and Priyanka Ravi led various talks and provided a great
and very diverse overview of what&amp;rsquo;s happening in Flux and adjacent
tooling these days and how to best take advantage of it.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 460px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/project-meeting_hu8c1728d4c7e68fc88346a48ae857cc48_830787_0x600_resize_q75_box.jpg" width="450" height="600">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">What a great kick-off to a great week of Flux and &lt;a href="https://twitter.com/hashtag/GitOps?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOps&lt;/a> at &lt;a href="https://twitter.com/KubeCon_?ref_src=twsrc%5Etfw">@kubecon_&lt;/a> - thanks &lt;a href="https://twitter.com/stefanprodan?ref_src=twsrc%5Etfw">@stefanprodan&lt;/a> &lt;a href="https://twitter.com/r6by?ref_src=twsrc%5Etfw">@r6by&lt;/a> &lt;a href="https://twitter.com/capileigh?ref_src=twsrc%5Etfw">@capileigh&lt;/a> &lt;a href="https://twitter.com/PinkyyRavi?ref_src=twsrc%5Etfw">@PinkyyRavi&lt;/a> and Vanessa for leading the 4h Flux Project Meeting! 😍 &lt;a href="https://t.co/6YdxRNHNRM">pic.twitter.com/6YdxRNHNRM&lt;/a>&lt;/p>&amp;mdash; Flux Project (@fluxcd) &lt;a href="https://twitter.com/fluxcd/status/1526216149821800448?ref_src=twsrc%5Etfw">May 16, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>Thanks as well Vanessa Abankwah for pulling all the strings in the
background!&lt;/p>
&lt;p>The Cloud Native Telco Day was happening as well on Monday and
&lt;a href="https://twitter.com/P_Ensarguet" target="_blank">Philippe Ensarguet&lt;/a>, CTO
at Orange Business, live-tweeted some of the learnings there. We are
very pleased to know that
&lt;a href="https://twitter.com/P_Ensarguet/status/1526106080375349248" target="_blank">the GitOps setup of Swisscom is based on
Flux&lt;/a>.
&lt;a href="https://twitter.com/P_Ensarguet/status/1526117412629790721" target="_blank">Deutsche Telekom is continuing their voyage on Das Schiff together
with
Flux&lt;/a>
as well.&lt;/p>
&lt;h2 id="tuesday---gitopscon">Tuesday - GitOpsCon&lt;/h2>
&lt;p>Who would have thought a couple of years ago that one day we would have
an entire conference day just about GitOps - this year it was two
simultaneous tracks no less. We want to thank the
&lt;a href="https://opengitops.dev/" target="_blank">Open
GitOps&lt;/a> group for organising this
and inviting great speakers from across all of the GitOps space!&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/gitopscon_hue868832926f094ca459d920fcb4e2017_116681_600x0_resize_q75_box.jpg" width="600" height="400">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
Taken from the &lt;a href="https://www.flickr.com/photos/143247548@N03/52080186019">CNCF flickr account&lt;/a>.
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Let’s kick the day at &lt;a href="https://twitter.com/hashtag/kubecon?src=hash&amp;amp;ref_src=twsrc%5Etfw">#kubecon&lt;/a> with opening session cooked by &lt;a href="https://twitter.com/r6by?ref_src=twsrc%5Etfw">@r6by&lt;/a>, &lt;a href="https://twitter.com/todaywasawesome?ref_src=twsrc%5Etfw">@todaywasawesome&lt;/a>, and &lt;a href="https://twitter.com/ChrisShort?ref_src=twsrc%5Etfw">@ChrisShort&lt;/a> sharing what &lt;a href="https://twitter.com/hashtag/GitOps?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOps&lt;/a> is, and how to get it right🚀 &lt;br>Special thoughts to my mate &lt;a href="https://twitter.com/monadic?ref_src=twsrc%5Etfw">@monadic&lt;/a> who defined this initial idea of &lt;a href="https://twitter.com/hashtag/operation?src=hash&amp;amp;ref_src=twsrc%5Etfw">#operation&lt;/a> by pull request👏&lt;a href="https://twitter.com/hashtag/GitOpsCon?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOpsCon&lt;/a> &lt;a href="https://t.co/5znl1txRuj">pic.twitter.com/5znl1txRuj&lt;/a>&lt;/p>&amp;mdash; Philippe Ensarguet (@P_Ensarguet) &lt;a href="https://twitter.com/P_Ensarguet/status/1526460515823779843?ref_src=twsrc%5Etfw">May 17, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>Here is our own small selection of favourites. If you want to see all
the talks from GitOpsCon, take a look at the
&lt;a href="https://www.youtube.com/c/cloudnativefdn" target="_blank">YouTube channel of the
Cloud Native Computing
Foundation&lt;/a> -
there are loads more.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.youtube.com/watch?v=0jNtDnWT3yo" target="_blank">Crossing the Divide: How GitOps Brought AppDev &amp;amp; Platform Teams
Together!&lt;/a> -
Priyanka &amp;quot;Pinky&amp;quot; Ravi, Weaveworks&lt;/li>
&lt;li>
&lt;a href="https://twitter.com/mikesir87" target="_blank">Michael Irwin&lt;/a> on
using Flux for multi-tenancy:
&lt;a href="https://youtu.be/agsnktpIxzU" target="_blank">Creating A Landlord for
Multi-tenant K8s Using Flux, Gatekeeper, Helm, and Friends -
Michael Irwin&lt;/a>&lt;/li>
&lt;li>AppsFlyer talks about Flux at the core of their huge infra:
&lt;ul>
&lt;li>
&lt;a href="https://youtu.be/qGQyGuoS5Ds" target="_blank">GitOps Everything!? We Sure Can!, Ayelet de-Roos,
AppsFlyer&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://youtu.be/es5ngkzJDEc" target="_blank">We Have Always Done It This Way! Now Let&amp;rsquo;s Try Something
Completely Different - Eliran
Bivas&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Max&amp;rsquo; talk about Flux for multi-cluster envs:
&lt;a href="https://youtu.be/Xei2ZcEg5B0" target="_blank">Managing Thousands of
Clusters and Their Workloads with Flux - Max Jonas Werner,
D2iQ&lt;/a>&lt;/li>
&lt;li>Environment promotion (Form3):
&lt;a href="https://youtu.be/gqs4mVppn1Q" target="_blank">Solving Environment Promotion with
Flux - Sam Tavakoli &amp;amp; Adelina Simion,
Form3&lt;/a>&lt;/li>
&lt;li>Lightning Talks:
&lt;ul>
&lt;li>Secret decryption:
&lt;a href="https://youtu.be/2rJur5VE6yA" target="_blank">Lightning Talk: Hiding in Plain Sight - How
Flux Decrypts Secrets - Somtochi Onyekwere,
Weaveworks&lt;/a>&lt;/li>
&lt;li>Progressive delivery:
&lt;a href="https://youtu.be/AKVfqn85ZJ4" target="_blank">Lightning Talk: GitOps and Progressive
Delivery with Flagger, Istio and Flux - Marco Amador,
Anova&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.youtube.com/watch?v=uU-zbTgbHPI" target="_blank">GitOps, A Slightly Realistic Situation on Kubernetes with
Flux&lt;/a> -
Laurent Grangeau, Google &amp;amp; Ludovic Piot, theGarageBandOfIT&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="wednesday---friday---kubecon">Wednesday - Friday - KubeCon&lt;/h2>
&lt;p>Wednesday through Friday was the main event, with the big keynotes,
talks on many different tracks and a big booth space. We are happy we
had such a great team at the Flux booth because ours was massively
frequented and our team gave a huge amount of demos, answered questions
and were there to hang out with.&lt;/p>
&lt;p>In addition to the physical booth in Valencia, we had a virtual booth as
well, where Kingdon Barrett held our weekly Bug Scrub event and we gave
a number of lightning talks as well.&lt;/p>
&lt;h3 id="lightning-talks-at-the-virtual-booth">Lightning talks at the virtual booth&lt;/h3>
&lt;p>First up was Sanskar Jaiswal, Software Engineer at Weaveworks, who
recently became Flagger maintainer and contributed Gateway API support.
Watch the demo here:&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/pN41tIKn3eE" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>We were happy to have Rosemary Wang, Developer Advocate at HashiCorp,
there who walked us through securing secrets in Flux by using Vault:&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/6gwgG6yhN04" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h2 id="flexyourflux">#flexyourflux&lt;/h2>
&lt;p>Another contributing factor to the amount of people coming to our booth
was the #flexyourflux campaign, where you could&lt;/p>
&lt;ol>
&lt;li>Get a nice &amp;ldquo;flex your flux&amp;rdquo; t-shirt for answering a couple of
questions about Flux&lt;/li>
&lt;li>Win an opportunity to have a 1-on-1 1h long meeting with Stefan
Prodan, Flux core maintainer&lt;/li>
&lt;/ol>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 522px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flexyourflux_hu2c6b40fe1a9deefeb388acbb1ffb82ba_69861_512x0_resize_box_3.png" width="512" height="256">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Get your limited edition &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> T-shirts at &lt;a href="https://twitter.com/KubeCon_?ref_src=twsrc%5Etfw">@KubeCon_&lt;/a> EU only! In person at Valencia only!&lt;a href="https://twitter.com/hashtag/flexyourflux?src=hash&amp;amp;ref_src=twsrc%5Etfw">#flexyourflux&lt;/a> with our quiz at pick up your shirt at the Flux booth! &lt;a href="https://t.co/BHxJxeYhRq">https://t.co/BHxJxeYhRq&lt;/a> &lt;a href="https://twitter.com/kubernetesio?ref_src=twsrc%5Etfw">@kubernetesio&lt;/a> &lt;a href="https://twitter.com/hashtag/GitOps?src=hash&amp;amp;ref_src=twsrc%5Etfw">#GitOps&lt;/a> &lt;a href="https://t.co/HWD2Uru0PX">pic.twitter.com/HWD2Uru0PX&lt;/a>&lt;/p>&amp;mdash; Tamao Nakahara - DevRelCon July 18-19🎉 (@mewzherder) &lt;a href="https://twitter.com/mewzherder/status/1526622072960479232?ref_src=twsrc%5Etfw">May 17, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>The t-shirts were only available in person, but the meeting with Stefan
you can still win, simply enter by filling out
&lt;a href="https://bit.ly/flexyourflux" target="_blank">https://bit.ly/flexyourflux&lt;/a>.
We will draw the winners live at GitOps Days (see below). Good luck to
all participants!&lt;/p>
&lt;h2 id="talks-you-might-have-missed">Talks you might have missed&lt;/h2>
&lt;h3 id="getting-started-with-flux-and-gitops">Getting Started with Flux and GitOps&lt;/h3>
&lt;p>Tiffany Wang from Weaveworks and Joaquin Rodriguez led through a 1.5h
hands-on tutorial called &amp;ldquo;
&lt;a href="https://kccnceu2022.sched.com/event/ytkj" target="_blank">Intro to Kubernetes, GitOps and
Observability&lt;/a>&amp;rdquo;.
The idea was to offer newcomers a quick way to experience Kubernetes and
its natural evolutionary developments: GitOps and Observability.
Attendees were able to use and experience the benefits of Kubernetes
that impact reliability, velocity, security, and more. The session
covered key concepts and practices, as well as offer attendees a way to
experience the commands in real-time. The tutorial covers: kubectl, K9s,
Metrics (Prometheus), Dashboards (Grafana), Logging (Fluent Bit),
GitOps (Flux).&lt;/p>
&lt;p>The feedback we heard from people on the ground was that they had a
blast. If you missed it: good news - it&amp;rsquo;ll be happening at
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps
Days&lt;/a> as well!&lt;/p>
&lt;h3 id="the-flux-deep-dive">The Flux Deep Dive&lt;/h3>
&lt;p>Stefan Prodan delivered the Flux Deep Dive session - this time focused
on security aspects.&lt;/p>
&lt;p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 710px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/deep-dive1_hu02b4cffe2482be2ec635ba5a3ef38b53_69458_700x0_resize_q75_box.jpg" width="700" height="391">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 710px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/deep-dive2_hu4d592085f99f25dea9bae846d654b40a_83491_700x0_resize_q75_box.jpg" width="700" height="396">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&amp;quot;Flux Security Deep Dive&amp;quot; by &lt;a href="https://twitter.com/stefanprodan?ref_src=twsrc%5Etfw">@stefanprodan&lt;/a> &lt;a href="https://twitter.com/hashtag/Flux?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Flux&lt;/a> &lt;a href="https://twitter.com/fluxcd?ref_src=twsrc%5Etfw">@fluxcd&lt;/a> &lt;a href="https://twitter.com/hashtag/KubeCon?src=hash&amp;amp;ref_src=twsrc%5Etfw">#KubeCon&lt;/a> &lt;a href="https://twitter.com/hashtag/CloudNativeCon?src=hash&amp;amp;ref_src=twsrc%5Etfw">#CloudNativeCon&lt;/a> &lt;a href="https://t.co/rGQ5jWdFpm">pic.twitter.com/rGQ5jWdFpm&lt;/a>&lt;/p>&amp;mdash; Nico Meisenzahl ☁️☕️ (@nmeisenzahl) &lt;a href="https://twitter.com/nmeisenzahl/status/1526875153090715650?ref_src=twsrc%5Etfw">May 18, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>There was a lot to be learnt and since security has been such a big
focus for the entire team since the rewrite of Flux, also a lot to catch
up on.&lt;/p>
&lt;p>Stefan will give his talk at GitOps Days too (see below).&lt;/p>
&lt;h3 id="flux-virtual-office-hours">Flux Virtual Office Hours&lt;/h3>
&lt;p>Flux Maintainers Paulo Gomes &amp;amp; Kingdon Barrett hosted the Flux Virtual
Office Hours where they covered the latest Flux features, what’s coming
soon, and an intro to debugging the controllers for new contributors.
Check out the replay here:&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/BrYgx4cB7p4" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h3 id="whats-more">What&amp;rsquo;s more&lt;/h3>
&lt;p>Obviously the hallway track is one of the key events at KubeCon. It&amp;rsquo;s
where you find new friends, learn and make new plans with other
community members. There was a lot of this at the booth, at lunch and at
the evening events.&lt;/p>
&lt;p>In addition to that, many new users and community members find their way
to Slack, our Twitter and LinkedIn group. We are also especially pleased
that some new adopters
&lt;a href="https://fluxcd.io/adopters/">added themselves to our website&lt;/a> -
remember that&amp;rsquo;s one of the safest ways to make Flux maintainers happy. 🥰&lt;/p>
&lt;p>We expect that more talk videos are going to get to us in the next days
and we will make sure to mention them all on
&lt;a href="https://fluxcd.io/resources/">our resources
page&lt;/a> and in
&lt;a href="https://fluxcd.io/tags/monthly-update/">our monthly updates&lt;/a>.&lt;/p>
&lt;h2 id="outlook-gitops-days">Outlook: GitOps Days&lt;/h2>
&lt;p>If you had a FOMO experience over the last week, we are happy to let you
know that GitOps Days are coming up! A free, two days event with lots of
great talks, a lot of fun and lots to catch up with in case you missed
seeing talks at KubeCon.&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 510px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/GitOps-Days-2022-Logo-1_hu90bc1f6f3fd6b7a5565b080a87bb5ffa_107691_500x0_resize_box_3.png" width="500" height="500">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;blockquote>
&lt;p>
&lt;a href="https://www.gitopsdays.com" target="_blank">&lt;strong>GitOps Days!&lt;/strong>&lt;br>
&lt;strong>June 8-9, 2022&lt;/strong>&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>This is THE event for your GitOps Journey! Getting started? Taking
GitOps to the next level? We&amp;rsquo;ll cover all of the steps for your success!&lt;/p>
&lt;p>Come hear from speakers like Taylor Dolezal (CNCF), Anaïs Urlichs (Aqua
Security, CNCF Ambassador), Viktor Farcic (Upbound/Crossplane), Mae
Large (VMware), Rosemary Wang (HashiCorp), Jason Morgan
(Buoyant/Linkerd), and so many more!&lt;/p>
&lt;h2 id="big-thank-you">Big Thank You&lt;/h2>
&lt;p>This wouldn&amp;rsquo;t have been possible without the support of many many
people.&lt;/p>
&lt;p>People speaking: Stefan Prodan, Somtochi Onyekwere, Max Jonas Werner,
Priyanka Ravi, Tiffany Wang, Paulo Gomes, Scott Rigby, Kingdon Barrett,
Sanskar Jaiswal and others.&lt;/p>
&lt;p>Folks organising, writing, fact-checking and supporting the booth:
Vanessa Abankwah, Stacey Potter, Tamao Nakahara, Juozas Gaigalas and
others.&lt;/p>
&lt;p>And of course many people from adjacent communities, adopter companies
and of course the CNCF.&lt;/p>
&lt;p>Sorry if we missed to mention anyone.&lt;/p>
&lt;p>And in closing out, here is a short selection of
&lt;a href="https://www.flickr.com/photos/143247548@N03/" target="_blank">official KubeCon
photos&lt;/a>, all around Flux and GitOps:&lt;/p>
&lt;script src="https://fluxcd.io/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://fluxcd.io/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://fluxcd.io/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://fluxcd.io/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-73353aac9965575f0ca98d39b50d939f-15-wrapper" class="gallery-wrapper">
&lt;div id="gallery-73353aac9965575f0ca98d39b50d939f-15" class="justified-gallery">
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093717219_1d82e890b0_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APSEgB7Vm67qD6PZrPFbJL&amp;#43;8CuXfaqKc85/AD8avTanZWbRR3F1DC83EYkkClz6DPWvOfGuoXkXiCKb7U3lD5Y41YjbgDJ4&amp;#43;ta06XtJct7XJT1O31e7jtNHk1BITMqqrBQ2AQSOc&amp;#43;nOc1ztshPxF8MSmMxmRbhyjdVzD0rI8ZSyRaVpNrd30iy2&amp;#43;TJaQybWlUMAG6&amp;#43;gOKb4QlvP&amp;#43;Eq0eW9inRbTz5FEr7n2SIdo5OSB61Liu4r2KHj6T7RfabPJkuisBzx1BrE8TXU2pXNiszkeZCS5Hc4BzWv43/wBfp/0b&amp;#43;lYWrf8AH5pv/XE/&amp;#43;giiWjHD4Sx9mF/NaTySyERokQDtuOFwOtP8SSS2HiaOSGV1f7PGQwOMcbf6VJYf6mH/AHx/6EKi8Y/8jFF/16x/1rNotbr0P//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093717219_1d82e890b0_c_hu71ae107b8a62a856ed203bc85fadf153_84610_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093717104_ce15c3f6ed_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AH6Ne2k0gVLmGTj&amp;#43;GRT/AFrfAmBAjgkfPdVJryzRzaeHrz7bqMVrqUMsWwRuCFzlcHkZ6A810&amp;#43;teNrvW4ILWwQWhhUsr2&amp;#43;CXAXnhjz&amp;#43;XanJtLREKCb1Z2Qs72ZMG2ZfQk7SKo6rod3dW5DojEKcAtgnj2rn/AAp4uji8RCLUbqKUSBkEwGzbxkZyfb0ra1rxvF9luBaGJZop41U&amp;#43;YrK8ZYfMfY8&amp;#43;mKS5nuJxitjy&amp;#43;5Mt7qkvnysfLyilQFIGc/8A1qDZRq4CMy5yvB9QRQv/ACFbj/eNWT99f96qZRDp8S2t7kDdgHGe1Qag5QXS4BWTbkHtzVqL/j8P0NU9T6zf8B/mKlA9z//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093717104_ce15c3f6ed_c_hu7c7db78f9349263c03f3cfa32dd57261_138164_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093530256_67a260e379_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AM608O6NrksuopFLBFLcxxRwR8bFZl4GRk4z19jT/DtjocKzfatNadpZ2WNXJyVXOSR2HT86b4kFzoqWc8EhmxfpMfLXbtCg8Y5xnk5rl7jX5G1O8vrQmzSaYO8J&amp;#43;YhjhuCRjORnmsIPnXMjVq2kjpZfCt1LfyvaRoLGSRijR5IC5&amp;#43;7&amp;#43;HIzXReFtPt5rfUZdRi/c7g8TOCG8sA5Pbjhff9K42LxNq2iT/wBqRXDJFcsyxRt&amp;#43;8VULbmIU9BnjI6/hz1Wl&amp;#43;LLXUtVcX7RQPKsltBdA4Zl3ZUhRkA8gc9wK1Stq0c8udNhqttHepHHLkKiu52nBb5SMZ/GvMdVV7fxE8COPkZEU7eg2gA47kA16nc/&amp;#43;0W/pXl&amp;#43;t/wDI2Tf9do/5LXNhUvZXO2u/fsS6o76oWeeWRns7WJ2LNu8wt5YOP7v3veuiFlZr8TbexFpGIRcBwq5AAK7sYB7GubPTU/8Aryt/5xV1R/5K9B/10X/0VWkX7q/roctbST9Gf//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093530256_67a260e379_c_hubcce0c0cb46aab7f5775d0d6f0a21867_178045_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093525891_8253f5cf92_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOT8UXl3rN5Z3d1BFbXjKsE0LNt5BYlsZ4BBB59abP4ctoTFdreGSMlfkQJIFyQBkhj3yPyrNtpBf3apNKSVUAPISS3bGa6/TrO90fXbVzZWqNvEXlHZ86HOcg9Md/euhUXJOUuwuZbJGTd6Kiz3N1DfQmaV2HlKDujUEYJ7YIPGK0NMivb/AMOalY3Ns0kUSK8boufmDjBHr3/OuatnuZvEhW3KM0twSquPUnH4c16vYJN4W09vPMN/Yk4nSKHayDGScZO4f55rkVJppp6WNudKNrHj&amp;#43;o3c9rr7SW8hQw4CHHQY6frXceIraJbfSrsbxdzWL3Uk4c5Z1RWAx2GXNcDrH/Ian&amp;#43;q/yFeh&amp;#43;JP&amp;#43;Qfov/YHl/wDRUdaTbVB27E/8vPmYXhw3GoeNLaO&amp;#43;unuNyMqM/VABx/LFej6ndtYaa08ag&amp;#43;WkgCno2F7&amp;#43;vWvOvCP/ACPVl9JP5V3viH/kCT/7s3/oNESZH//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093525891_8253f5cf92_c_hu8eec588086f7cd137952e9bd1d444d04_140777_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093497018_73c745affa_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AHz6Lc2hDYDxf3hUOzBxjGaztO8YXOlJHHPO0sLg4jnXdwOvIye9dkmmQahZRXyIIBINzqW4Ud8URq30asyJ0nHW90c4bNZeSGJ/2WIH86qXFksXJWTaTjO4n&amp;#43;tdnY6BeXXmvaJaPEjlAZZmUkgDPAU&amp;#43;vrVj&amp;#43;yDGsovEgjeJtuUkJXoCOSB6&amp;#43;lacyM7M8MkSCNUJSWRntkZTJKTscnkjGOMAjHvXRT6hfW91eWM19dPHHGpURSlACy7uh3ZHHT9a5y5&amp;#43;7B/16p/WtrVP&amp;#43;Q5ff9c4/wD0XVOKux8zul5f5E1n4o1a2uZPJvZ44o3WQxrIQG3ZyD27dcc1ry&amp;#43;MNb/4RK5H2oNJJO&amp;#43;6Z1y5AjU4GMYrkYv9bc/7sX9a05P&amp;#43;RWm/67Sf&amp;#43;ilocU4u4uZqokj/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093497018_73c745affa_c_hu7c7db78f9349263c03f3cfa32dd57261_107561_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093479261_9ea319196b_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOvFniMADgVz7woPHekYwc&amp;#43;aD/37erviPxHDoenG4eFpWhAcKGxuycAfrXI&amp;#43;DLrzvE2lP9kFusrTSqc53Ao4/wAnvRCD5kzNtNM9ZNsgG7Zt91NVbvThe2M6OoYFSMsvfHrV37RGBhpVHtmni7t1iZC4OQTXW5OxjZXPM/EzfadJlkfcCIWOAeDgHiuI8Iao6azasIkHlbsbSRwEb/Gu113/AJAk3/Xu/wDI1554T/5C0f8AwP8A9Aasklcu75Wj0nQdWudZ8QXDzsUSzVVjjQ/Kd4Ykt6n5RVi/1mZbtLFFAadD&amp;#43;8Jzt7dP/r1k&amp;#43;Cf&amp;#43;Q1qn/bH&amp;#43;UlTX/wDyMNn/ALh/nSg23K4pJKx//9k="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52093479261_9ea319196b_c_huccbcef252eb3ab9f4ce27bcb9e3678eb_82904_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52092506562_bf7483211d_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOV8ORaZLp5srrRvtDty84XccHvnHy49jVnwRHJpd9f3mnNIQ1myRu6DJcSxg4HP94VT0i5nhiluHlkWxhUebEJzGsrEYVcDr747A0uhazb6XBd2wiV0uI&amp;#43;A7NtGGBP3SCOB29BVxVpJvVITaaaR6FfeItR0/SFv2kd3aQRrCjJknvn5eK5HxLfDxbptmLyaQSxtLNGWh2nyyi4GcAH5gwyPSqH2/SteuG0wSmz835YJTI7QFvUhyWGeme1aUyavY6npUmvpaPHzCiwsrjaRtO7HfGDW2Jrwd1BJfIVOm1Zv8zmrq7W7RnaIA7FXHAGAcdFAGeOtVNA09b2/tWklcKbjYQvB6A9aev8AqW&amp;#43;g/maseFP&amp;#43;Pu0/6/D/AOgiuWo2otoumk5K5BDaW66Zfl0LyRSrGjZxgdOn4frRp5SC8SdYwWjGVyfrUqf8g3U/&amp;#43;vlf5moLb/WH/drqrRXsxLSSt/Wp/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52092506562_bf7483211d_c_hu8eec588086f7cd137952e9bd1d444d04_126787_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52092455417_8bf417d644_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/ACHSZoSYjLAHHVTKAR&amp;#43;Bq5Fpl2H5iEgxxsZTj8jXJXviS8v79pr4JZpLGwWVVGH2jaeD0yRgHsfWktvFGpWDf2nEqtGH8lZHA2PkngYA5xz9BVc0tyXBHai1MefMilyMfKkTM3PAwACT&amp;#43;VFzZXSwmQaNfNEPvSOioFHrhiD&amp;#43;lY134q1/TEi1K7gD2i3LCKSNAUkwDgZB6ZA59z1xWpN8TBeWz2sghYNEGkMStlTkfKe3f1qrtmbST1MXxxo0SacuqR&amp;#43;WAsagRGPd0&amp;#43;Xrn0Pp2rB8H69cQXNtocsUU9mZvMVXXJU5P9ea7Dxx/wAief8AcH/oQrzvwz/yNNn/AL3/ALMamGtjeo&amp;#43;W9ux6ZqWi211pmqalE0ls7WszNDG37pmAb5ivqR1/CvM9E1uW3uRayxJcQOVV0k/iGRjP07V65L/yKupf9elz/Jq8R0//AJCSf761rJWZxtc1N3P/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52092455417_8bf417d644_c_huaeb8e63eba109f171ec2fc6d4529692f_139038_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52092455342_703ee45bd5_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOxkMVpavcyhtiDJCqWP5Cr9uiSxJJHyjqGU&amp;#43;xrkfEt/K1rYW0V0kCXUuyQuxVWXGMMw6Dnmrng68nTw6WnuWlXLeSWPKqBjHU8Ag4rocHy3OdJJXOhMSsxHpWHqk9nBfxWMkhW4uFLRptJyB15xgdDSx64YfEbW06MtqyDFwzYQPx8p9Ca5XxHrdzfeMIbfTrjyvsxRJCUGOTyMkZJOTx6A1la&amp;#43;xSZheNtRe50W0KhozHNgEP7GtHwlqUlv4RiMm&amp;#43;UEyH7&amp;#43;D94jrg1heK/&amp;#43;QLB/13H8jWh4c/5E&amp;#43;H/gf/oRrS7vYl/CjfbUC1srmJWDuGKtyD8tckJ5D45Lk4CN8qAYAzHn&amp;#43;tdF/wAuEX4fyrmV/wCRzf8A3l/9FUogz//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52092455342_703ee45bd5_c_hu71ae107b8a62a856ed203bc85fadf153_86390_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52091155465_4d88d8ecb1_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/ALGiOLP4j28sgwlxBJErf7QYHH5V2c9jHPeNM4BO9xkj0dq5Wa2&amp;#43;1WD3MA/0qyuvPiP0xkflmuogvFnto7hVYiTe2B1&amp;#43;&amp;#43;3FXLUa7lyTV7fR4NiQPLIACURcDHrk8VZujFMySlR0B5HNY089pfRQmeOWFxOEIKkjODjOO3A7inG8LxfOQzqSrFehIqXDQ006HN6FK2Zv&amp;#43;up/kKuQu9kj28bExrIzKD23Hdj8yaoaF1m/66n&amp;#43;Qq9N/rpP97&amp;#43;golsQjStc3lpJExClxy2M96yo0FqXjiyFLZxn2rW0j7h/3TWXJ/rm&amp;#43;o/lVy2TFFvVH/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52091155465_4d88d8ecb1_c_huac7e42ea210bfe402b6fc216257a8f3b_79049_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52090898039_87b305e163_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APPNC0w6hqLtLCn2YMzu8mBkDnAz3&amp;#43;lYSwPLcmGFGdixCjHJrStTNPewpHJgrGAuTxuxnmugstMsLub&amp;#43;1hcNDcQjNzbADdu3BSwz0HzZ&amp;#43;oPSqn8d77mkI8yS7HFMjIxVgQynBB7Gk2kDdg4PeulsvCl3rmvT2cU0ayFDcBnOAylsHGM88/pVzWNFt4PCaTQXTmKOZdsbgZLEEHn26/j9KOV3sTbe5hadlbrzQ2NirkevIH/160Hnlt/Es7QMF8wncHUMGBVSQR3rP0/70n&amp;#43;4n/oQq5cf8jE/1H/oC0R1dn/Whe1mjrvA2onU/Fc900McLCBl2xjj7yk49BnPHvWDr9yDoCwKhCm7D8tn&amp;#43;FvatL4Zf8h65/65t/6EtYuuf8glP&amp;#43;u4/wDQWqoLQibZ/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52090898039_87b305e163_c_hu5efb6cb8802cca60e8a8cd58d3f11c2b_90279_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52090652821_c360ab9317_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AFm8f69Z2S3UulQpGz7AWjcc4z3NVYfilq09zHALC2BkYKDhu/41m&amp;#43;IfFVrqXhGwV5kmmaRC0SNzGQhB4/H9a5cNcTAyRWkqrgbSFJHTjBrRqztcl0ob2O0n&amp;#43;KOqwErNpsCspwVO4EfrUsXj7VNS03UJl0yDZaodx3kZ9cfhzXC2yS6pI8aTRhyckyEjJ79utT2v28QT2kcnkRXjMN7j5G6cZANCm&amp;#43;4OlDsYhEABPlvuGBncMc&amp;#43;2KtQ6jOyJAjssW0grnOQORVNv4v8AgNLa/fT6H&amp;#43;VQ0rs1g9kLZSuTICSc8jnoamm1CRJlQZKoB8pOB09sd6rWX3nptz/x8n6D&amp;#43;VJITbP/2Q=="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52090652821_c360ab9317_c_hubcce0c0cb46aab7f5775d0d6f0a21867_96296_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52089619257_e00f636fba_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AO707QNOudMshNEzbYlI&amp;#43;c9xk1o3mj2KQvcCD54YiVyx7DjvXE2fi1IIZg&amp;#43;qlLezRP3m1CpB/u4GTjoas23jJtS0iO6guvNSSQRXCM6L5SnqTkc9vzqpVW1ZXGqeupvaNo1nLLc3cisz&amp;#43;cQoEhwBtHv71Jc&amp;#43;HtOitZsRyEsM7jKxP8&amp;#43;K50eIzY297KjiK3jjWVGWdP30jDleRwc8VRvvGI2wH&amp;#43;1gkU0ZZ90ygpx0xj5ucjj0pKq4JJluk5t2PGRdSTpsJKqsZACsQOlbukt5WkCEjeJlLHJIxzjGAcH7tc3b/wAX&amp;#43;4a6PT/&amp;#43;PG3/AOuR/wDQmralroYVHpcZrECCGeaNpVUyIojMhKrkDOPzqjcCK2hhmKNKQSu12yAAewI&amp;#43;vXNaWrf8g&amp;#43;X/AK7x/wAlrM1P/jyj/wB9v50Jt1LF290//9k="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52089619257_e00f636fba_c_hu7c7db78f9349263c03f3cfa32dd57261_130598_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52089619152_d00d9f22a3_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOmj8KrdXk4tiFSJQPm6s3I6fh7VUutBlilwYfMZX2/L84JHb9OlVbn4h2uiTSMriUSsu94SpA&amp;#43;bngk5&amp;#43;8elYV348Ml3O1q8EjsA3mKpDNnkgDPXjpgCrdSo1a1yuSKe5sXej3MalzYypGcHLIcDNX7DRbe2tY7mVmZ2w3kg4DDrhvb2rlb/AMZ69c6e1u9usZKk&amp;#43;ZGwV12nOTzxn0/yU03xLcTatBFfBt3kMkcn988Z9j0BzWLvJ67FbHnJMk0aXEshcqMHPUge9bmmwR21obxlErOAcHjBPfNYkf8Ax4j8a34P&amp;#43;QIv0WiTblbzFFKw6/8AEE89x50lvA2SMrtIBx9DVTSLqLTdcF3DHKVHzBGlBOD2Jxz&amp;#43;VVbnpRB/x9D/AHR/StraEX1uf//Z"
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52089619152_d00d9f22a3_c_huccbcef252eb3ab9f4ce27bcb9e3678eb_173648_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52084412443_2bdea47ddf_c.jpg"
class="galleryImg"
>
&lt;img
width="225" height="150"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOV8ORaZLp5srrRvtDty84XccHvnHy49jVnwRHJpd9f3mnNIQ1myRu6DJcSxg4HP94VT0i5nhiluHlkWxhUebEJzGsrEYVcDr747A0uhazb6XBd2wiV0uI&amp;#43;A7NtGGBP3SCOB29BVxVpJvVITaaaR6FfeItR0/SFv2kd3aQRrCjJknvn5eK5HxLfDxbptmLyaQSxtLNGWh2nyyi4GcAH5gwyPSqH2/SteuG0wSmz835YJTI7QFvUhyWGeme1aUyavY6npUmvpaPHzCiwsrjaRtO7HfGDW2Jrwd1BJfIVOm1Zv8zmrq7W7RnaIA7FXHAGAcdFAGeOtVNA09b2/tWklcKbjYQvB6A9aev8AqW&amp;#43;g/maseFP&amp;#43;Pu0/6/D/AOgiuWo2otoumk5K5BDaW66Zfl0LyRSrGjZxgdOn4frRp5SC8SdYwWjGVyfrUqf8g3U/&amp;#43;vlf5moLb/WH/drqrRXsxLSSt/Wp/9k="
class="lazy"
data-src="https://fluxcd.io/blog/2022/05/kubecon-eu-2022-wrap-up/flickr/52084412443_2bdea47ddf_c_huc2577a16c8780055f5d6a2a8fbe60f74_126783_300x150_fit_q85_lanczos.jpg"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-73353aac9965575f0ca98d39b50d939f-15");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "justify",
captions : false,
});
});
&lt;/script></description></item><item><title>Blog: Flux at KubeCon EU 2022</title><link>https://fluxcd.io/blog/2022/05/flux-at-kubecon-eu-2022/</link><pubDate>Thu, 12 May 2022 07:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/05/flux-at-kubecon-eu-2022/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/05/flux-at-kubecon-eu-2022/kubecon-featured_hu7e256013b33bb8d96c97cb9d743a7eff_391211_640x0_resize_box_3.png" width="640" height="228"/>
&lt;p>&lt;img src="kubecon-featured.png" alt="KubeCon in Valencia">&lt;/p>
&lt;p>We are so excited!
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank">KubeCon / CloudNativeCon Europe
2022&lt;/a>
is happening 16-20 May 2022 in Valencia, Spain. Team Flux is going to be
there and we are looking forward to meeting you in-person or in our
virtual sessions, meetings and co-located events. 🎉&lt;/p>
&lt;p>&lt;strong>Update:&lt;/strong> 2022-05-16: We updated the details of the project meeting.&lt;/p>
&lt;h2 id="if-you-cant-make-it-to-kubecon">If you can&amp;rsquo;t make it to KubeCon&lt;/h2>
&lt;p>Many of us won&amp;rsquo;t be able to attend in-person this time around. Don&amp;rsquo;t
worry, we have you covered! There will be lots of opportunities to meet
Flux people online, see talks, discuss and learn from each other.&lt;/p>
&lt;p>There&amp;rsquo;s just one thing you need to do to join: visit our
&lt;a href="https://bit.ly/flux_kubeconEU2022" target="_blank">Flux at
KubeCon site&lt;/a> and
bookmark it. It lists all the talks and all events - everything
Flux-related in one place.&lt;/p>
&lt;p>&lt;img src="flux-events.png" alt="Flux Events page">&lt;/p>
&lt;p>We are also going to have a Virtual Booth. This will allow you to talk
to Flux people at all official booth times, we will have short talks,
watch some of the talks together and bring like-minded people together.
We can&amp;rsquo;t wait to meet you there.&lt;/p>
&lt;p>Visit our
&lt;a href="https://bit.ly/flux_kubeconEU2022" target="_blank">Flux at KubeCon site&lt;/a>
and bookmark it now!&lt;/p>
&lt;h2 id="-flex-your-flux-knowledge-and-win-prizes-">🎉 Flex your Flux knowledge and win prizes! 🎉&lt;/h2>
&lt;p>If you are at KubeCon, this is your chance to get a limited edition
T-shirt (while supplies last) and a chance to win a meeting with a Flux
or Flagger maintainer!&lt;/p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 510px">
&lt;img class="card-img-top" src="https://fluxcd.io/blog/2022/05/flux-at-kubecon-eu-2022/flexyourflux_huc0ff76b8f6dd2f496f4ada40b45797f2_151467_500x0_resize_box_3.png" width="500" height="375">
&lt;figcaption class="card-body px-0 pt-2 pb-0">
&lt;p class="card-text">
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Essentially what you need to do is&lt;/p>
&lt;ol>
&lt;li>Visit the &amp;quot;Flux Booth in the Project Pavilion&amp;quot;&lt;/li>
&lt;li>You will be given a Flux question, if you answer correctly, you will
win a T-shirt&lt;/li>
&lt;li>If you answer an advanced question you will win a T-Shirt + an 1-hour
meeting with a Flux maintainer (winners announced after KubeCon).&lt;/li>
&lt;li>Make sure you tweet using #flexyourflux&lt;/li>
&lt;/ol>
&lt;p>If you are entering virtually make sure you participate online by
tweeting questions will be posted during KubeCon so keep an eye out for
them !!!&lt;/p>
&lt;p>Visit the Flux booth (we are number 6) in person for more info and
follow #flexyourflux from the
&lt;a href="https://twitter.com/fluxcd" target="_blank">@fluxcd Twitter
handle&lt;/a>.&lt;/p>
&lt;h2 id="at-kubecon-watch-out-for-these-folks">At KubeCon, watch out for these folks&lt;/h2>
&lt;p>&lt;img src="team-flux-at-kubecon.png" alt="Team Flux at KubeCon">&lt;/p>
&lt;p>There will be lots more of Team Flux in the crowds: contributors,
advocates, friends, implementers and folks in adjacent communities we
work a lot with. Find them at our physical booth or in all of the
sessions listed below.&lt;/p>
&lt;p>All right, how about these folks above? They will all give sessions, MC
the events and coordinate all the things.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi&lt;/strong> has been speaking about her experience as
a DevOps Engineer a lot lately. She gathered a lot of experience
working at a large insurance institution and helped them
transition to Flux and GitOps. Since then she has been a recurring
guest at Weave Online User Group,
&lt;a href="https://www.gitopsdays.com/" target="_blank">GitOps
Days&lt;/a> and elsewhere.&lt;/li>
&lt;li>&lt;strong>Stefan Prodan&lt;/strong> is the creator of Flagger and has been a core
maintainer of Flux since Weaveworks donated the project to CNCF.
He is a maintainer of SMI and he's been part of Team Flux for 4+
years already. He is also the owner of a very cute dog.&lt;/li>
&lt;li>&lt;strong>Scott Rigby&lt;/strong> is a maintainer of Flux and Helm, and one of the
chairs of OpenGitOps. He knows the ecosystem very well,
contributed a lot to all these projects and was one of the driving
forces behind Flux Governance.&lt;/li>
&lt;li>&lt;strong>Philips Laine&lt;/strong> is a core maintainer of Flux as well and among
other things founded the terraform-provider-flux project.&lt;/li>
&lt;li>&lt;strong>Vanessa Abankwah&lt;/strong> is pulling all the strings behind the scenes.
Not only did she organise all of our presence at KubeCon, but lots
and lots of meetups and events where Team Flux was present.&lt;/li>
&lt;li>&lt;strong>Max Jonas Werner&lt;/strong> is a core maintainer of Flux as well and makes
sure that Flux works great in D2iQ&amp;rsquo;s DKP platform. Apart from that
he is interested in landing OCI support in Flux and loads more.&lt;/li>
&lt;/ul>
&lt;p>Everyone is looking forward to meeting you! 💖&lt;/p>
&lt;h2 id="this-is-what-is-happening-at-kubecon">This is what is happening at KubeCon&lt;/h2>
&lt;h3 id="monday-16-may">Monday, 16 May&lt;/h3>
&lt;p>13:00 - 17:00 (Room 2H - Event Center): Flux Project Meeting: We will
kick off the Flux get-togethers and festivities with an in-person
meeting for all Flux users, contributors, maintainers and generally
interested folks. This will be an opportunity to get to know each other,
have a chat and see what people&amp;rsquo;s interests are. (
&lt;a href="https://linuxfoundation.surveymonkey.com/r/WYGBGPZ" target="_blank">Sign up
here&lt;/a>.)
Contact people on the ground are: Scott Rigby, Priyanka Ravi and Stefan
Prodan.&lt;/p>
&lt;p>Schedule:&lt;/p>
&lt;ul>
&lt;li>13:00 Meet and greet&lt;/li>
&lt;li>13:30 &lt;strong>Intro to GitOps and Flux&lt;/strong> lightning talk + Q&amp;amp;A with Pinky&lt;/li>
&lt;li>14:00 &lt;strong>Flux&amp;rsquo;s Top 10 Features&lt;/strong> with Stefan Prodan + Q&amp;amp;A/office hours&lt;/li>
&lt;li>15:00 &lt;strong>Open topics.&lt;/strong> We can do office hours or mix and match with lightning talks on &lt;strong>Flux + Helm, Flux + Terraform, Flux + HashiCorp Vault, Flux + Visual Studio Code&lt;/strong>, etc. Whatever people want.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Click here to register
(
&lt;a href="https://linuxfoundation.surveymonkey.com/r/WYGBGPZ" target="_blank">here&lt;/a>)
for the Flux Project Meeting.
(Free, in-person, no special ticket required)&lt;/p>
&lt;p>Details Flux Project Meeting&lt;/p>
&lt;p>Monday, May 16, 13:00 - 17:00 CEST&lt;/p>
&lt;p>Room 2H | Event Center&lt;/p>
&lt;p>Space is limited &lt;em>Please note: we will not have any live streaming,
recordings, or any virtual component available for this meeting.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;h3 id="tuesday-17-may---gitopsconhttpseventslinuxfoundationorggitopscon-europeprogramschedule">Tuesday 17 May -
&lt;a href="https://events.linuxfoundation.org/gitopscon-europe/program/schedule/" target="_blank">GitOpsCon&lt;/a>&lt;/h3>
&lt;p>Lots and lots of talks about GitOps in general and Flux in particular,
here&amp;rsquo;s a short selection of what to look forward to:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://sched.co/zrpk" target="_blank">What is GitOps and How to Get It Right - Dan Garfield (Codefresh);
Chris Short (AWS) &amp;amp; Scott Rigby
(Weaveworks)&lt;/a> (9:00 - 9:35)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrq5" target="_blank">Hiding in Plain Sight - How Flux Decrypts Secrets - Somtochi
Onyekwere (Weaveworks)&lt;/a>
(11:05 - 11:15)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqK" target="_blank">Taming the Thundering Gitops Herd with Update Policies - Joaquim
Rocha &amp;amp; Iago López Galeiras
(Microsoft)&lt;/a> (11:35 - 11:45)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqW" target="_blank">GitOps and Progressive Delivery with Flagger, Istio and Flux -
Marco Amador (Anova)&lt;/a>
(13:20-13:30)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqf" target="_blank">Creating A Landlord for Multi-tenant K8s Using Flux, Gatekeeper,
Helm, and Friends - Michael Irwin
(Docker)&lt;/a> (13:35-14:05)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqi" target="_blank">GitOps, A Slightly Realistic Situation on Kubernetes with Flux -
Laurent Grangeau (Google) &amp;amp; Ludovic Piot
(theGarageBandOfIT)&lt;/a> (14:10 -
14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrql" target="_blank">Solving Environment Promotion with Flux - Sam Tavakoli &amp;amp; Adelina
Simion (Form3)&lt;/a> (14:10 -
14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqu" target="_blank">Managing Thousands of Clusters and Their Workloads with Flux - Max
Jonas Werner (D2iQ)&lt;/a> (14:55 -
15:25)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqx" target="_blank">Crossing the Divide: How GitOps Brought AppDev &amp;amp; Platform Teams
Together! - Russ Palmer (State Farm) &amp;amp; Priyanka &amp;lsquo;Pinky&amp;rsquo; Ravi
(Weaveworks)&lt;/a> (15.30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrr0" target="_blank">GitOps Everything!? We Sure Can!,
AppsFlyer&lt;/a> (15:30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/ytwg" target="_blank">Lightning Talk: Addressing Log4Shell with Software Supply Chains -
Duane DeCapite (VMware)&lt;/a>
(18:04 - 18:09)&lt;/li>
&lt;/ul>
&lt;h3 id="wednesday-18-may---friday-may-20---kubeconhttpskccnceu2022schedcomiframeno">Wednesday 18 May - Friday May 20 -
&lt;a href="https://kccnceu2022.sched.com/?iframe=no" target="_blank">KubeCon&lt;/a>&lt;/h3>
&lt;p>Over these three days we are going to be at the Flux booth (both
virtually and on the ground), so come over for a chat. We are planning
loads of talks, demos and ample time to have a chat, get to know
everyone, ask questions and have great new ideas together!&lt;/p>
&lt;p>On top of that, here is a list of talks, workshops and sessions during
those days:&lt;/p>
&lt;ul>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytlV" target="_blank">Flux Security Deep Dive - Stefan Prodan
(Weaveworks)&lt;/a> (11:55 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytkj" target="_blank">Intro to Kubernetes, GitOps, and Observability Hands-On
Tutorial - Johee Chung (Microsoft) &amp;amp; Tiffany Wang
(Weaveworks)&lt;/a> (11:00 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://weaveworks.zoom.us/j/85821738864?pwd=cjk4QjRabEpUVlRlcFBqMm9UZ2xNZz09" target="_blank">Flux Bug Scrub - Kingdon
Barrett&lt;/a>
(13:00 - 14:00)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytmW" target="_blank">A New Generation of Trusted GitOps for Mixed K8s and
Non-K8s End Users - Alexis &amp;amp; Vasu Chandrasekhara
(SAP)&lt;/a> (15:25 - 16:00)&lt;/li>
&lt;li>Thu 19:
&lt;a href="https://sched.co/yto4" target="_blank">GitOps to Automate the Setup, Management and Extension a
K8s Cluster - Kim Schlesinger
(DigitalOcean)&lt;/a> (11:00 -
12:30)&lt;/li>
&lt;li>Thu 19:
&lt;a href="https://kccnceu2022.sched.com/event/10Bwn/virtual-project-office-hours-flux" target="_blank">Flux Project Office Hour - Paulo Gomes
(Weaveworks)&lt;/a>
(13:30 - 14:15)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://sched.co/ytrM" target="_blank">Observing Fastly&amp;rsquo;s Network at Scale Thanks to K8s and the
Strimzi Operator - Fernando Crespo &amp;amp; Daniel Caballero,
(Fastly)&lt;/a> (11:00 - 11:35)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://kccnceu2022.sched.com/#" target="_blank">Simplifying Service Mesh Operations with Flux and
Flagger - Mitch Connors (Google) &amp;amp; Stefan Prodan
(Weaveworks)&lt;/a>
(14:55 - 15:30)&lt;/li>
&lt;/ul>
&lt;p>Please note: all of the above might be subject to change. Please
double-check
&lt;a href="https://bit.ly/flux_kubeconEU2022" target="_blank">the schedule
beforehand&lt;/a>. Please
reach out to Vanessa Abankwah or Daniel Holbach on Slack if you have
questions.&lt;/p>
&lt;p>We very much look forward to seeing you there! 💖&lt;/p>
&lt;h2 id="whats-to-come-after-kubecon">What&amp;rsquo;s to come after KubeCon&lt;/h2>
&lt;blockquote>
&lt;p>&lt;strong>
&lt;a href="https://www.gitopsdays.com" target="_blank">GitOps Days!&lt;/a>&lt;/strong>&lt;br>
&lt;strong>
&lt;a href="https://www.gitopsdays.com" target="_blank">June 8-9, 2022&lt;/a>&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Don&amp;rsquo;t miss this free, 2-day online event on June 8-9 (2 weeks after KubeCon). This is THE event for your GitOps Journey! Getting started? Taking GitOps to the next level? We&amp;rsquo;ll cover all of the steps for your success!&lt;/p>
&lt;p>Come hear from speakers like Taylor Dolezal (CNCF), Anaïs Urlichs (Aqua Security, CNCF Ambassador), Viktor Farcic (Upbound/Crossplane), Mae Large (VMware), Rosemary Wang (HashiCorp), Jason Morgan (Buoyant/Linkerd), and so many more!&lt;/p>
&lt;p>Schedule:&lt;/p>
&lt;ul>
&lt;li>Talks and tutorials on how to get started with Kubernetes and GitOps&lt;/li>
&lt;li>Talks from Flux users about their use cases&lt;/li>
&lt;li>How to do GitOps securely&lt;/li>
&lt;li>Platforms that offer GitOps: Microsoft Arc Kubernetes, AWS Anywhere, Weave GitOps, D2iQ Kubernetes Platform, and more! all using Flux!&lt;/li>
&lt;li>Flux in the CNCF and the GitOps Ecosystem&lt;/li>
&lt;li>Flux support and Integrations: Flux + Helm, Terraform, HashiCorp Vault, Jenkins, OpenShift, Visual Studio Code, and much much more!&lt;/li>
&lt;li>Technical deep dives with Flux maintainers&lt;/li>
&lt;/ul>
&lt;p>
&lt;a href="https://www.gitopsdays.com" target="_blank">Register today!&lt;/a>&lt;/p></description></item><item><title>Blog: May 2022 Security Announcement</title><link>https://fluxcd.io/blog/2022/05/may-2022-security-announcement/</link><pubDate>Tue, 10 May 2022 08:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/05/may-2022-security-announcement/</guid><description>
&lt;h2 id="tldr">tl;dr&lt;/h2>
&lt;p>The Flux Team has found three security vulnerabilities in
Flux, and we strongly advise you to upgrade your clusters as soon as you
can.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>CVE&lt;/th>
&lt;th>Advisory&lt;/th>
&lt;th>Severity&lt;/th>
&lt;th>Affected versions&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>CVE-2022-24817&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-vvmq-fwmg-2gjc" target="_blank">Improper kubeconfig validation allows arbitrary code execution&lt;/a>&lt;/td>
&lt;td>Critical&lt;/td>
&lt;td>&lt;code>&amp;lt; 0.29.0 &amp;gt;= v0.1.0&lt;/code>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CVE-2022-24877&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-j77r-2fxf-5jrw" target="_blank">Improper path handling in Kustomization files allows path traversal&lt;/a>&lt;/td>
&lt;td>Critical&lt;/td>
&lt;td>&lt;code>&amp;lt; v0.29.0&lt;/code>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CVE-2022-24878&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-7pwf-jg34-hxwp" target="_blank">Improper path handling in Kustomization files allows for denial of service&lt;/a>&lt;/td>
&lt;td>High&lt;/td>
&lt;td>&lt;code>&amp;lt; v0.29.0 &amp;gt;= v0.19.0&lt;/code>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Breaking changes to be aware of in the upgrade process:
&lt;a href="https://fluxcd.io/blog/2022/05/april-2022-update/#latest-flux-release-series-is-029">0.29&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/discussions/2567" target="_blank">0.28&lt;/a>,
&lt;a href="https://fluxcd.io/blog/2022/03/february-update/#latest-flux-is-027">0.27&lt;/a>,
&lt;a href="https://fluxcd.io/blog/2022/01/january-update/#flux-v026-more-secure-by-default">0.26&lt;/a>,
&lt;a href="https://fluxcd.io/blog/2021/11/december-update/#a-flurry-of-flux-releases">0.24 - 0.21&lt;/a>.&lt;/p>
&lt;p>If you cannot immediately update or are hard pressed for time and need a
work-around for now, please see the CVE advisories linked above for more
information.&lt;/p>
&lt;h2 id="some-background">Some Background&lt;/h2>
&lt;p>Last week the Flux Security Team disclosed three new vulnerabilities
which affect v0.28 and older versions, and have a greater impact in
multi-tenancy deployments.&lt;/p>
&lt;p>The reason why the impact is greater in multi-tenancy deployments is due
to the way that Flux/GitOps works. Flux tends to operate like a cluster
admin, having permissions to apply any changes to a cluster, regardless
of their scope - at namespace or cluster levels. Users having access to
a source repository, or simply having access to create/alter Flux
objects within a cluster can instruct Flux to apply such changes, which
in single tenancy effectively means that such users have cluster admin
permissions to the target clusters. The caveat being that using Flux you
can add additional security controls between the user and the target
cluster, for example, before each change is merged into a repository
Pull Requests must be created requiring peer reviews. The Open GitOps
community started defining and codifying this further - have a look
&lt;a href="https://opengitops.dev/blog/sec-gitops/" target="_blank">at
this blog post&lt;/a> if
you want to know more.&lt;/p>
&lt;p>In multi-tenant environments, users with similar permissions can only
affect part of a cluster, or an isolated cluster in a group of clusters.
Therefore, if a user can gain escalated privileges (or deny service) at a Flux
level, it will have an impact way larger than on single-tenant clusters, as
the users can impact more than just themselves.&lt;/p>
&lt;p>At time of writing, we are unaware of any public exploits in the wild,
and therefore have no reason to believe such vulnerabilities have been
actively exploited.&lt;/p>
&lt;h2 id="the-advisories-in-detail">The advisories in detail&lt;/h2>
&lt;h3 id="cve-2022-24817httpsgithubcomfluxcdflux2securityadvisoriesghsa-vvmq-fwmg-2gjc---kubeconfig-validation">
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-vvmq-fwmg-2gjc" target="_blank">CVE-2022-24817&lt;/a> - Kubeconfig Validation&lt;/h3>
&lt;p>At the beginning of the Flux2&amp;rsquo;s journey we implemented a feature to apply
state to remote clusters. It enables users to have a management cluster
in which Flux is installed, which then applies changes to other
clusters, making it ideal for some multi-tenancy scenarios in which high
isolation across tenants is needed.&lt;/p>
&lt;p>The connection between the management cluster and the target clusters is
done by referencing a Kubernetes secret containing a kubeconfig, which is set at the &lt;code>spec.KubeConfig&lt;/code> field in
either &lt;code>Kustomization&lt;/code> or &lt;code>HelmRelease&lt;/code> objects.&lt;/p>
&lt;p>One interesting thing about kubeconfigs is that they are quite
extensible. You can for example define an executable which will then be
automatically called by &lt;code>kubectl&lt;/code> every time it requires a new on-demand
access token. An example of this in action is
&lt;a href="https://github.com/kubernetes-sigs/aws-iam-authenticator" target="_blank">aws-iam-authenticator&lt;/a>,
which enables AWS users to authenticate against AWS and then use the
returning JWT tokens to access their EKS clusters. Once the token expires,
the process happens again. All that is managed by &lt;code>kubectl&lt;/code> behind the scenes
without user intervention.&lt;/p>
&lt;p>The problem here is that first, the use of executables in kubeconfigs
was enabled by default. Meaning that a malicious tenant would be able to
craft a malicious kubeconfig which could lead to privilege escalation
within the cluster.&lt;/p>
&lt;p>As a solution, we decided to disable this feature by default. It can
still be enabled at a cluster level via a new flag
&lt;code>--insecure-kubeconfig-exec&lt;/code> being sent to the controller binary.&lt;/p>
&lt;p>For cluster admins considering this feature, we also recommend the use
of AppArmor and SELinux profiles to enforce at Kernel level what
binaries could be executed.&lt;/p>
&lt;h3 id="cve-2022-24877httpsgithubcomfluxcdflux2securityadvisoriesghsa-j77r-2fxf-5jrw---kustomization-path-traversal">
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-j77r-2fxf-5jrw" target="_blank">CVE-2022-24877&lt;/a> - Kustomization Path Traversal&lt;/h3>
&lt;p>Flux allows users to lean on Kustomize features to make their lives
easier as they go on about declaring the state of their clusters. Some
of those features could result in sensitive data from the pod filesystem
to be exposed into the target cluster, which could lead to a malicious
tenant being privy to anything sensitive that may exist in the
controller&amp;rsquo;s filesystem or attached volumes (e.g. token).&lt;/p>
&lt;p>The mitigation for the path traversal was to create stronger bounds,
enforcing that all &lt;code>kustomize&lt;/code> operations happen within such bounds or
result in error.&lt;/p>
&lt;h3 id="cve-2022-24878httpsgithubcomfluxcdflux2securityadvisoriesghsa-7pwf-jg34-hxwp---kustomization-denial-of-service">
&lt;a href="https://github.com/fluxcd/flux2/security/advisories/GHSA-7pwf-jg34-hxwp" target="_blank">CVE-2022-24878&lt;/a> - Kustomization Denial of Service&lt;/h3>
&lt;p>Whilst working on the mitigation of the previous CVE, we have noticed
that in some scenarios a specially crafted &lt;code>kustomization.yaml&lt;/code> could lead
to the &lt;code>kustomize-controller&lt;/code> to enter into an endless loop, and finally
crash.&lt;/p>
&lt;p>For single-tenant clusters, this would mean that an user may make a mistake and
the controller stops working, potentially resulting in future
reconciliations not being applied. For multi-tenant clusters, depending on the
deployment model, a tenant could cause a disruption to affect not only
itself but also the other tenants and potentially even the management
cluster.&lt;/p>
&lt;p>The solution mitigating this vulnerability was to further improve our
validation and ensure that such scenarios are not processed in the first
place.&lt;/p>
&lt;h2 id="inspecting-your-flux-system-version">Inspecting your Flux system version&lt;/h2>
&lt;p>To check if your system is currently vulnerable, run &lt;code>flux version --context=my-cluster&lt;/code>
with the &lt;code>--context&lt;/code> set to the cluster you want to inspect. This will
report the current Flux binary and controller versions.&lt;/p>
&lt;h3 id="vulnerable-flux-system">Vulnerable Flux system&lt;/h3>
&lt;p>To find out if your system could be vulnerable, simply find out the
version of Flux. Here it&amp;rsquo;s important to check you are running all of
these:&lt;/p>
&lt;ul>
&lt;li>flux &lt;code>&amp;lt; v0.29.0&lt;/code>&lt;/li>
&lt;li>helm-controller &lt;code>&amp;lt; v0.19.0&lt;/code>&lt;/li>
&lt;li>kustomize-controller &lt;code>&amp;lt; v0.24.0&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>You can do this like so:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">$ flux version
flux: v0.22.1
helm-controller: v0.12.2
kustomize-controller: v0.17.0
notification-controller: v0.18.1
source-controller: v0.17.2
&lt;/code>&lt;/pre>&lt;h3 id="updating-your-vulnerable-system">Updating your vulnerable system&lt;/h3>
&lt;p>&amp;#x1f4a5; If you find the controllers versioned within the range
mentioned above, follow the upgrade procedure for your system. For
&lt;code>flux bootstrap&lt;/code>, this can be done by running the command again with
the same arguments as used during install.&lt;/p>
&lt;p>&amp;#x26a0;&amp;#xfe0f; Please note that if you are upgrading from below one of the
versions in the following list, there are breaking changes and, pre-
and/or post-upgrade notes you need to take into account:
&lt;a href="https://fluxcd.io/blog/2022/05/april-2022-update/#latest-flux-release-series-is-029">0.29&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/discussions/2567" target="_blank">0.28&lt;/a>,
&lt;a href="https://fluxcd.io/blog/2022/03/february-update/#latest-flux-is-027">0.27&lt;/a>,
&lt;a href="https://fluxcd.io/blog/2022/01/january-update/#flux-v026-more-secure-by-default">0.26&lt;/a>,
&lt;a href="https://fluxcd.io/blog/2021/11/december-update/#a-flurry-of-flux-releases">0.24 - 0.21&lt;/a>.&lt;/p>
&lt;h3 id="up-to-date-flux-system">Up-to-date Flux system&lt;/h3>
&lt;p>An up to date Flux system should at least have versions listed below:&lt;/p>
&lt;ul>
&lt;li>flux &lt;code>&amp;gt;= v0.29.0&lt;/code>&lt;/li>
&lt;li>helm-controller &lt;code>&amp;gt;= v0.19.0&lt;/code>&lt;/li>
&lt;li>kustomize-controller &lt;code>&amp;gt;= v0.24.0&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>So in practice the output could look like this:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">$ flux version
flux version
flux: v0.30.2
helm-controller: v0.21.0
kustomize-controller: v0.25.0
notification-controller: v0.23.5
source-controller: v0.24.4
&lt;/code>&lt;/pre>&lt;p>We encourage all users to keep Flux up-to-date. We offer a
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action#automate-flux-updates" target="_blank">GitHub Action&lt;/a> with which you can automate the Flux upgrades in a GitOps manner, without having to connect from CI to the cluster&amp;rsquo;s API, as Flux is capable of upgrading itself from Git.&lt;/p>
&lt;h2 id="flux-security-more-generally-speaking">Flux Security more generally speaking&lt;/h2>
&lt;p>It is no secret that the Flux community has been investing in security
for a long time. Early on the Flux journey we re-architectured the
codebase to avoid shelling out to binaries to decrease the likelihood of
code execution vulnerabilities. The story about our Git integration
&lt;a href="https://fluxcd.io/blog/2022/03/flux-puts-the-git-into-gitops/">we
wrote down here&lt;/a>.&lt;/p>
&lt;p>As Security is such a central pillar of Flux, we are
&lt;a href="https://fluxcd.io/tags/security/">keen to write
about it&lt;/a> and tell you how you can benefit from all
the individual features and improvements we worked on, e.g. SBOMs,
CI Checks, Branch Protection, restricted pod security standard and
more. Since the beginning we worked hard to ensure that we ship code
that does what it needs to do, even when that means having to rewrite
parts of upstream dependencies.&lt;/p>
&lt;p>When we had our
&lt;a href="https://fluxcd.io/blog/2021/11/flux-security-audit/">first security audit last
year&lt;/a>, the results were quite
reassuring as most of the findings were quite small, with the exception
of a
&lt;a href="https://github.com/fluxcd/kustomize-controller/security/advisories/GHSA-35rf-v2jv-gfg7" target="_blank">RCE in
kustomize-controller&lt;/a>,
which speaks to the security improvements we have been investing on, and
how they are resulting in better development practices.&lt;/p>
&lt;p>Another recommendation from the auditors was to implement and follow a
stricter and more elaborate RFC process, which is
&lt;a href="https://github.com/fluxcd/flux2/tree/main/rfcs" target="_blank">what we
did&lt;/a>. They
also recommended we get in touch with other security teams or auditors
for getting feedback on a refined and more general multi-tenancy
proposal - which we also did as mentioned below.&lt;/p>
&lt;h2 id="whats-next-for-flux">What&amp;rsquo;s next for Flux&lt;/h2>
&lt;p>The way we shaped the Flux Roadmap for GA was&lt;/p>
&lt;ol>
&lt;li>Feature party with Flux Legacy&lt;/li>
&lt;li>Stable APIs (this was after the controller refactoring which
consolidated functionality in
&lt;a href="https://github.com/fluxcd/pkg" target="_blank">fluxcd/pkg&lt;/a>)&lt;/li>
&lt;li>Straightforward multi-tenancy implementation&lt;/li>
&lt;li>GA release&lt;/li>
&lt;/ol>
&lt;p>
&lt;a href="https://github.com/fluxcd/flux2/issues/2655" target="_blank">Here is the status
quo&lt;/a> regarding
multi-tenancy:&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>Flux2 supports multi-tenancy, and users have been using it in
production for&lt;/em> &lt;em>
&lt;a href="https://www.youtube.com/watch?v=F7B_TBcIyl8" target="_blank">some time
now&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;em>The documentation around the subject covers a&lt;/em> &lt;em>
&lt;a href="https://github.com/fluxcd/flux2-multi-tenancy" target="_blank">bootstrap
example&lt;/a>
to help users kick start their multi-tenancy deployments. And also how
to implement control plane isolation with the&lt;/em>
&lt;em>
&lt;a href="https://fluxcd.io/flux/installation/configuration/multitenancy/">multi-tenancy-lockdown&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;em>&lt;strong>What's next&lt;/strong>&lt;/em>&lt;/p>
&lt;p>&lt;em>In summary, the documentation needs expanding to better inform users
around the security risks of multi-tenancy and the recommended
deployment models for their specific isolation/security requirements.&lt;/em>&lt;/p>
&lt;p>&lt;em>There are proposed changes that would further improve Flux in
multi-tenancy environments, by for example enabling tenants to share
resources amongst themselves. Such changes must be progressed once the
security impact of such changes have been assessed.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>To help us get this right, we are engaging with the
&lt;a href="https://github.com/cncf/tag-security" target="_blank">CNCF TAG
Security&lt;/a>. This is
the upstream group where key contributors and experts of the CNCF
Landscape assemble and define security best practices across all the
individual Cloud Native projects. We are
&lt;a href="https://github.com/cncf/tag-security/issues/896" target="_blank">asking them for an
independent security
review&lt;/a>
and recommendations, particularly around multi-tenancy.&lt;/p>
&lt;p>If you want to join the conversation, we are all ears. Please refer to
the open RFC documents and have your say there. We definitely want to
get this right for everyone.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://github.com/fluxcd/flux2/pull/2086" target="_blank">RFC: Define Flux tenancy models #2086&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/fluxcd/flux2/pull/2092" target="_blank">RFC: Access control for cross-namespace source refs #2092&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/fluxcd/flux2/pull/2093" target="_blank">RFC: Flux Multi-Tenancy Mode #2093&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>In addition to that we are working hard to round up features, improve
their performance, security and overall stability.&lt;/p>
&lt;p>If you want to follow all the other GA related work, we explained
&lt;a href="https://fluxcd.io/blog/2022/04/march-update/#flux-maintainers-focus-project-board">how
to do that
here&lt;/a>
and if you would like to participate in any of the discussions,
&lt;a href="https://fluxcd.io/blog/2022/04/contributing-to-flux/">come
and find us&lt;/a>
on Slack or in our regular meetings. We are always looking forward to
growing Team Flux and the closer we get to GA, it&amp;rsquo;s getting even more
important to have all voices heard.&lt;/p></description></item><item><title>Blog: April 2022 update</title><link>https://fluxcd.io/blog/2022/05/april-2022-update/</link><pubDate>Tue, 03 May 2022 08:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/05/april-2022-update/</guid><description>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/03/february-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of May 2022 - let&amp;rsquo;s recap together what happened in
April - it has been a lot!&lt;/p>
&lt;p>&lt;strong>Update:&lt;/strong> Earlier versions of this post referred to the pre-KubeCon
Bug Bash. Unfortunately we had to cancel our participation.&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="latest-flux-release-series-is-029">Latest Flux release series is 0.29&lt;/h3>
&lt;p>This is the latest and greatest, but before we get into the list of
great features and improvements, let&amp;rsquo;s take a look at the breaking
changes beforehand:&lt;/p>
&lt;ul>
&lt;li>From this release on, the &lt;code>RUNTIME_NAMESPACE&lt;/code> environment variable is
no longer taken into account to configure the advertised HTTP/S
address of the storage. Instead,
&lt;a href="https://kubernetes.io/docs/tasks/inject-data-application/define-interdependent-environment-variables/#define-an-environment-dependent-variable-for-a-container" target="_blank">variable
substitution&lt;/a>
must be used, as described in
&lt;a href="https://github.com/fluxcd/flux2/releases#052" target="_blank">the changelog entry
for&lt;/a>
v0.5.2.&lt;/li>
&lt;li>Use of file-based &lt;code>KubeConfig&lt;/code> options are now permanently disabled
(e.g. &lt;code>TLSClientConfig.CAFile&lt;/code>, &lt;code>TLSClientConfig.KeyFile&lt;/code>,
&lt;code>TLSClientConfig.CertFile&lt;/code> and &lt;code>BearerTokenFile&lt;/code>). The drive behind
the change was to discourage insecure practices of mounting
Kubernetes tokens inside the controller&amp;rsquo;s container file system.&lt;/li>
&lt;li>Use of &lt;code>TLSClientConfig.Insecure&lt;/code> in &lt;code>KubeConfig&lt;/code> file is disabled by
default, but can be enabled at controller level with the flag
&lt;code>--insecure-kubeconfig-tls&lt;/code>.&lt;/li>
&lt;li>Use of &lt;code>ExecProvider&lt;/code> in &lt;code>KubeConfig&lt;/code> file is now disabled by default,
but can be enabled at controller level with the flag
&lt;code>--insecure-kubeconfig-exec&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>With that out of the way, here are the highlights of the release:&lt;/p>
&lt;h4 id="notification-improvements">Notification Improvements&lt;/h4>
&lt;p>A new notification is now emitted to identify recovery from failures. It
is triggered when a failed reconciliation is followed by a successful
one.&lt;/p>
&lt;h4 id="in-memory-cache-for-helmrepository">In-memory cache for HelmRepository&lt;/h4>
&lt;p>An opt-in in-memory cache for HelmRepository that addresses issues where
the index file is loaded and unmarshalled in concurrent reconciliation
resulting in a heavy memory footprint. It can be configured using the
flags: &lt;code>--helm-cache-max-size&lt;/code>, &lt;code>--helm-cache-ttl&lt;/code>,
&lt;code>--helm-cache-purge-interval&lt;/code>.&lt;/p>
&lt;h4 id="configurable-retention-of-source-artifacts">Configurable retention of Source Artifacts&lt;/h4>
&lt;p>Garbage Collection is enabled by default, and now its retention options
are configurable with the flags: &lt;code>--artifact-retention-ttl&lt;/code> (default:
60s) and &lt;code>--artifact-retention-records&lt;/code> (default: 2). They define the
minimum time to live and the maximum amount of artifacts to survive a
collection.&lt;/p>
&lt;h4 id="configurable-key-exchange-algorithms-for-ssh-connections">Configurable Key Exchange Algorithms for SSH connections&lt;/h4>
&lt;p>Using the flag &lt;code>--ssh-kex-algos&lt;/code>. Note this applies to the &lt;code>go-git&lt;/code>
&lt;code>gitImplementation&lt;/code> or the &lt;code>libgit2&lt;/code> &lt;code>gitImplementation&lt;/code> but only when Managed
Transport is being used.&lt;/p>
&lt;h4 id="configurable-exponential-back-off-retry-settings">Configurable Exponential Back-off retry settings&lt;/h4>
&lt;p>With the new flags: &lt;code>--min-retry-delay&lt;/code> (default: 750ms) and
&lt;code>--max-retry-delay&lt;/code> (default: 15min). Previously the defaults were set to
5ms and 1000s, which in some cases impaired the controller&amp;rsquo;s ability to
self-heal (e.g. retrying failing SSH connections).&lt;/p>
&lt;h4 id="experimental-managed-transport-for-libgit2-git-implementation">Experimental managed transport for libgit2 Git implementation&lt;/h4>
&lt;p>Now has self-healing capabilities, to recover from failure when
long-running connections become stale.&lt;/p>
&lt;h4 id="sops-refactored-and-optimized">SOPS refactored and optimized&lt;/h4>
&lt;p>Including various improvements and extended code coverage. Age
identities are now imported once and reused multiple times, optimizing
CPU and memory usage between decryption operations.&lt;/p>
&lt;h4 id="helm-chart-directory-loader-improvements">Helm chart directory loader improvements&lt;/h4>
&lt;p>Introduction of a secure directory loader which improves the handling of
Helm charts paths.&lt;/p>
&lt;p>For a more detailed list of changes in the series, please refer to the
change logs of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.0" target="_blank">0.29.0&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.1" target="_blank">0.29.1&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.2" target="_blank">0.29.2&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.3" target="_blank">0.29.3&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.4" target="_blank">0.29.4&lt;/a>,
and
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.29.5" target="_blank">0.29.5&lt;/a>.&lt;/p>
&lt;h3 id="flagger-1200">Flagger 1.20.0&lt;/h3>
&lt;p>This release comes with improvements to the AppMesh, Contour and Istio
integrations.&lt;/p>
&lt;h4 id="improvements">Improvements&lt;/h4>
&lt;ul>
&lt;li>AppMesh: Add annotation to enable Envoy access logs
&lt;a href="https://github.com/fluxcd/flagger/pull/1156" target="_blank">#1156&lt;/a>&lt;/li>
&lt;li>Contour: Update the httproxy API and enable &lt;code>RetryOn&lt;/code>
&lt;a href="https://github.com/fluxcd/flagger/pull/1164" target="_blank">#1164&lt;/a>&lt;/li>
&lt;li>Istio: Add destination port when port discovery and delegation are
true
&lt;a href="https://github.com/fluxcd/flagger/pull/1145" target="_blank">#1145&lt;/a>&lt;/li>
&lt;li>Metrics: Add canary analysis result as Prometheus metrics
&lt;a href="https://github.com/fluxcd/flagger/pull/1148" target="_blank">#1148&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="fixes">Fixes&lt;/h4>
&lt;ul>
&lt;li>Fix canary rollback behaviour
&lt;a href="https://github.com/fluxcd/flagger/pull/1171" target="_blank">#1171&lt;/a>&lt;/li>
&lt;li>Shorten the metric analysis cycle after confirm promotion gate is
open
&lt;a href="https://github.com/fluxcd/flagger/pull/1139" target="_blank">#1139&lt;/a>&lt;/li>
&lt;li>Fix unit of time in the Istio Grafana dashboard
&lt;a href="https://github.com/fluxcd/flagger/pull/1162" target="_blank">#1162&lt;/a>&lt;/li>
&lt;li>Fix the service toggle condition in the podinfo helm chart
&lt;a href="https://github.com/fluxcd/flagger/pull/1146" target="_blank">#1146&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>In the latest release, we have added checkboxes to enable Flux Subsystem
in the Argo CD UI. We also have a
&lt;a href="https://flux-subsystem-argo.github.io/website/tutorials/terraform/" target="_blank">tutorial to use TF-controller with
Flux Subsystem for
Argo&lt;/a>.
With this you have an alternative option to Crossplane to manage
infrastructure.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>We have released TF-controller v0.9.4 which is a bug-fix release. We
also added &lt;strong>cloud cost estimation&lt;/strong> to our road map. Please feel free
to give us feedback on how you would like this feature to be:&lt;/p>
&lt;ul>
&lt;li>Issues here:
&lt;a href="https://github.com/weaveworks/tf-controller/issues" target="_blank">https://github.com/weaveworks/tf-controller/issues&lt;/a>, and&lt;/li>
&lt;li>Discussions here:
&lt;a href="https://github.com/weaveworks/tf-controller/discussions" target="_blank">https://github.com/weaveworks/tf-controller/discussions&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="weave-gitops">Weave GitOps&lt;/h4>
&lt;p>Weave GitOps is a powerful, open source extension to Flux, which
provides insights into your deployments, and makes continuous delivery
with GitOps easier to adopt and scale across your teams. You can easily
install alongside an existing Flux setup, adding (or removing) Weave
GitOps as a standard Helm resource.&lt;/p>
&lt;p>
&lt;a href="https://github.com/weaveworks/weave-gitops/releases/tag/v0.8.0" target="_blank">The v0.8.0 release&lt;/a>
brings multi-namespace querying so you can see objects from across your
cluster in the Web UI, several UI enhancements and bug fixes, as well as
supporting the Source &lt;code>v1beta2&lt;/code> API - this breaking change means we now
require Flux v0.29.0 or later.&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
April here are a couple of talks we would like to highlight:&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/V1AOVwzmIKE?t=272" target="_blank">Managing Thousands of Clusters and Their Workloads with Max Jonas Werner&lt;/a>
D2iQ uses Flux to automatically enable this experience in its products. Join Max for this hands-on session on multi-cluster management using GitOps.&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/r_vKf5l1D1M" target="_blank">CNCF on-demand webinar: Flux for Helm Users with Scott Rigby&lt;/a>
Scott Rigby, Flux &amp;amp; Helm Maintainer, takes you on a tour of Flux’s Helm Controller, shares the additional benefits Flux adds to Helm and then walks through a live demo of how to manage helm releases using Flux.&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/0bwM40Ye5bQ?t=2" target="_blank">Women In GitOps Panel&lt;/a>
We celebrated international women’s day, GitOps Style. This event gathered female role models who innovate, challenge and embrace the world of GitOps. Inspirational women who have achieved great success within the sector and will share stories of their journey and explore the question why is it important to “Get on GitOps.”&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/etbvuV9EjLc?t=284" target="_blank">Securing GitOps Debug Access with Flux, Pinniped, Dex, &amp;amp; GitHub with Leigh Capili&lt;/a>
In this live demo, Leigh will show how the incredibly flexible, open-source combo of Flux, Pinniped, and Dex can empower a team to leave a traceable solution during a production incident. He explores effective team debugging habits with Kubernetes and git.&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/-3K74I7t7CQ?t=447" target="_blank">Security: The Value of SBOMs with Dan Luhring (Anchore)&lt;/a>
During this session, Dan Luhring, OSS Engineering Manager at Anchore, dives into SBOMs - what they are, why you need them, some common use cases and how to get your pipeline ready for SBOM generation and verification using the Flux SBOM as an example.&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/arZVt-3HHP0" target="_blank">OpenSource 101: WTF is GitOps &amp;amp; Why Should You Care? with Priyanka Ravi&lt;/a>
Pinky shares from personal experience why GitOps has been an essential part of achieving a best-in-class delivery and platform team, gives a brief overview of definitions, CNCF-based principles, and Flux’s capabilities: multi-tenancy, multi-cluster, (multi-everything!), for apps and infra, and more.&lt;/p>
&lt;p>
&lt;a href="https://youtu.be/73kOXNTrNVU?t=431" target="_blank">From Zero to GitOps Heroes with Mae Large, Russ Parmer, &amp;amp; Priyanka Ravi&lt;/a>
During this session Mae, Pinky, &amp;amp; Riss share key learnings from their early days of assessing GitOps as an idea and methodology to how it evolved into the de facto automated software change process in less than 1 year.&lt;/p>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
May - tune in to learn more about Flux and GitOps best practices, get
to know the team and join our community.&lt;/p>
&lt;h4 id="flux-bug-scrub">Flux Bug Scrub&lt;/h4>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/fbhnssydchbgb/" target="_blank">May 04 at 12:00 UTC, 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/ndjjssydchbqb/" target="_blank">May 12 at 10am PT / 1pm
ET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/fbhnssydchbxb/" target="_blank">May 18 at 12:00 UTC/ 14:00
CEST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/ndjjssydchbjc/" target="_blank">May 26 at 10am PT / 1pm
ET&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h4 id="kubecon--cloudnativecon-europe-2022-coming-up">KubeCon / CloudNativeCon Europe 2022 coming up&lt;/h4>
&lt;p>As every other project in the Cloud Natice space, we are very busy
preparing everything for
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank">KubeCon / CloudNativeCon Europe
2022&lt;/a>,
which is going to be 16-20 May 2022 in Valencia, Spain (and virtual of
course!).&lt;/p>
&lt;p>We will post a separate announcement as soon as everything is confirmed,
but we already want to inform you about what&amp;rsquo;s likely to happen, so you
can plan accordingly or collaborate with us!&lt;/p>
&lt;h4 id="the-bug-bash">The Bug Bash&lt;/h4>
&lt;p>Unfortunately we will not be participating in the Bug Bash this KubeCon!&lt;/p>
&lt;p>Despite earlier announcements claiming we would do this, we felt we
could not do this well enough. If you were looking forward to this,
we are sorry - but you know what: we still have the weekly Bug Scrub! Your
weekly one-on-one mentoring to learn the ropes of working on Flux!&lt;/p>
&lt;h4 id="monday-16-may">Monday, 16 May&lt;/h4>
&lt;p>13:00 - 17:00 (Room 2H - Event Center): Flux Project Meeting: We will
kick off the Flux get-togethers and festivities with an in-person
meeting for all Flux users, contributors, maintainers and generally
interested folks. This will be an opportunity to get to know each other,
have a chat, see what people&amp;rsquo;s interests are and to potentially start
contributing. (
&lt;a href="https://linuxfoundation.surveymonkey.com/r/WYGBGPZ" target="_blank">Sign up
here&lt;/a>.)
Contact people on the ground are: Scott Rigby, Somtochi Onyekwere and
Stefan Prodan.&lt;/p>
&lt;blockquote>
&lt;p>Join Flux Maintainers Stefan Prodan, Somtochi Onyekwere &amp;amp; Scott Rigby
for this Flux Project Meeting in-person at KubeCon EU on Monday, May
16 from 1pm - 5pm CEST&lt;/p>
&lt;p>Click here to register
(
&lt;a href="https://linuxfoundation.surveymonkey.com/r/WYGBGPZ" target="_blank">here&lt;/a>)
for the Flux Project Meeting. Please note that you must be a KubeCon +
CloudNativeCon Europe
(
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank">here&lt;/a>)
registrant in order to attend this meeting.&lt;/p>
&lt;p>Details Flux Project Meeting Monday, May 16, 13:00 - 17:00 CEST Room
2H | Event Center&lt;/p>
&lt;p>Space is limited &lt;em>Please note: we will not have any live streaming,
recordings, or any virtual component available for this meeting.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;h4 id="tuesday-17-may---gitopsconhttpseventslinuxfoundationorggitopscon-europeprogramschedule">Tuesday 17 May -
&lt;a href="https://events.linuxfoundation.org/gitopscon-europe/program/schedule/" target="_blank">GitOpsCon&lt;/a>&lt;/h4>
&lt;p>Lots and lots of talks about GitOps in general and Flux in particular,
here&amp;rsquo;s a short selection of what to look forward to:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://sched.co/zrpk" target="_blank">What is GitOps and How to Get It Right - Dan Garfield (Codefresh);
Chris Short (AWS) &amp;amp; Scott Rigby
(Weaveworks)&lt;/a> (9:00 - 9:35)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrq5" target="_blank">Hiding in Plain Sight - How Flux Decrypts Secrets -
Somtochi Onyekwere (Weaveworks)&lt;/a>
(11:05 - 11:15)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqK" target="_blank">Taming the Thundering Gitops Herd with Update Policies - Joaquim
Rocha &amp;amp; Iago López Galeiras (Microsoft)&lt;/a>
(11:35 - 11:45)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqW" target="_blank">GitOps and Progressive Delivery with Flagger, Istio and Flux -
Marco Amador (Anova)&lt;/a> (13:20-13:30)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqf" target="_blank">Creating A Landlord for Multi-tenant K8s Using Flux, Gatekeeper,
Helm, and Friends - Michael Irwin (Docker)&lt;/a>
(13:35-14:05)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqi" target="_blank">GitOps, A Slightly Realistic Situation on Kubernetes with Flux -
Laurent Grangeau (Google) &amp;amp; Ludovic Piot
(theGarageBandOfIT)&lt;/a> (14:10 - 14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrql" target="_blank">Solving Environment Promotion with Flux - Sam Tavakoli &amp;amp; Adelina
Simion (Form3)&lt;/a> (14:10 - 14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqu" target="_blank">Managing Thousands of Clusters and Their Workloads with Flux - Max
Jonas Werner (D2iQ)&lt;/a> (14:55 - 15:25)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqx" target="_blank">Crossing the Divide: How GitOps Brought AppDev &amp;amp; Platform Teams
Together! - Russ Palmer (State Farm) &amp;amp; Priyanka &amp;lsquo;Pinky&amp;rsquo; Ravi
(Weaveworks)&lt;/a> (15.30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrr0" target="_blank">GitOps Everything!? We Sure Can!, AppsFlyer&lt;/a>
(15:30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/ytwg" target="_blank">Lightning Talk: Addressing Log4Shell with Software Supply Chains -
Duane DeCapite (VMware)&lt;/a>
(18:04 - 18:09)&lt;/li>
&lt;/ul>
&lt;h4 id="wednesday-18-may---friday-may-20---kubeconhttpskccnceu2022schedcomiframeno">Wednesday 18 May - Friday May 20 -
&lt;a href="https://kccnceu2022.sched.com/?iframe=no" target="_blank">KubeCon&lt;/a>&lt;/h4>
&lt;p>Over these three days we are going to be at the Flux booth (both
virtually and on the ground), so come over for a chat. We are planning
loads of talks, demos and ample time to have a chat, get to know
everyone, ask questions and have great new ideas together!&lt;/p>
&lt;p>On top of that, here is a list of talks, workshops and sessions during
those days:&lt;/p>
&lt;ul>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytlV" target="_blank">Flux Security Deep Dive - Stefan Prodan
(Weaveworks)&lt;/a> (11:55 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytkj" target="_blank">Intro to Kubernetes, GitOps, and Observability Hands-On
Tutorial - Johee Chung (Microsoft) &amp;amp; Tiffany Wang
(Weaveworks)&lt;/a> (11:00 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://weaveworks.zoom.us/j/85821738864?pwd=cjk4QjRabEpUVlRlcFBqMm9UZ2xNZz09" target="_blank">Flux Bug Scrub - Kingdon
Barrett&lt;/a>
(13:00 - 14:00)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytmW" target="_blank">A New Generation of Trusted GitOps for Mixed K8s and
Non-K8s End Users - Alexis &amp;amp; Vasu Chandrasekhara
(SAP)&lt;/a> (15:25 - 16:00)&lt;/li>
&lt;li>Thu 19:
&lt;a href="https://sched.co/yto4" target="_blank">GitOps to Automate the Setup, Management and Extension a
K8s Cluster - Kim Schlesinger (DigitalOcean)&lt;/a>
(11:00 - 12:30)&lt;/li>
&lt;li>Thu 19: Flux Project Office Hour - Paulo Gomes (Weaveworks)
(13:30 - 14:15)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://sched.co/ytrM" target="_blank">Observing Fastly&amp;rsquo;s Network at Scale Thanks to K8s and the
Strimzi Operator - Fernando Crespo &amp;amp; Daniel Caballero,
(Fastly)&lt;/a> (11:00 - 11:35)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://kccnceu2022.sched.com/#" target="_blank">Simplifying Service Mesh Operations with Flux and
Flagger - Mitch Connors (Google) &amp;amp;
Stefan Prodan (Weaveworks)&lt;/a>
(14:55 - 15:30)&lt;/li>
&lt;/ul>
&lt;p>Please note: all of the above might be subject to change. Please
double-check the schedule beforehand. Please reach out to Vanessa
Abankwah or Daniel Holbach on Slack if you have questions or would like
to participate in any of the above.&lt;/p>
&lt;p>We very much look forward to seeing you there!&lt;/p>
&lt;h3 id="gitops-days-2022">GitOps Days 2022&lt;/h3>
&lt;p>GitOps Days 2022 is a free 2-day online event on June 8-9, 2022.&lt;/p>
&lt;p>This is &lt;strong>THE&lt;/strong> event for your GitOps journey! Getting started? Taking
GitOps to the next level? We&amp;rsquo;ll cover all of the steps for your success!&lt;/p>
&lt;p>The event will run from &lt;strong>9:00 am PT to ~3:00 pm PT&lt;/strong> each day as a free
online event.&lt;/p>
&lt;p>✨✨
&lt;a href="https://youtube.com/playlist?list=PL9lTuCFNLaD0NVkR17tno4X6BkxsbZZfr" target="_blank">Register
now&lt;/a> to
reserve your spot to receive updates to the schedule and speakers. ✨✨&lt;/p>
&lt;p>&lt;em>Join the conversation!&lt;/em> Chat with the speakers and other attendees!
Invite yourself at
&lt;a href="https://weave-community.slack.com/join/shared_invite/zt-yqwtav03-QPo7W4Qoi1pL6W8UQYk2yQ" target="_blank">https://slack.weave.works&lt;/a>
and hang out with us at
&lt;a href="https://bit.ly/GitOpsDays_Slack" target="_blank">#gitopsdays&lt;/a>&lt;/p>
&lt;p>What to expect?&lt;/p>
&lt;ul>
&lt;li>Talks and tutorials on how to get started with Kubernetes and GitOps&lt;/li>
&lt;li>Talks from Flux users about their use cases&lt;/li>
&lt;li>How to do GitOps securely&lt;/li>
&lt;li>Platforms that offer GitOps: Microsoft Arc Kubernetes, AWS Anywhere,
Weave GitOps, D2iQ Kubernetes Platform, and more! all using Flux!&lt;/li>
&lt;li>Flux in the CNCF and the GitOps Ecosystem&lt;/li>
&lt;li>Flux support and Integrations: Flux + Helm, Terraform, HashiCorp Vault,
Jenkins, OpenShift, Visual Studio Code, and much much more!&lt;/li>
&lt;li>Technical deep dives with Flux maintainers&lt;/li>
&lt;li>Music from DJ Desired State 🎶&lt;/li>
&lt;/ul>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;h4 id="manage-kubernetes-secrets-for-flux-with-hashicorp-vault">Manage Kubernetes Secrets for Flux with HashiCorp Vault&lt;/h4>
&lt;p>Rosemary Wang from HashiCorp wrote a great blog post about how to
&lt;a href="https://www.hashicorp.com/blog/manage-kubernetes-secrets-for-flux-with-hashicorp-vault" target="_blank">manage Kubernetes Secrets for Flux with HashiCorp Vault&lt;/a>. The how-to
is nicely written with a lot of detail and will take you through the steps
to configure the Secrets Store CSI driver with HashiCorp Vault to securely
inject secrets into Flux or other GitOps tools on Kubernetes.&lt;/p>
&lt;p>We are looking forward to more collaboration together!&lt;/p>
&lt;h4 id="full-gitops-tutorial-getting-started-with-flux">Full GitOps Tutorial: Getting started with Flux&lt;/h4>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/5u45lXmhgxA" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>This video is great for everyone who gets started, but also everyone who enjoys a story well-told.&lt;/p>
&lt;p>In this video, Anais Urlichs covers&lt;/p>
&lt;ul>
&lt;li>What is GitOps and how does Flux work&lt;/li>
&lt;li>Flux installation&lt;/li>
&lt;li>Managing Helm Charts with Flux&lt;/li>
&lt;li>Managing Kubernetes Manifests with Flux&lt;/li>
&lt;li>Setting up alerts with Flux&lt;/li>
&lt;/ul>
&lt;p>Anais also sat down wrote this all up in
&lt;a href="https://anaisurl.com/full-tutorial-getting-started-with-flux-cd/" target="_blank">blog-post from&lt;/a>.&lt;/p>
&lt;h4 id="how-to-apply-gitops-to-everything-using-crossplane-and-flux">How To Apply GitOps To Everything Using Crossplane And Flux&lt;/h4>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/dunU2ABitMA" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>Viktor Farcic has done it again - check out this great video where he
shows how to leverage the extensibility of Crossplane and Flux features
to apply GitOps not only to applications running in Kubernetes but to
everything (infrastructure, services, applications running anywhere, etc.)&lt;/p>
&lt;h4 id="encrypted-gitops-secrets-with-flux-and-age">Encrypted gitops secrets with flux and age&lt;/h4>
&lt;p>Major Hayden wrote a nice article about how to get
&lt;a href="https://major.io/2022/04/19/encrypted-gitops-secrets-with-flux-and-age" target="_blank">encrypted gitops secrets
with flux and age&lt;/a>
right.&lt;/p>
&lt;p>Here you will learn how to store encrypted kubernetes secrets safely in
your GitOps repository with easy-to-use &lt;code>age&lt;/code> encryption. 🔐&lt;/p>
&lt;h4 id="basic-authentication-with-traefik-on-kubernetes">Basic authentication with Traefik on kubernetes&lt;/h4>
&lt;p>Another post from Major Hayden! This time about
&lt;a href="https://major.io/2022/04/20/basic-auth-with-traefik-on-kubernetes/" target="_blank">Basic authentication
with Traefik on kubernetes&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s nicely detailed and will take you through all the steps to
keep prying eyes away from your sites behind Traefik with basic authentication. 🛃&lt;/p>
&lt;h4 id="automated-canary-deployments-with-rancher-fleet-and-flagger">Automated Canary Deployments with Rancher Fleet and Flagger&lt;/h4>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/2x5q89YLdc0" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>In this video, Lukonde Mwila will demonstrate how to execute automated
canary deployments with Rancher Fleet and Flagger.&lt;/p>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://www.stackspin.net/" target="_blank">Stackspin&lt;/a>,
&lt;a href="https://www.maersk.com/" target="_blank">Maersk&lt;/a> and
&lt;a href="https://www.rungway.com/" target="_blank">Rungway&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used everywhere.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently.&lt;/p>
&lt;ul>
&lt;li>If you always wanted to join Team Flux and weren&amp;rsquo;t quite sure how,
please read our blog post
&lt;a href="https://fluxcd.io/blog/2022/04/contributing-to-flux/">Contributing to
Flux&lt;/a>
and say Hi on Slack!&lt;/li>
&lt;li>Many mobile UI fixes!&lt;/li>
&lt;li>Add
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">flux-subsystem-argo/flamingo&lt;/a>
and
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">weaveworks/vscode-gitops-tools&lt;/a>
to the Flux Ecosystem page.&lt;/li>
&lt;li>New videos under
&lt;a href="https://fluxcd.io/resources/">Flux Resources&lt;/a>! 😍&lt;/li>
&lt;li>Various docs fixes.&lt;/li>
&lt;li>And here is a big one: we moved all docs from
&lt;a href="https://flagger.app" target="_blank">https://flagger.app&lt;/a> into
&lt;a href="https://fluxcd.io/flagger" target="_blank">https://fluxcd.io/flagger&lt;/a> - this is part of a bigger move to subsume all
of our documentation and web-presence into one place, so we won&amp;rsquo;t
have to maintain too many pieces of infrastructure.&lt;br>
This has been on our to-do list since Flux became a CNCF
Incubating project. Now that we are going for Graduation, we
finally got around to doing it.&lt;/li>
&lt;/ul>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Ihor
Sychevskyi, Kingdon Barrett, Stefan Prodan, Endre Czirbesz, Maarten de
Waard and Patrick Rodies.&lt;/p>
&lt;p>In particular we would like to thank Ihor Sychevskyi who recently took
on fixing small UI glitches all over the place - especially on mobile
the site should work a lot better now!&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we put together, here we want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/">other
chat systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-05-05 or 2022-05-11.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF
Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning
discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to working with you.&lt;/p></description></item><item><title>Blog: Contributing to Flux</title><link>https://fluxcd.io/blog/2022/04/contributing-to-flux/</link><pubDate>Wed, 13 Apr 2022 14:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/04/contributing-to-flux/</guid><description>
&lt;h2 id="-our-community-is-growing">📈 Our Community is growing&lt;/h2>
&lt;p>We are very pleased to see that our community is growing, whichever
metric you apply. Number of members in Slack or mailing list, newly
added
&lt;a href="https://fluxcd.io/adopters/">adopters&lt;/a> or projects in our
&lt;a href="https://fluxcd.io/ecosystem/">ecosystem&lt;/a> - all numbers are going up. Even the length
of our
&lt;a href="https://fluxcd.io/tags/monthly-update/">monthly updates&lt;/a> is growing
every month.&lt;/p>
&lt;p>As many asked in the past months how to get involved in the Flux
community, let&amp;rsquo;s walk you through some steps to join Team Flux!&lt;/p>
&lt;p>&lt;strong>Update:&lt;/strong> Earlier versions of this post referred to the pre-KubeCon
Bug Bash. Unfortunately we had to cancel our participation.&lt;/p>
&lt;h2 id="first-things-first">First things first&lt;/h2>
&lt;p>The first thing to do is get in touch with us! The
&lt;a href="https://fluxcd.io/community/#communication">communication
section&lt;/a> on our
website lists all the ways, but let&amp;rsquo;s drill into them in more detail.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>A good way to reach us and talk to us in real-time is on CNCF Slack.
Get an
&lt;a href="https://slack.cncf.io/" target="_blank">invite&lt;/a> here, then
proceed to the #flux channel.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We have public meetings on a weekly basis to talk about upcoming
work and direction of the project. They are open to anyone and we
very much want to welcome you to drop by, say Hi and introduce
yourself. Here are
&lt;a href="https://fluxcd.io/community/#meetings">the
instructions&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>To generally stay up to date, you also might want to check out
&lt;a href="https://fluxcd.io/blog/">our
blog&lt;/a>,
&lt;a href="https://twitter.com/fluxcd" target="_blank">our Twitter&lt;/a> and/or
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux group on LinkedIn&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Please say Hi, let us know what you are interested in and how we can
help you get started. From hereon it depends on what you would like to
do. Let&amp;rsquo;s take a look at different ways to get involved.&lt;/p>
&lt;h2 id="interacting-with-github">Interacting with GitHub&lt;/h2>
&lt;p>All code for the Flux project is available under the
&lt;a href="https://github.com/fluxcd" target="_blank">fluxcd
organisation&lt;/a> in GitHub. So if
you are interested in contributing to Flux, it is a good idea to learn
how things are organised and potentially get involved with responding to
GitHub issues.&lt;/p>
&lt;h3 id="the-bug-scrub">The Bug Scrub&lt;/h3>
&lt;p>For 9 months now, Kingdon Barrett has been organising the
&lt;a href="https://fluxcd.io/blog/2021/06/flux-bug-scrub-announce/">Flux Bug
Scrub&lt;/a>:&lt;/p>
&lt;p>For us, a great way to get started, is to learn more about Flux through
direct experience, when e.g. trying to reproduce issues reported by
other Flux users, and the general business of chopping wood and carrying
water.&lt;/p>
&lt;p>Each week we will have one or more contributors with triage access in
attendance, and attempt to review each issue in the target group. (The
targets will vary by week, or by event date.) A key goal is to figure
out if a given issue can be reproduced, and report our findings. Some
issues don't provide enough info to get us all the way to reproduction,
so we may ask more questions and wait for the submitter to respond.&lt;/p>
&lt;p>The great thing about this is: we run this on a weekly basis, so every
week you have the opportunity to learn from experienced Flux maintainers
in a friendly setting, so all you need to do is check
&lt;a href="https://fluxcd.io/#calendar">our
calendar&lt;/a> and turn up.&lt;/p>
&lt;h3 id="the-bug-bash">The Bug Bash&lt;/h3>
&lt;p>Unfortunately we will not be participating in the Bug Bash this KubeCon!&lt;/p>
&lt;p>Despite earlier announcements claiming we would do this, we felt we
could not do this well enough. If you were looking forward to this,
we are sorry - but you know what: we still have the weekly Bug Scrub! Your
weekly one-on-one mentoring to learn the ropes of working on Flux!&lt;/p>
&lt;h2 id="participating-in-flux-development">Participating in Flux Development&lt;/h2>
&lt;p>If you are interested in Flux development, great! We are always looking
for new people to get started. Come and talk to us on Slack and in our
meetings as suggested above - that makes collaboration usually a lot
easier.&lt;/p>
&lt;p>All of Flux Development is happening in the open, the priorities for the
next releases
&lt;a href="https://fluxcd.io/blog/2022/04/march-update/#flux-maintainers-focus-project-board">are documented
publicly&lt;/a>
and we
&lt;a href="https://github.com/search?q=org%3Afluxcd&amp;#43;label%3A%22good&amp;#43;first&amp;#43;issue%22&amp;#43;state%3Aopen&amp;amp;state=open&amp;amp;type=Issues" target="_blank">continuously tag issues as &amp;ldquo;good first
issues&amp;rdquo;&lt;/a>
if you are looking for suggestions.&lt;/p>
&lt;p>Our
&lt;a href="https://fluxcd.io/contributing/flux/">contributor docs&lt;/a> will
likely be helpful as well!&lt;/p>
&lt;p>If you are interested in Security, you might have seen how much we have
done to
&lt;a href="https://fluxcd.io/tags/security/">improve security lately&lt;/a>. We are very
interested in doing more - and are always open to new ideas!&lt;/p>
&lt;h2 id="meeting-in-person">Meeting in person&lt;/h2>
&lt;p>As stated above KubeCon / CloudNativeCon Europe 2022 is just around the
corner. It is going to happen in Valencia, Spain 16 - 20 May and we will
have many Flux maintainers and contributors at our booth and presenting
talks and be available to talk to in other events. This is your chance
to meet, have a chat and get to know the team.&lt;/p>
&lt;p>There will be a separate announcement, but here already is a short
summary of what to look forward to.&lt;/p>
&lt;h3 id="monday-16-may">Monday, 16 May&lt;/h3>
&lt;p>13:00 - 17:00 (Room 2H - Event Center): Flux Project Meeting: We will
kick off the Flux get-togethers and festivities with an in-person
meeting for all Flux users, contributors, maintainers and generally
interested folks. This will be an opportunity to get to know each other,
have a chat, see what people&amp;rsquo;s interests are and to potentially start
contributing. (
&lt;a href="https://linuxfoundation.surveymonkey.com/r/WYGBGPZ" target="_blank">Sign up
here&lt;/a>.)
Contact people on the ground are: Somtochi Onyekwere and Scott Rigby.&lt;/p>
&lt;h3 id="tuesday-17-may---gitopsconhttpseventslinuxfoundationorggitopscon-europeprogramschedule">Tuesday 17 May -
&lt;a href="https://events.linuxfoundation.org/gitopscon-europe/program/schedule/" target="_blank">GitOpsCon&lt;/a>&lt;/h3>
&lt;p>Lots and lots of talks about GitOps in general and Flux in particular,
here&amp;rsquo;s a short selection of what to look forward to:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://sched.co/zrpk" target="_blank">What is GitOps and How to Get It Right - Dan Garfield (Codefresh);
Chris Short (AWS) &amp;amp; Scott Rigby
(Weaveworks)&lt;/a> (9:00 - 9:35)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrq5" target="_blank">Hiding in Plain Sight - How Flux Decrypts Secrets - Somtochi
Onyekwere (Weaveworks)&lt;/a>
(11:05 - 11:15)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqK" target="_blank">Taming the Thundering Gitops Herd with Update Policies - Joaquim
Rocha &amp;amp; Iago López Galeiras
(Microsoft)&lt;/a> (11:35 - 11:45)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqW" target="_blank">GitOps and Progressive Delivery with Flagger, Istio and Flux -
Marco Amador (Anova)&lt;/a>
(13:20-13:30)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqf" target="_blank">Creating A Landlord for Multi-tenant K8s Using Flux, Gatekeeper,
Helm, and Friends - Michael Irwin
(Docker)&lt;/a> (13:35-14:05)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqi" target="_blank">GitOps, A Slightly Realistic Situation on Kubernetes with Flux -
Laurent Grangeau (Google) &amp;amp; Ludovic Piot
(theGarageBandOfIT)&lt;/a> (14:10 -
14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrql" target="_blank">Solving Environment Promotion with Flux - Sam Tavakoli &amp;amp; Adelina
Simion (Form3)&lt;/a> (14:10 -
14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqu" target="_blank">Managing Thousands of Clusters and Their Workloads with Flux - Max
Jonas Werner (D2iQ)&lt;/a> (14:55 -
15:25)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqx" target="_blank">Crossing the Divide: How GitOps Brought AppDev &amp;amp; Platform Teams
Together! - Russ Palmer (State Farm) &amp;amp; Priyanka &amp;lsquo;Pinky&amp;rsquo; Ravi
(Weaveworks)&lt;/a> (15.30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrr0" target="_blank">GitOps Everything!? We Sure Can!,
AppsFlyer&lt;/a> (15:30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/ytwg" target="_blank">Lightning Talk: Addressing Log4Shell with Software Supply Chains -
Duane DeCapite (VMware)&lt;/a>
(18:04 - 18:09)&lt;/li>
&lt;/ul>
&lt;h4 id="wednesday-18-may---friday-may-20---kubeconhttpskccnceu2022schedcomiframeno">Wednesday 18 May - Friday May 20 -
&lt;a href="https://kccnceu2022.sched.com/?iframe=no" target="_blank">KubeCon&lt;/a>&lt;/h4>
&lt;p>Over these three days we are going to be at the Flux booth (both
virtually and on the ground), so come over for a chat. We are planning
loads of talks, demos and ample time to have a chat, get to know
everyone, ask questions and have great new ideas together!&lt;/p>
&lt;p>On top of that, here is a list of talks, workshops and sessions during
those days:&lt;/p>
&lt;ul>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytlV" target="_blank">Flux Security Deep Dive - Stefan Prodan
(Weaveworks)&lt;/a> (11:55 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytkj" target="_blank">Intro to Kubernetes, GitOps, and Observability Hands-On
Tutorial - Johee Chung (Microsoft) &amp;amp; Tiffany Wang
(Weaveworks)&lt;/a> (11:00 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytmW" target="_blank">A New Generation of Trusted GitOps for Mixed K8s and
Non-K8s End Users - Alexis &amp;amp; Vasu Chandrasekhara
(SAP)&lt;/a> (15:25 - 16:00)&lt;/li>
&lt;li>Thu 19:
&lt;a href="https://sched.co/yto4" target="_blank">GitOps to Automate the Setup, Management and Extension a
K8s Cluster - Kim Schlesinger
(DigitalOcean)&lt;/a> (11:00 -
12:30)&lt;/li>
&lt;li>Thu 19: Flux Project Office Hour - Paulo Gomes (Weaveworks) (13:30 -
14:15)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://sched.co/ytrM" target="_blank">Observing Fastly&amp;rsquo;s Network at Scale Thanks to K8s and the
Strimzi Operator - Fernando Crespo &amp;amp; Daniel Caballero,
(Fastly)&lt;/a> (11:00 - 11:35)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://kccnceu2022.sched.com/#" target="_blank">Simplifying Service Mesh Operations with Flux and
Flagger - Mitch Connors (Google) &amp;amp; Stefan Prodan
(Weaveworks)&lt;/a>
(14:55 - 15:30)&lt;/li>
&lt;/ul>
&lt;p>If you can&amp;rsquo;t make it to KubeCon in person, we&amp;rsquo;ve got you covered as
well. In addition to all of this, we are going to have a virtual booth
with talks - will announce the schedule very soon.&lt;/p>
&lt;h2 id="putting-flux-to-the-test">Putting Flux to the Test&lt;/h2>
&lt;p>If you have already gathered some experience with Flux, you should be in
a great position to help us further and move the project forward a lot.
The term &amp;ldquo;Testing&amp;rdquo; might sound a bit dull to you, but there&amp;rsquo;s a lot that
falls into this category, which is super important to us. You could for
example:&lt;/p>
&lt;ul>
&lt;li>verify bugs and make minimal test cases to help fix those issues&lt;/li>
&lt;li>refine and expand on the existing unit and end-to-end tests&lt;/li>
&lt;li>try Flux in new environments and figure out if it works, and if not,
what it would take to make it work&lt;/li>
&lt;/ul>
&lt;p>As you can gather by now already - we&amp;rsquo;d love to join this effort!&lt;/p>
&lt;h2 id="flux-advocacy">Flux Advocacy&lt;/h2>
&lt;p>We all love GitOps and we have heard from many who use Flux that they
integrated it into their machinery and afterwards &amp;ldquo;forgot about it&amp;rdquo;
since it was &amp;ldquo;just doing its job&amp;rdquo;. That&amp;rsquo;s how we like it.&lt;/p>
&lt;p>Still it is important to let people know and educate communities around
you. So if you like blogging or giving talks, let us know and we can
help promote your work, or collaborate on events or content.&lt;/p>
&lt;h2 id="help-answering-questions">Help answering questions&lt;/h2>
&lt;p>We receive questions and requests from our user base on Slack, also in
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">Github Discussions&lt;/a>
and other places like e.g. Reddit as well. If you enjoy helping people,
come and join the team. We are a friendly bunch and it can be quite
satisfying to know you just helped somebody fix an issue, and
potentially provided an onramp for them to join the community.&lt;/p>
&lt;p>As part of this effort, we are always looking at improving our
documentation, FAQ and how-tos. So making some of the learnt knowledge
more generally available is of great use as well.&lt;/p>
&lt;h2 id="flux-documentation-and-website">Flux Documentation and Website&lt;/h2>
&lt;p>
&lt;a href="https://fluxcd.io" target="_blank">https://fluxcd.io&lt;/a> for many is the
first impression of the project and documentation and blog posts the
next interactions. We really want to make the project shine there, so if
you have a knack for writing and/or organising content, come and talk to
us. Web wizards are very welcome too! 💖&lt;/p>
&lt;p>If you check out some of our last monthly update posts, you will get an
idea of what we have been up to and how important it is to us.&lt;/p>
&lt;h2 id="sorry-got-no-time---but-still-want-to-support">Sorry, got no time - but still want to support&lt;/h2>
&lt;p>If you don&amp;rsquo;t have time for any of the above, that is entirely fine and
understandable.&lt;/p>
&lt;p>One good way how you can still help out, is by adding yourself to the
&lt;a href="https://fluxcd.io/adopters/">Flux Adopters page&lt;/a>, if your
organisation is using it. We love hearing from folks using Flux
projects. Contributors really love seeing where their software is being
used and it gives our community a good idea of how wide-spread adoption
really is.&lt;/p>
&lt;p>The same goes for the
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem
page&lt;/a>. If you integrate with
Flux, we want to hear from you!&lt;/p>
&lt;p>⭐ And please
&lt;a href="https://github.com/fluxcd/flux2/" target="_blank">star us on
GitHub&lt;/a> as well!&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>You might have heard the saying &amp;ldquo;It takes a village&amp;rdquo; before, and it is
the same for Team Flux. The success of our project depends on many
different people with many different skills. We love meeting you, we
love helping you get started - just reach out and we are looking forward
to meet you!&lt;/p>
&lt;h2 id="talk-to-us">Talk to us&lt;/h2>
&lt;p>We love feedback, questions and ideas, so please let us know your
personal use-cases today. Ask us if you have any questions and please&lt;/p>
&lt;ul>
&lt;li>join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev
meetings&lt;/a>&lt;/li>
&lt;li>find us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF
Slack&lt;/a>&lt;/li>
&lt;li>add yourself
&lt;a href="https://fluxcd.io/adopters/">as an
adopter&lt;/a> if you haven&amp;rsquo;t
already&lt;/li>
&lt;/ul>
&lt;p>See you around!&lt;/p></description></item><item><title>Blog: March 2022 Update</title><link>https://fluxcd.io/blog/2022/04/march-update/</link><pubDate>Mon, 04 Apr 2022 14:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/04/march-update/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/04/march-update/dev-focus-featured_hu56570f103673c09609753a11ebd46a46_283887_640x0_resize_box_3.png" width="640" height="494"/>
&lt;p>As the Flux family of projects and its communities are growing, we
strive to inform you each month about what has already landed, new
possibilities which are available for integration, and where you can get
involved. Read our
&lt;a href="https://fluxcd.io/blog/2022/03/february-update/">last update here&lt;/a>.&lt;/p>
&lt;p>It&amp;rsquo;s the beginning of April 2022 - let&amp;rsquo;s recap together what happened in
March - it has been a lot!&lt;/p>
&lt;p>&lt;strong>Update:&lt;/strong> Earlier versions of this post referred to the pre-KubeCon
Bug Bash. Unfortunately we had to cancel our participation.&lt;/p>
&lt;h2 id="news-in-the-flux-family">News in the Flux family&lt;/h2>
&lt;h3 id="source-api-getting-more-mature-in-flux-028">Source API getting more mature in Flux 0.28&lt;/h3>
&lt;p>The latest release of Flux is 0.28. One big focus was to graduate its
Source API to &lt;code>v1beta2&lt;/code>.&lt;/p>
&lt;p>🤖 To upgrade and fully benefit from this, please follow
&lt;a href="https://github.com/fluxcd/flux2/discussions/2567" target="_blank">the upgrade
instructions&lt;/a>.&lt;/p>
&lt;p>This work had been a long time in the making, partly because of a larger
refactoring effort, which we
&lt;a href="https://fluxcd.io/blog/2021/08/august-2021-update/#controller-refactoring-coming-up">had reported
about&lt;/a>
previously. The idea was to abstract reusable components and
functionality into the
&lt;a href="https://github.com/fluxcd/pkg" target="_blank">fluxcd/pkg
repository&lt;/a>. While this is
an ongoing effort, we are very happy with what we have learned so far
and are convinced that we will get better test coverage this way and are
providing external projects with a solid foundation to build on as well.&lt;/p>
&lt;p>In this release we added new features and improvements across the board,
here&amp;rsquo;s a quick list of our highlights:&lt;/p>
&lt;ul>
&lt;li>Add the Git commit message (first 50 characters) to the events and
alerts issued by &lt;code>GitRepository&lt;/code> sources.&lt;/li>
&lt;li>Improve performance for Helm repository index and chart download
operations.&lt;/li>
&lt;li>Improve observability for the Git, Helm and Bucket resources by
providing explicit status conditions which conform to the
Kubernetes &lt;code>kstatus&lt;/code> conventions.&lt;/li>
&lt;li>A new annotation
(
&lt;a href="http://kustomize.toolkit.fluxcd.io/ssa" target="_blank">kustomize.toolkit.fluxcd.io/ssa&lt;/a>:
merge) is available for allowing Flux to
&lt;a href="https://fluxcd.io/flux/faq/#how-to-patch-coredns-and-other-pre-installed-addons">patch cluster
addons&lt;/a>
such as CoreDNS.&lt;/li>
&lt;li>Add
&lt;a href="https://fluxcd.io/flux/components/source/buckets/#azure">Azure Blob Storage&lt;/a>
native support to Flux Bucket sources.&lt;/li>
&lt;li>Add support for decrypting secrets with SOPS and
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomization/#azure-key-vault-secret-entry">Azure Key
Vault&lt;/a>
on multi-tenant clusters.&lt;/li>
&lt;li>Retry the Git operations on conflict errors to allow running
bootstrap in-parallel for multiple clusters that target the same
repository.&lt;/li>
&lt;li>Add a new transport for &lt;code>libgit2&lt;/code> for improved reliability
(experimental). We
&lt;a href="https://fluxcd.io/blog/2022/03/flux-puts-the-git-into-gitops/#whats-next-in-git-things">wrote about this in our last blog
post&lt;/a>
as well.&lt;/li>
&lt;/ul>
&lt;h3 id="latest-flagger-release-comes-with-gateway-api-support">Latest Flagger release comes with Gateway API support&lt;/h3>
&lt;p>We
&lt;a href="https://fluxcd.io/blog/2022/03/flagger-adds-gateway-api-support/">blogged about this separately
already&lt;/a>
as it is such a big achievement for Team Flagger. With its recent 1.19
release, Flagger brings Gateway API support. This means native
Progressive Delivery for all providers supported by the Gateway API
project within Kubernetes. Be sure to check out the blog post to find
out how to integrate this into your setups.&lt;/p>
&lt;p>The Flux community is happy and proud that
&lt;a href="https://fluxcd.io/flagger/">Flagger&lt;/a> is part of our effort
to bring GitOps solutions to the world.&lt;/p>
&lt;h3 id="flux-maintainers-focus-project-board">Flux &amp;ldquo;Maintainers&amp;rsquo; Focus&amp;rdquo; Project Board&lt;/h3>
&lt;p>Being clear about our priorities in Flux development was always
important to us as a project. Discussing this regularly in weekly
meetings to be able to get everyone&amp;rsquo;s input was one measure to do this.
Updating
&lt;a href="https://fluxcd.io/roadmap/">our roadmap&lt;/a> regularly was another.
&lt;a href="https://fluxcd.io/tags/monthly-update/">Monthly
updates&lt;/a> posted on all of Flux channels yet another.&lt;/p>
&lt;p>As the development team around Flux grew and we had more work to be
coordinated across Flux controllers with e.g. teams at cloud providers,
bigger pieces of code refactoring, etc, we are now pleased to use
GitHub&amp;rsquo;s new project boards for having a
&lt;a href="https://github.com/orgs/fluxcd/projects/6/views/1" target="_blank">&amp;ldquo;Maintainer&amp;rsquo;s Focus&amp;rdquo;
page&lt;/a>
which shows what&amp;rsquo;s bookmarked for the upcoming Flux releases - this
might also be a good resource to check if you would like to get involved
with Flux development and help out with one of the next releases.&lt;/p>
&lt;p>&lt;img src="dev-focus-featured.png" alt="Maintainers focus dashboard">&lt;/p>
&lt;h4 id="on-our-way-to-flux-ga">On our way to Flux GA&lt;/h4>
&lt;p>A particular focus in our project management is GA, the big target we
have been following ever since we started the rewrite of Flux. As you
can see on the
&lt;a href="https://fluxcd.io/roadmap/">Flux Roadmap&lt;/a>,
we closed out the vast majority of items and last year we
&lt;a href="https://fluxcd.io/blog/2021/07/july-2021-update/#from-now-on-flux-apis-will-be-stable">already
announced&lt;/a>
that the Flux APIs will be stable from now on. So what&amp;rsquo;s left is to
finish the refactoring for the remaining controllers, complete some
parts of the documentation and some general tidying up. If you want more
detail, or would like to help us to achieve this big milestone, you
&lt;a href="https://github.com/orgs/fluxcd/projects/6/views/9" target="_blank">can follow the work
here&lt;/a>.&lt;/p>
&lt;h3 id="security-news">Security news&lt;/h3>
&lt;p>The latest addition to our
&lt;a href="https://fluxcd.io/tags/security/">blog series about Flux Security&lt;/a>
was a post called
&lt;a href="https://fluxcd.io/blog/2022/03/security-pod-security-standard-restricted/">«Using Pod Security Standard
&amp;quot;restricted&amp;quot;»&lt;/a>.
Go check it out, as it you will learn more about Kubernetes&amp;rsquo; pod
security standard, seccomp and how we apply this in Flux to keep you
safe.&lt;/p>
&lt;p>The already mentioned
&lt;a href="https://fluxcd.io/blog/2022/03/flux-puts-the-git-into-gitops/#whats-next-in-git-things">blog post about our tight integration with Git
APIs&lt;/a>
could also be of interest, as we discuss upcoming plans for integrating
sha256 hash support.&lt;/p>
&lt;h3 id="flux-ecosystem">Flux Ecosystem&lt;/h3>
&lt;p>What makes Flux great is its ecosystem. Tools and services which
integrate seamlessly because that&amp;rsquo;s how the Cloud Native ecosystem
works. We are celebrating all of this on the
&lt;a href="https://fluxcd.io/ecosystem/">Flux Ecosystem
page&lt;/a>. (Please add yourself if your tool or integration
isn&amp;rsquo;t listed yet.)&lt;/p>
&lt;h4 id="renovate">Renovate&lt;/h4>
&lt;p>Here are a couple of newcomers. Firstly, there&amp;rsquo;s Renovate, which is an
Open Source tool to automate:&lt;/p>
&lt;ul>
&lt;li>Detecting dependencies in a repository (Open Source and
private/closed source)&lt;/li>
&lt;li>Checking if there are dependency updates&lt;/li>
&lt;li>Creating commits and Merge/Pull Requests to update dependencies&lt;/li>
&lt;li>Showing the release notes&lt;/li>
&lt;/ul>
&lt;p>We are very pleased that the team at Renovate added a
&lt;a href="https://docs.renovatebot.com/modules/manager/flux/" target="_blank">manager to
integrate with
Flux&lt;/a>.&lt;/p>
&lt;h4 id="gitops-visual-studio-code-extension">GitOps Visual Studio Code Extension&lt;/h4>
&lt;p>The
&lt;a href="https://github.com/weaveworks/vscode-gitops-tools" target="_blank">Weaveworks GitOps
Extension&lt;/a>
provides an intuitive way to manage, troubleshoot and operate your
Kubernetes environment following the GitOps operating model,
accelerating your development lifecycle and simplifying your continuous
delivery pipelines.&lt;/p>
&lt;p>Weaveworks GitOps Extension integrates with
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools" target="_blank">Kubernetes
Tools&lt;/a>,
&lt;a href="https://kubernetes.io/docs/reference/kubectl/overview/" target="_blank">kubectl&lt;/a>
and
&lt;a href="https://fluxcd.io/">flux&lt;/a> for a consolidated and tightly integrated user experience.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">And also this one about the Flux Gitops extension for VS Code: &lt;a href="https://t.co/7VlRRyelOl">https://t.co/7VlRRyelOl&lt;/a>&lt;a href="https://twitter.com/hashtag/azure?src=hash&amp;amp;ref_src=twsrc%5Etfw">#azure&lt;/a> &lt;a href="https://twitter.com/hashtag/gitops?src=hash&amp;amp;ref_src=twsrc%5Etfw">#gitops&lt;/a> &lt;a href="https://twitter.com/hashtag/flux?src=hash&amp;amp;ref_src=twsrc%5Etfw">#flux&lt;/a> &lt;a href="https://twitter.com/hashtag/vscode?src=hash&amp;amp;ref_src=twsrc%5Etfw">#vscode&lt;/a>&lt;/p>&amp;mdash; Geert Baeke (@GeertBaeke) &lt;a href="https://twitter.com/GeertBaeke/status/1504757889977798675?ref_src=twsrc%5Etfw">March 18, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/-07emkW8eiM" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>🚧 This extension is under active development and currently available as
an alpha product.&lt;/p>
&lt;h4 id="flux-subsystem-for-argo">Flux Subsystem for Argo&lt;/h4>
&lt;p>
&lt;a href="https://github.com/flux-subsystem-argo/flamingo" target="_blank">FSA (aka Flamingo)&lt;/a>
is the Flux Subsystem for Argo. Its container image can be used as a drop-in
replacement for the equivalent ArgoCD version to visualise, and manage
Flux workloads, alongside ArgoCD.&lt;/p>
&lt;p>How does it work?&lt;/p>
&lt;p>&lt;img src="fsa.png" alt="Flux Subsystem for Argo">&lt;/p>
&lt;p>🚧 This project is currently available as a technology preview.&lt;/p>
&lt;h4 id="terraform-controller">Terraform-controller&lt;/h4>
&lt;p>In some of our last issues we already reported about the
&lt;a href="https://fluxcd.io/blog/2022/01/january-update/#community-project-terraform-controller-for-flux">terraform-controller hitting the
streets&lt;/a>.
It&amp;rsquo;s a
&lt;a href="https://github.com/chanwit/tf-controller" target="_blank">Flux controller which reconciles
Terraform&lt;/a>
resources in the GitOps way. We received a short report from the team
regarding their achievements of the first quarter of the year:&lt;/p>
&lt;ul>
&lt;li>TF-controller
&lt;a href="https://github.com/weaveworks/tf-controller/releases/tag/v0.9.3" target="_blank">v0.9.3&lt;/a>
is considered the most stable release to date.&lt;/li>
&lt;li>We reached 200 stars on GitHub, now at 211.&lt;/li>
&lt;li>It's been 45 releases so far.&lt;/li>
&lt;li>We re-factored it to the Controller/Runner architecture.&lt;/li>
&lt;li>Standing on the shoulders of our giants (Flux), we successfully
implemented the multi-tenancy feature in 2 months.&lt;/li>
&lt;li>We cleared all Q1
&lt;a href="https://github.com/weaveworks/tf-controller#roadmap" target="_blank">roadmap&lt;/a>
with 68.2% test coverage.&lt;/li>
&lt;li>We started seeing its adoption in public, from
&lt;a href="https://github.com/fluxcd/helm-controller/issues/448" target="_blank">a Helm Controller
user&lt;/a>,
for example.&lt;/li>
&lt;li>We got its
&lt;a href="https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:6913743507681656832" target="_blank">first promo
video&lt;/a>.&lt;/li>
&lt;li>Chanwit Kaewkasi, Piaras Hoban and Tom Huang are the core team
around it now!&lt;/li>
&lt;/ul>
&lt;h4 id="weave-gitops-core">Weave GitOps Core&lt;/h4>
&lt;p>The team around Weave GitOps has been busy and would love to hear your
feedback. If you haven&amp;rsquo;t heard about it just yet, its GitHub says:&lt;/p>
&lt;blockquote>
&lt;p>
&lt;a href="https://github.com/weaveworks/weave-gitops" target="_blank">Weave GitOps&lt;/a> enables an effective
GitOps workflow for continuous delivery of applications into Kubernetes
clusters. It is based on CNCF Flux, a leading GitOps engine.&lt;/p>
&lt;/blockquote>
&lt;p>The Flux community particularly loved the last sentence.&lt;/p>
&lt;p>&lt;img src="weave-gitops2.png" alt="Weave GitOps">
&lt;img src="weave-gitops3.png" alt="Weave GitOps">&lt;/p>
&lt;p>
&lt;a href="https://web.archive.org/web/20240213192000/https://docs.gitops.weave.works/docs/getting-started/intro/" target="_blank">Getting started with it&lt;/a>
is very straight-forward. Please take up the offer of them and give
feedback, they are building a very nice tool based on Flux!&lt;/p>
&lt;h2 id="recent--upcoming-events">Recent &amp;amp; Upcoming Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with new features and developments
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events-icymi-">Recent Events (ICYMI) 📺&lt;/h3>
&lt;p>We feel blessed to have such a big community of users, contributors and
integrators and so many are happy to talk about their experiences. In
March here are a couple of talks we would like to highlight:&lt;/p>
&lt;ul>
&lt;li>Flux Maintainer Stefan Prodan at our friends of Tanzu Tuesday:
&lt;a href="https://youtu.be/XG2uuAMTJg8" target="_blank">Mar
15: Tanzu Tuesdays #89: GitOps with Flux on Kubernetes with
Stefan Prodan&lt;/a>&lt;/li>
&lt;li>Flux contributor and VMware Tanzu Advocate Leigh Capili talking
about a subject close to the heart of many - security and
debugging 💖:
&lt;a href="https://youtu.be/etbvuV9EjLc" target="_blank">Mar 16: Securing GitOps Debug Access with Flux,
Pinniped, Dex, &amp;amp; GitHub - Leigh
Capili&lt;/a>&lt;/li>
&lt;li>Weaveworks&amp;rsquo; DX Engineer Priyanka Pinky and Anchore&amp;rsquo;s OSS Lead Dan
Luhring dive deeper into security subjects here:
&lt;a href="https://youtu.be/-3K74I7t7CQ" target="_blank">Mar 24:
Security: The Value of SBOMs with Dan Luhring &amp;amp; Priyanka
Ravi&lt;/a>&lt;/li>
&lt;li>Want to hear from professionals who brought GitOps to 7000 devs in a
heavily regulated industry? Mae Large, Pinky &amp;amp; Russ Palmer reflect
on their work together:
&lt;a href="https://youtu.be/73kOXNTrNVU" target="_blank">Mar 30: From Zero to GitOps Heros with
Mae Large, Russ Parmer, Priyanka
Ravi&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="upcoming-events-">Upcoming Events 📆&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up in
April - tune in to learn more about Flux and GitOps best practices, get
to know the team and join our community.&lt;/p>
&lt;p>
&lt;a href="https://www.meetup.com/GitOps-Community/events/284923617/" target="_blank">April 7: GitOps with Flux on AKS with Kingdon Barrett &amp;amp; Jonathan
Innis&lt;/a>&lt;/p>
&lt;blockquote>
&lt;ul>
&lt;li>&lt;strong>Introduction to GitOps &amp;amp; Flux&lt;/strong>&lt;br>
You may have heard the term GitOps - it has become a bit of a
buzzword, but it&amp;rsquo;s so much more! The benefits of GitOps are real -
bringing better security, reliability, velocity and more! And the
project that started it all was Flux - a CNCF Incubating project
developed and later donated by Weaveworks (the GitOps company who
coined the term).&lt;/li>
&lt;li>&lt;strong>GitOps in Microsoft Azure with Flux&lt;/strong>&lt;br>
To provide Kubernetes admins and app developers with the latest
tooling for managing configuration and application deployment,
Azure enables GitOps with Flux. In this session Jonathan Innis,
Software Engineer II at Microsoft, will live demo how CNCF Flux is
enabled in Azure Arc enabled Kubernetes and Azure Kubernetes
Services and also give a sneak peek at implementation of Flux.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>
&lt;a href="https://www.meetup.com/GitOps-Community/events/284956250/" target="_blank">April 13: GitOps: Core Concepts &amp;amp; Ways of Structuring Your
Repos&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Whether you&amp;rsquo;re new to GitOps or a seasoned pro, this talk is for you!
We'll start with the basics of how/where to get started, and then
dive into one of the most asked GitOps questions: how to structure
your repository!&lt;/p>
&lt;p>During this talk, Scott &amp;amp; Pinky will review the Core Concepts of Flux
including Git Sources, Reconciliation, Helm Releases, Kustomization,
and Bootstrapping, to get you ramped up with how to think with a
GitOps mindset! Then they&amp;rsquo;ll dive into and discuss considerations for
and demo ways of structuring your repositories: monorepo, repo per
environment, repo per team, or repo per app.&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://www.meetup.com/GitOps-Community/events/284903516/" target="_blank">April 20: DoK Talks #131: Flux for Helm Users by Scott
Rigby&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Welcome Helm users! CNCF Flux has a best-in-class way to use Helm
according to GitOps principles. For you, that means improved security,
reliability, and velocity - no more being on the pager on the weekends
or having painful troubleshooting or rollback when things go wrong.&lt;/p>
&lt;p>Built on Kubernetes controller-runtime, Flux&amp;rsquo;s Helm Controller is an
example of a mature software agent that uses Helm&amp;rsquo;s SDK to full
effect.&lt;/p>
&lt;p>Flux&amp;rsquo;s biggest addition to Helm is a structured declaration layer for
your releases that automatically gets reconciled to your cluster based
on your configured rules:&lt;/p>
&lt;p>⭐️ The Helm client commands let you imperatively do things&lt;br>
⭐️ Flux Helm Custom Resources let you declare what you want the Helm
SDK to do automatically.&lt;/p>
&lt;p>In addition, Scott will show how to use Helm Charts to run reliable
stateful workloads.&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://www.meetup.com/GitOps-Community/events/284947777/" target="_blank">April 27: Reconcile Terraform Resources the GitOps Way with Jose
Talavera&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Some organisations depend heavily on their Terraform scripts because
they are using multiple providers, have built wrappers around those
providers, and might even be deploying their application code along
with Terraform. Additionally, GitOps is in every IT roadmap, but
unfortunately Terraform doesn&amp;rsquo;t have an easy way to reconcile its
resources. This means that teams won't notice a sudden change in the
running environment often with critical consequences.&lt;/p>
&lt;p>What if teams could ensure that what they defined in the Terraform HCL
code is what is always running and available? Flux can continuously
look for changes on your Terraform resources and do reconciliation
with the desired state. You can rest easy knowing that your
deployments are always up to date with your desired state. This
enables you to take advantage of all the benefits of GitOps:
streamlined and secure deployments, quicker time to market, and more
time to concentrate on app development!&lt;/p>
&lt;p>Jose provides an in-depth look at TF-controller, a Flux-based
controller to reconcile your Terraform resources the GitOps Way. Jose
will share insights on the many benefits of TF-Controller, then demo a
common use case implementation.&lt;/p>
&lt;/blockquote>
&lt;h3 id="flux-bug-scrub">Flux Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one
of the best ways to get involved in Flux. They are a friendly and
welcoming way to learn more about contributing and how Flux is organised
as a project.&lt;/p>
&lt;p>The next dates are going to be:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/fbhnssydcgbjb/" target="_blank">April 6 at 1pm UTC/ 2pm
CET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/ndjjssydcgbsb/" target="_blank">April 14 at 10am PT / 1pm
ET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/fbhnssydcgbbc/" target="_blank">April 20 at 1pm UTC/ 2pm
CET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://www.meetup.com/GitOps-Community/events/ndjjssydcgblc/" target="_blank">April 28 at 10am PT / 1pm
ET&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon on
Slack.&lt;/p>
&lt;p>We really enjoyed this
&lt;a href="https://www.youtube.com/watch?v=hNt3v0kk6ec" target="_blank">demo of the k3d git
server&lt;/a>
recently. It&amp;rsquo;s a local Git server that runs outside of Kubernetes, to
support offline dev in a realistic but also simple way that does not
depend on GitHub or other hosted services.&lt;/p>
&lt;h3 id="kubecon--cloudnativecon-europe-2022-coming-up">KubeCon / CloudNativeCon Europe 2022 coming up&lt;/h3>
&lt;p>As every other project in the Cloud Native space, we are very busy
preparing everything for
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank">KubeCon / CloudNativeCon Europe
2022&lt;/a>,
which is going to be 16-20 May 2022 in Valencia, Spain (and virtual of
course!).&lt;/p>
&lt;p>We will post a separate announcement as soon as everything is confirmed,
but we already want to inform you about what&amp;rsquo;s likely to happen, so you
can plan accordingly or collaborate with us!&lt;/p>
&lt;h4 id="the-bug-bash">The Bug Bash&lt;/h4>
&lt;p>Unfortunately we will not be participating in the Bug Bash this KubeCon!&lt;/p>
&lt;p>Despite earlier announcements claiming we would do this, we felt we
could not do this well enough. If you were looking forward to this,
we are sorry - but you know what: we still have the weekly Bug Scrub! Your
weekly one-on-one mentoring to learn the ropes of working on Flux!&lt;/p>
&lt;h4 id="monday-16-may">Monday, 16 May&lt;/h4>
&lt;p>13:00 - 17:00 (Room 2H - Event Center): Flux Project Meeting: We will
kick off the Flux get-togethers and festivities with an in-person
meeting for all Flux users, contributors, maintainers and generally
interested folks. This will be an opportunity to get to know each other,
have a chat, see what people&amp;rsquo;s interests are and to potentially start
contributing. (
&lt;a href="https://linuxfoundation.surveymonkey.com/r/WYGBGPZ" target="_blank">Sign up
here&lt;/a>.)
Contact people on the ground are: Somtochi Onyekwere and Scott Rigby.&lt;/p>
&lt;h4 id="tuesday-17-may---gitopsconhttpseventslinuxfoundationorggitopscon-europeprogramschedule">Tuesday 17 May -
&lt;a href="https://events.linuxfoundation.org/gitopscon-europe/program/schedule/" target="_blank">GitOpsCon&lt;/a>&lt;/h4>
&lt;p>Lots and lots of talks about GitOps in general and Flux in particular,
here&amp;rsquo;s a short selection of what to look forward to:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://sched.co/zrpk" target="_blank">What is GitOps and How to Get It Right - Dan Garfield (Codefresh);
Chris Short (AWS) &amp;amp; Scott Rigby
(Weaveworks)&lt;/a> (9:00 - 9:35)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrq5" target="_blank">Hiding in Plain Sight - How Flux Decrypts Secrets -
Somtochi Onyekwere (Weaveworks)&lt;/a>
(11:05 - 11:15)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqK" target="_blank">Taming the Thundering Gitops Herd with Update Policies - Joaquim
Rocha &amp;amp; Iago López Galeiras (Microsoft)&lt;/a>
(11:35 - 11:45)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqW" target="_blank">GitOps and Progressive Delivery with Flagger, Istio and Flux -
Marco Amador (Anova)&lt;/a> (13:20-13:30)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqf" target="_blank">Creating A Landlord for Multi-tenant K8s Using Flux, Gatekeeper,
Helm, and Friends - Michael Irwin (Docker)&lt;/a>
(13:35-14:05)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqi" target="_blank">GitOps, A Slightly Realistic Situation on Kubernetes with Flux -
Laurent Grangeau (Google) &amp;amp; Ludovic Piot
(theGarageBandOfIT)&lt;/a> (14:10 - 14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrql" target="_blank">Solving Environment Promotion with Flux - Sam Tavakoli &amp;amp; Adelina
Simion (Form3)&lt;/a> (14:10 - 14:40)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqu" target="_blank">Managing Thousands of Clusters and Their Workloads with Flux - Max
Jonas Werner (D2iQ)&lt;/a> (14:55 - 15:25)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrqx" target="_blank">Crossing the Divide: How GitOps Brought AppDev &amp;amp; Platform Teams
Together! - Russ Palmer (State Farm) &amp;amp; Priyanka &amp;lsquo;Pinky&amp;rsquo; Ravi
(Weaveworks)&lt;/a> (15.30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/zrr0" target="_blank">GitOps Everything!? We Sure Can!, AppsFlyer&lt;/a>
(15:30 - 16:00)&lt;/li>
&lt;li>
&lt;a href="https://sched.co/ytwg" target="_blank">Lightning Talk: Addressing Log4Shell with Software Supply Chains -
Duane DeCapite (VMware)&lt;/a>
(18:04 - 18:09)&lt;/li>
&lt;/ul>
&lt;h4 id="wednesday-18-may---friday-may-20---kubeconhttpskccnceu2022schedcomiframeno">Wednesday 18 May - Friday May 20 -
&lt;a href="https://kccnceu2022.sched.com/?iframe=no" target="_blank">KubeCon&lt;/a>&lt;/h4>
&lt;p>Over these three days we are going to be at the Flux booth (both
virtually and on the ground), so come over for a chat. We are planning
loads of talks, demos and ample time to have a chat, get to know
everyone, ask questions and have great new ideas together!&lt;/p>
&lt;p>On top of that, here is a list of talks, workshops and sessions during
those days:&lt;/p>
&lt;ul>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytlV" target="_blank">Flux Security Deep Dive - Stefan Prodan
(Weaveworks)&lt;/a> (11:55 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytkj" target="_blank">Intro to Kubernetes, GitOps, and Observability Hands-On
Tutorial - Johee Chung (Microsoft) &amp;amp; Tiffany Wang
(Weaveworks)&lt;/a> (11:00 - 12:30)&lt;/li>
&lt;li>Wed 18:
&lt;a href="https://sched.co/ytmW" target="_blank">A New Generation of Trusted GitOps for Mixed K8s and
Non-K8s End Users - Alexis &amp;amp; Vasu Chandrasekhara
(SAP)&lt;/a> (15:25 - 16:00)&lt;/li>
&lt;li>Thu 19:
&lt;a href="https://sched.co/yto4" target="_blank">GitOps to Automate the Setup, Management and Extension a
K8s Cluster - Kim Schlesinger (DigitalOcean)&lt;/a>
(11:00 - 12:30)&lt;/li>
&lt;li>Thu 19: Flux Project Office Hour - Paulo Gomes (Weaveworks)
(13:30 - 14:15)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://sched.co/ytrM" target="_blank">Observing Fastly&amp;rsquo;s Network at Scale Thanks to K8s and the
Strimzi Operator - Fernando Crespo &amp;amp; Daniel Caballero,
(Fastly)&lt;/a> (11:00 - 11:35)&lt;/li>
&lt;li>Fri 20:
&lt;a href="https://kccnceu2022.sched.com/#" target="_blank">Simplifying Service Mesh Operations with Flux and
Flagger - Mitch Connors (Google) &amp;amp;
Stefan Prodan (Weaveworks)&lt;/a>
(14:55 - 15:30)&lt;/li>
&lt;/ul>
&lt;p>Please note: all of the above might be subject to change. Please
double-check the schedule beforehand. Please reach out to Vanessa
Abankwah or Daniel Holbach on Slack if you have questions or would like
to participate in any of the above.&lt;/p>
&lt;p>We very much look forward to seeing you there!&lt;/p>
&lt;h2 id="in-other-news">In other news&lt;/h2>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section! ✍&lt;/p>
&lt;p>
&lt;a href="https://www.infoq.com/podcasts/flux-flagger-operator-pattern/" target="_blank">Stefan Prodan on Flux, Flagger, and the Operator Pattern Applied to
Non-Clustered
Resources&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>In this podcast, Wesley Reisz talks to Stefan Prodan about Flux and
Flagger&amp;ndash;two tools built on top of Flux&amp;rsquo;s GitOps Toolkit. After
discussing some of the architectural differences between Flux v1 and
v2 and discussing some of the GitOps toolkit use cases, the two
discuss the operator pattern on Kubernetes. They specifically spend
time talking about the operator pattern, why developers may opt to
build API&amp;rsquo;s on top of Kubernetes, and how the pattern can be used on
non-clusters resources. The podcast wraps with a discussion on the
work being down towards Flux v2&amp;rsquo;s push to GA.&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://devopsian.net/posts/kubernetes-canary-deployments/" target="_blank">A deep dive to Canary Deployments with Flagger, NGINX and Linkerd on
Kubernetes&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Chen wrote up a nice tutorial on using Flagger and has this to say
about Flagger itself:&lt;/p>
&lt;p>*Flagger is a progressive delivery tool that automates the release
process for apps on Kubernetes. It can gradually shift traffic to the
new version while measuring metrics and running conformance tests.&lt;/p>
&lt;p>I prefer flagger because of two main points:&lt;/p>
&lt;ul>
&lt;li>It integrates natively: it watches Deployment resources, while Argo
uses its own CRD Rollout&lt;/li>
&lt;li>It is highly extensible and comes with batteries included: it
provides a load-tester to run basic, or complex scenarios*&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>
&lt;a href="https://itnext.io/gitopsify-cloud-infrastructure-with-crossplane-and-flux-d605d3043452" target="_blank">GitOpsify Cloud Infrastructure with Crossplane and
Flux&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Check out this article by Piotr who dives into how to automate the
provisioning of cloud resources via Crossplane and combine it with
GitOps practices. At the end of it, you will have stopped using
kubectl to manage resources, but rather delegate this to Flux using
Git. GitOps for the win!&lt;/p>
&lt;/blockquote>
&lt;p>
&lt;a href="https://www.cncf.io/online-programs/cncf-live-webinar-from-pipelines-to-supply-chains-level-up-with-supply-chain-choreography/" target="_blank">CNCF Live Webinar: From Pipelines to Supply Chains: Level up with
Supply Chain
Choreography&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Cora Iberkleid and David Espejo at VMware talk about Cartographer.
They say: &lt;em>The Kubernetes ecosystem has a rich set of solutions for
various stages of CI/CD. Tools like Flux, Tekton, kpack, Knative,
ArgoCD, and more each enable big steps forward in establishing a
modern path to production. And yet, the teams and organizations that
adopt these tools still struggle with complex, DIY snowflake
pipelines. The challenge can be creating and maintaining imperative
scripts; orchestrating the flow of information between tools; driving
reusability; adopting GitOps practices; and enabling proper separation
of concerns.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;h3 id="news-from-the-website-and-our-docs">News from the Website and our Docs&lt;/h3>
&lt;h4 id="flux-adopters-shout-out">Flux Adopters shout-out&lt;/h4>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:
&lt;a href="https://netrics.ch" target="_blank">Netrics&lt;/a>,
&lt;a href="https://syntasso.io/" target="_blank">Syntasso&lt;/a>,
&lt;a href="https://employmenthero.com/" target="_blank">EmploymentHero&lt;/a>,
&lt;a href="https://anchore.com/" target="_blank">Anchore&lt;/a> and
&lt;a href="https://giantswarm.io/" target="_blank">Giant
Swarm&lt;/a>.&lt;/p>
&lt;p>If you have not already done so,
&lt;a href="https://fluxcd.io/adopters/">use the instructions
here&lt;/a> or give us a ping and we
will help to add you. Not only is it great for us to get to know and
welcome you to our community. It also gives the team a big boost in
morale to know where in the world Flux is used.&lt;/p>
&lt;h4 id="more-docs-and-website-news">More docs and website news&lt;/h4>
&lt;p>We are constantly improving our documentation and website - here are a
couple of small things we landed recently.&lt;/p>
&lt;p>Documentation:&lt;/p>
&lt;ul>
&lt;li>This was a big effort: The Source API documentation has been
refactored to be more user-friendly. See the v1beta2 specification
for:
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/">Git Repositories&lt;/a>,
&lt;a href="https://fluxcd.io/flux/components/source/buckets/">Buckets&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/">Helm Repositories&lt;/a>.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/flux-e2e/">Flux from
End-to-End&lt;/a>: This was a big part of work as well.
It describes the flow of data through Flux, from End to End.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/cheatsheets/bootstrap/">Cheatsheets&lt;/a>:
Various configurations of Flux controllers at install time are now
available as a
&lt;a href="https://fluxcd.io/flux/cheatsheets/bootstrap/">bootstrap
cheatsheet&lt;/a>.&lt;/li>
&lt;li>We added new
&lt;a href="https://fluxcd.io/flux/faq/">FAQ entries&lt;/a>.&lt;/li>
&lt;li>We added new
&lt;a href="https://fluxcd.io/resources/">resources&lt;/a> to the site.&lt;/li>
&lt;/ul>
&lt;p>In terms of documentation, we are working on a
&lt;a href="https://github.com/fluxcd/website/pull/845" target="_blank">bigger piece of
navigation and information architecture
refactoring&lt;/a>.
This was
&lt;a href="https://fluxcd.io/blog/2022/01/january-update/#cncf-techdocs-team-assess-flux-docs-and-website">pointed out to us as piece of
feedback&lt;/a>
from the CNCF TechDocs team. As the Flux project has grown over time, we
appreciate this opportunity to restructure our docs to make them as easy
to find as possible. Your feedback matters here, so if you could leave
us a note with your impression
&lt;a href="https://github.com/fluxcd/website/pull/845" target="_blank">on this
PR&lt;/a>, we would
love to hear from you.&lt;/p>
&lt;p>And finally on our blog, we added a tag cloud and a note to blog posts
that are older than a year - we also typed up
&lt;a href="https://github.com/fluxcd/website/tree/main/internal_docs/how-to-write-a-blog-post.md" target="_blank">how to
blog&lt;/a>.&lt;/p>
&lt;p>Thanks a lot to these folks who contributed to docs and website: Kingdon
Barrett, Stefan Prodan, Stacey Potter, Hidde Beydals, Sebastian
Bernheim, Ihor Sychevskyi, Colin Humphreys, Filip Sequeira, Jan Lauber,
Marcus Noble, Morgan Christiansson, Satish Kumar Kardarkarai Mani, Tom
Huang and Nguyen Duc Toan.&lt;/p>
&lt;h2 id="flux-project-facts">Flux Project Facts&lt;/h2>
&lt;p>We are very proud of what we have put together. We want to reiterate
some Flux facts - they are sort of our mission statement with Flux.&lt;/p>
&lt;ol>
&lt;li>🤝 Flux provides GitOps for both apps or
infrastructure. Flux and Flagger deploy apps with
canaries, feature flags, and A/B rollouts. Flux can also manage
any Kubernetes resource. Infrastructure and workload dependency
management is built-in.&lt;/li>
&lt;li>🤖 Just push to Git and Flux does the rest. Flux
enables application deployment (CD) and (with the help of Flagger)
progressive delivery (PD) through automatic reconciliation. Flux
can even push back to Git for you with automated container image
updates to Git (image scanning and patching).&lt;/li>
&lt;li>🔩 Flux works with your existing tools: Flux works with
your Git providers (GitHub, GitLab, Bitbucket, can even use
s3-compatible buckets as a source), all major container
registries, and all CI workflow providers.&lt;/li>
&lt;li>🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/li>
&lt;li>☸️ Flux works with any Kubernetes and all common Kubernetes
tooling: Kustomize, Helm, RBAC, and policy-driven
validation (OPA, Kyverno, admission controllers) so it simply
falls into place.&lt;/li>
&lt;li>🤹 Flux does Multi-Tenancy (and &amp;ldquo;Multi-everything&amp;rdquo;):
Flux uses true Kubernetes RBAC via impersonation and supports
multiple Git repositories. Multi-cluster infrastructure and apps
work out of the box with Cluster API: Flux can use one Kubernetes
cluster to manage apps in either the same or other clusters, spin
up additional clusters themselves, and manage clusters including
lifecycle and fleets.&lt;/li>
&lt;li>📞 Flux alerts and notifies: Flux provides health
assessments, alerting to external systems and external events
handling. Just &amp;ldquo;git push&amp;rdquo;, and get notified on Slack and
&lt;a href="https://github.com/fluxcd/notification-controller/blob/main/docs/spec/v1beta1/provider.md" target="_blank">other
chat
systems&lt;/a>.&lt;/li>
&lt;li>👍 Users trust Flux: Flux is a CNCF Incubating project
and was categorised as &amp;quot;Adopt&amp;quot; on the
&lt;a href="https://radar.cncf.io/2020-06-continuous-delivery" target="_blank">CNCF CI/CD Tech
Radar&lt;/a>
(alongside Helm).&lt;/li>
&lt;li>💖 Flux has a lovely community that is very easy to work
with! We welcome contributors of any kind. The
components of Flux are on Kubernetes core controller-runtime, so
anyone can contribute and its functionality can be extended very
easily.&lt;/li>
&lt;/ol>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few
good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a> on
2022-04-07 or 2022-04-13.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/get-started/">Get
Started guide&lt;/a> and give us feedback&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>,
join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn
group&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>We look forward to working with you.&lt;/p></description></item><item><title>Blog: Flux puts the Git into GitOps</title><link>https://fluxcd.io/blog/2022/03/flux-puts-the-git-into-gitops/</link><pubDate>Fri, 25 Mar 2022 09:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/03/flux-puts-the-git-into-gitops/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/03/flux-puts-the-git-into-gitops/featured-git_hu98c53942d89e2d49fa98853ce3ee6a44_5990_640x0_resize_box_3.png" width="640" height="267"/>
&lt;p>Ever since the rewrite of Flux as a set of focused controllers, it has
become clearer what each of its functions and capabilities are. The
aptly named controllers carry in their name what they are responsible
for and which data or tooling they interact with, so that is, e.g.
&lt;code>source&lt;/code>, &lt;code>kustomize&lt;/code>, &lt;code>image-automation&lt;/code>, &lt;code>notification&lt;/code>, &lt;code>helm&lt;/code>,
etc.&lt;/p>
&lt;p>&lt;img src="https://fluxcd.io/img/diagrams/gitops-toolkit.png" alt="Overview Flux controllers">&lt;/p>
&lt;p>If you wanted to string a proof-of-concept for a GitOps tool together, a
naïve solution could be to just shell out to various tools like &lt;code>curl&lt;/code>,
&lt;code>git&lt;/code>, &lt;code>kubectl&lt;/code> and &lt;code>helm&lt;/code>. While that might feel intuitive at first (since
it so closely resembles one&amp;rsquo;s manual workflow behind the keyboard) and
might be quick and fundamentally functional, it comes at a
big cost in the subsequent refinement stages: adequately catching
errors, providing detailed status information, security considerations,
mismatches between command line tools and infrastructure implementation,
API and CLI versions, etc.&lt;/p>
&lt;p>In the course of the last five years since the start of the Flux
project, we have seen all of the above and more. Because other projects
made those mistakes, or because we did.&lt;/p>
&lt;p>Let&amp;rsquo;s drill a bit deeper into why we put so much effort into integrating
as tightly with given tooling APIs and SDKs as possible.&lt;/p>
&lt;h2 id="why-we-are-not-using-the-git-cli">Why we are not using the Git CLI&lt;/h2>
&lt;p>&lt;img src="featured-git.png" alt="Git logo">&lt;/p>
&lt;p>Without Git there is no GitOps, so we obviously want to support all Git
providers, all the edge cases, all the different ways things can be set
up and all the Git operations we need. Obvious interactions with Git are
when we perform clone and push operations on remote Git repositories,
for example.&lt;/p>
&lt;p>Using a CLI for any code-path should be a last resort - if at all. It is
a design principle for the Flux controllers not to do this. We avoid an
entire class of vulnerabilities: command injection.&lt;/p>
&lt;p>Another big reason back when we started working on &lt;code>source-controller&lt;/code>
for dropping the Git CLI was multi-tenancy. The Git CLI wants the SSH and
PGP keys on disk while we wanted them to be loaded from memory to isolate
the tenants secrets without having to write them on disk and risk being
vulnerable to directory traversal attacks.&lt;/p>
&lt;p>All in all we did choose not having to rely on the Git binary being present,
instead we link statically against a known-good and sufficiently well-tested
version. More on that below.&lt;/p>
&lt;h2 id="why-do-we-have-support-for-multiple-git-implementations">Why do we have support for multiple Git implementations&lt;/h2>
&lt;p>We started out using
&lt;a href="https://github.com/go-git/go-git" target="_blank">go-git&lt;/a> for
all Git operations, as it is an implementation of the Git protocol
written entirely in Go. When we wanted to support Azure DevOps and saw
that support for &lt;code>multi_ack&lt;/code> and &lt;code>multi_ack_detailed&lt;/code> wasn&amp;rsquo;t included
in &lt;code>go-git&lt;/code>, we started making use of
&lt;a href="https://github.com/libgit2/git2go" target="_blank">git2go&lt;/a> in addition. It is the Go
bindings of
&lt;a href="https://libgit2.org/" target="_blank">the libgit2 library&lt;/a> and has greater
support for more complex capabilities in the git wire protocol, including
&lt;a href="https://git-scm.com/docs/protocol-v2" target="_blank">git protocol version 2&lt;/a>.
Unfortunately &lt;code>git2go&lt;/code> does not support shallow clones or Git submodules.
The newly added support for commit signing with SSH keys is also not
supported by our implementations at present.&lt;/p>
&lt;p>While the above might sound like petty implementation details, we had to
learn ourselves that each Git implementation has its own set of
shortcomings. Things which &amp;ldquo;just work&amp;rdquo; in the Git CLI, any of the
implementations get subtly wrong, as they work on the
&lt;a href="https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain" target="_blank">&amp;ldquo;plumbing&amp;rdquo;
level&lt;/a>
of Git. In the end we chose to make &lt;code>gitImplementation&lt;/code> a
&lt;a href="https://fluxcd.io/flux/components/source/api/v1beta2/#source.toolkit.fluxcd.io/v1beta2.GitRepository">configurable
setting&lt;/a>.&lt;/p>
&lt;p>Just to illustrate what happens when you try to do things just right,
here&amp;rsquo;s a couple of pieces of work we needed to get done along
the way:&lt;/p>
&lt;ul>
&lt;li>we had to add support for e.g. verifying &lt;code>known_hosts&lt;/code> files for SSH
connections&lt;/li>
&lt;li>when connecting over SSH, we received SHA1 and MD5 fingerprints of
the returned public key from the server and not the key itself,
which made &lt;code>known_hosts&lt;/code> verification a little harder&lt;/li>
&lt;li>changes on &lt;code>libgit2&lt;/code> would
&lt;a href="https://github.com/fluxcd/source-controller/commit/9479d04779ccb7fc44b972cde23cb9a6c052f445" target="_blank">break the way that known hosts used to
work&lt;/a>&lt;/li>
&lt;li>Making various kinds of SSH key types work, e.g. support for
&lt;code>ECDSA*&lt;/code> added as part of &lt;code>libgit2 &amp;gt;= 1.2.0&lt;/code>, &lt;code>ED25519&lt;/code> as part of
&lt;code>libgit2 &amp;gt;= 1.3.0&lt;/code>.&lt;/li>
&lt;li>we needed to start verifying PGP signatures&lt;/li>
&lt;/ul>
&lt;h2 id="tracking-upstream-developments-in-git">Tracking upstream developments in Git&lt;/h2>
&lt;p>As Git has become ubiquitous and virtually all of the world&amp;rsquo;s software
development depends on Git, it still is in active development. Constant
improvements affect features, efficiency, configurability and better
security. Of course we want to pass this all down to our users: more
efficient download makes a huge difference, support for Git Submodules
enables new use-cases, support for more GPG verification or new SSH key
formats adds additional security and when new features are rolled out in
Git providers, we need to support them in Flux too.&lt;/p>
&lt;p>Integrating these changes into Flux unfortunately isn&amp;rsquo;t as easy as it
sounds. One part of the dependency chain for
&lt;a href="https://github.com/libgit2/git2go" target="_blank">git2go&lt;/a> goes:&lt;/p>
&lt;div class="mermaid">flowchart LR
libgit2 --> libssh2 --> OpenSSL
&lt;/div>
&lt;p>So that&amp;rsquo;s
&lt;a href="https://libgit2.org/" target="_blank">libgit2&lt;/a>,
&lt;a href="https://libssh2.org" target="_blank">libssh2&lt;/a> (to enable the SSH transport) and
&lt;a href="https://www.openssl.org/" target="_blank">OpenSSL&lt;/a>. As Linux vendors often take a very
conservative approach to bringing new software releases to stable
releases, we were unfortunately pushed to
&lt;a href="https://github.com/fluxcd/golang-with-libgit2#rationale" target="_blank">building these dependencies ourselves&lt;/a>.
In addition to that, these libraries have quite a few configuration
options that can only be set at build time and unfortunately the
&lt;code>openssl&lt;/code>/&lt;code>libssh2&lt;/code> packages of different Linux distributions act in
&lt;a href="https://github.com/fluxcd/golang-with-libgit2/blob/libgit2-1.3.0/hack/Makefile#L63-L69" target="_blank">slightly different
ways&lt;/a>.
This created a yet different problem: the versions we shipped on the
containers could behave in different ways when we were developing on our
Mac/Linux machines. This forced us to cross-compile statically built
libraries that we can simply download at both development time or
statically linking them into the final binary we create when releasing
our controllers.&lt;/p>
&lt;p>We decided to build the libraries for the AMD64, ARM64 and ARMv7
architectures and link them statically, which was a prerequisite for us
to
&lt;a href="https://fluxcd.io/blog/2022/02/security-more-confidence-through-fuzzing/">enable
fuzzing&lt;/a>
for all Flux controllers. Getting this all up and running for every
upstream release and making sure it&amp;rsquo;s all covered nicely with tests is a
challenge and an area of work we invested quite a lot of time in.&lt;/p>
&lt;h2 id="whats-next-in-git-things">What&amp;rsquo;s next in Git things?&lt;/h2>
&lt;p>&lt;code>libgit2&lt;/code> does not expose concepts to allow users to set timeouts for
network operations, meaning that most git operations could hang
indefinitely in specific circumstances. This would result in specific
&lt;code>GitRepository&lt;/code> objects getting stuck and stop updating until the
controllers get restarted - Users reported this for both the
image-automation and source controllers in the past 6 months.&lt;/p>
&lt;p>We had a few challenges getting traction making changes upstream to fix
similar issues, so to avoid delaying a fix or forking the dependency, we
decided to add experimental support for Go managed transports, which means
we can enforce that network operations won&amp;rsquo;t take more than a given
amount of time to complete, but without requiring any changes upstream.&lt;/p>
&lt;p>This is
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.28.0" target="_blank">part of Flux 0.28&lt;/a>
and can be enabled by adding an environment &lt;code>EXPERIMENTAL_GIT_TRANSPORT=true&lt;/code>
in both &lt;code>source&lt;/code> and &lt;code>image-automation&lt;/code> controllers.&lt;/p>
&lt;p>This will give us more control over the transport with Go native
transport using the &lt;code>libgit2&lt;/code> smart transport support. Read the
&lt;a href="https://github.com/fluxcd/source-controller/blob/main/CHANGELOG.md#experimental-managed-transport-for-libgit2-git-implementation" target="_blank">source-controller
changelog&lt;/a>
for more information.&lt;/p>
&lt;p>If you want to enable this automatically, just add the following to
your &lt;code>kustomization.yaml&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">patches&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- &lt;span style="color:#062873;font-weight:bold">patch&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> path: /spec/template/spec/containers/0/env/0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> value:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> name: EXPERIMENTAL_GIT_TRANSPORT
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> value: &amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;(source-controller|image-automation-controller)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Support for sha256 hashes: Git CLI supports it since 2.29, however all major Git
service providers, such as GitLab and GitHub, are yet to make some progress on
this front.
Upstream, libgit2 is starting to pave the way for that support on
&lt;a href="https://github.com/libgit2/libgit2/releases/tag/v1.4.0" target="_blank">v1.4.0&lt;/a>,
we will continue to watch this space so we can support Flux users as the industry
moves on from SHA1.&lt;/p>
&lt;p>After this strong focus on stability in the last months, we are now
going to take a look at how we can optimise our git implementation to
reduce resource consumption and network traffic across git reconciliations.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Flux doesn&amp;rsquo;t shell out to binaries like &lt;code>git&lt;/code>, &lt;code>helm&lt;/code> or &lt;code>kubectl&lt;/code>,
because we deem it too error-prone and we would miss big opportunities
to bring you the best developer experience and the most accurate information
on every step along the way. This way we offer more control to you. As you
might have gathered from the amount of additional work this all means for
us, we take the &amp;ldquo;Git&amp;rdquo; in &amp;ldquo;GitOps&amp;rdquo; very seriously.&lt;/p>
&lt;h2 id="talk-to-us">Talk to us&lt;/h2>
&lt;p>We love feedback, questions and ideas, so please let us know your
personal use-cases today. Ask us if you have any questions and please&lt;/p>
&lt;ul>
&lt;li>join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a>&lt;/li>
&lt;li>find us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>add yourself
&lt;a href="https://fluxcd.io/adopters/">as an adopter&lt;/a> if you haven&amp;rsquo;t already&lt;/li>
&lt;/ul>
&lt;p>See you around!&lt;/p></description></item><item><title>Blog: Flagger adds Gateway API Support</title><link>https://fluxcd.io/blog/2022/03/flagger-adds-gateway-api-support/</link><pubDate>Fri, 11 Mar 2022 13:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/03/flagger-adds-gateway-api-support/</guid><description>
&lt;img src="https://fluxcd.io/blog/2022/03/flagger-adds-gateway-api-support/featured-flagger-gatewayapi-canary_hu41784555f600d29144a66dede7382f17_40869_640x0_resize_box_3.png" width="640" height="282"/>
&lt;p>The Flagger team is proud to bring you Kubernetes Gateway API support as
part of the
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.19.0" target="_blank">1.19.0 release&lt;/a>.
Read here about why this is a significant development in Flagger and how
you can make use of it.&lt;/p>
&lt;h2 id="what-is-flagger">What is Flagger?&lt;/h2>
&lt;p>Flagger is a progressive delivery tool that automates the release process for applications running on Kubernetes.
It reduces the risk of introducing a new software version in production by gradually shifting traffic to the
new version while measuring metrics and running conformance tests.&lt;/p>
&lt;p>&lt;img src="featured-flagger-gatewayapi-canary.png" alt="Flagger using Gateway API">&lt;/p>
&lt;p>
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a> was designed to give developers confidence in automating production
releases using delivery techniques such as:&lt;/p>
&lt;ul>
&lt;li>Canary release (progressive traffic shifting)&lt;/li>
&lt;li>A/B Testing (HTTP headers and cookies traffic routing)&lt;/li>
&lt;li>Blue/Green (traffic switching and mirroring)&lt;/li>
&lt;/ul>
&lt;h2 id="what-is-the-gateway-api">What is the Gateway API?&lt;/h2>
&lt;p>The
&lt;a href="https://kubernetes.io/blog/2021/04/22/evolving-kubernetes-networking-with-the-gateway-api/" target="_blank">announcement blog
post&lt;/a>
defines its design principles as&lt;/p>
&lt;blockquote>
&lt;ul>
&lt;li>&lt;strong>Expressiveness&lt;/strong> - In addition to HTTP host/path matching and TLS,
Gateway API can express capabilities like HTTP header
manipulation, traffic weighting &amp;amp; mirroring, TCP/UDP routing, and
other capabilities that were only possible in Ingress through
custom annotations.&lt;/li>
&lt;li>&lt;strong>Role-oriented design&lt;/strong> - The API resource model reflects the
separation of responsibilities that is common in routing and
Kubernetes service networking.&lt;/li>
&lt;li>&lt;strong>Extensibility&lt;/strong> - The resources allow arbitrary configuration
attachment at various layers within the API. This makes granular
customization possible at the most appropriate places.&lt;/li>
&lt;li>&lt;strong>Flexible conformance&lt;/strong> - The Gateway API defines varying
conformance levels - core (mandatory support), extended (portable
if supported), and custom (no portability guarantee), known
together as
&lt;a href="https://gateway-api.sigs.k8s.io/concepts/guidelines/#conformance" target="_blank">flexible
conformance&lt;/a>.
This promotes a highly portable core API (like Ingress) that still
gives flexibility for Gateway controller implementers.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>&lt;img src="api-model.png" alt="Gateway API Model">&lt;/p>
&lt;p>Gateway API exposes a more general API than Ingress for proxying and you
can use it for more protocols than just HTTP (although most
implementations support just HTTP for now). It models more
infrastructure components to provide better deployment and management
options. There are three core components to the Gateway API:&lt;/p>
&lt;ul>
&lt;li>&lt;code>GatewayClass&lt;/code>: This lets us define which controller implementation we
want to use.&lt;/li>
&lt;li>&lt;code>Gateway&lt;/code>: A &lt;code>Gateway&lt;/code> resource is attached to a &lt;code>GatewayClass&lt;/code> and
has a 1:1 relationship with the actual load balancing infra. It lets
us define a set of listeners, through which we can specify which
Route resources to evaluate for routing, amongst other things.&lt;/li>
&lt;li>&lt;code>HTTPRoute&lt;/code>: This is a &lt;code>Route&lt;/code> resource that is specific for HTTP
requests. It defines routing rules such as filters, path and
header matches, etc. and which services should the request be
forwarded to.&lt;/li>
&lt;/ul>
&lt;h2 id="how-does-this-work-in-flagger">How does this work in Flagger?&lt;/h2>
&lt;p>Flagger makes use of the fact that &lt;code>HTTPRoute&lt;/code> allows users to define a
weight related to each reference to a service inside a routing rule. These weights are used to determine
which service should receive a request. For example, if we want to send
10% of our traffic to another service, we can define a &lt;code>HTTPRoute&lt;/code> like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>gateway.networking.k8s.io/v1alpha2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HTTPRoute&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>foo-route&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">parentRefs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>example-gateway&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">hostnames&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#4070a0">&amp;#34;foo.example.com&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">rules&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">matches&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>PathPrefix&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">value&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>/login&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">backendRefs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>foo-primary&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">port&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">8080&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">weight&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">90&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>foo-canary&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">port&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">8080&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">weight&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">10&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This sends 10% of all requests coming to foo.example.com/login to the
new service and the other 90% requests go to the stable service. You can
read more about traffic splitting in Gateway API
&lt;a href="https://gateway-api.sigs.k8s.io/v1alpha2/guides/traffic-splitting/" target="_blank">here&lt;/a>.&lt;/p>
&lt;p>Flagger fully automates the creation of &lt;code>HTTPRoutes&lt;/code> with the appropriate header matches,
path matches, etc and attaches the primary and canary service to the
&lt;code>HTTPRoute&lt;/code>. During the canary analysis, the weights related to both the
services are adjusted accordingly.&lt;/p>
&lt;p>&lt;img src="flagger-canary-steps.png" alt="Flagger canary">&lt;/p>
&lt;p>If you want to get started right away, have a look at
&lt;a href="https://fluxcd.io/flagger/tutorials/gatewayapi-progressive-delivery/">our
tutorial&lt;/a>,
which shows you how to use Contour&amp;rsquo;s Gateway API implementation and Flagger to automate canary
deployments. It won&amp;rsquo;t take long to follow, but will convey how powerful
this integration is.&lt;/p>
&lt;h2 id="flagger-works-with-all-implementations">Flagger works with all implementations&lt;/h2>
&lt;p>With added support for Gateway API, Flagger now works with all
&lt;a href="https://gateway-api.sigs.k8s.io/implementations/" target="_blank">implementations&lt;/a>,
which means that as of today these are natively supported: Contour,
Emissary-Ingress, Google Kubernetes Engine, HAProxy Ingress,
HashiCorp Consul, Istio, Kong and Traefik.&lt;/p>
&lt;p>The Flagger team has successfully tested Contour and Istio using
the &lt;code>v1beta2&lt;/code> Gateway API. Starting with Flagger v1.19, the Gateway API
is part of our end-to-end test suite using the Contour implementation.&lt;/p>
&lt;h2 id="how-metrics-work">How metrics work&lt;/h2>
&lt;p>The Gateway API defines a common interface for traffic management, which
saves us from doing anything vendor specific. But the metrics related to
the traffic, still are specific to the Ingress/Service Mesh you&amp;rsquo;re
using. Flagger lets you define a custom resource &lt;code>MetricTemplate&lt;/code>,
which runs queries against your metrics provider and calculates stats
like error rate, latency, etc. For example, if you&amp;rsquo;re using Istio with
Gateway API, the below &lt;code>MetricTemplate&lt;/code> would calculate the error rate
using Prometheus as a provider during a canary analysis:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flagger.app/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>MetricTemplate&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>error-rate&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>istio-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prometheus&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>http://prometheus.istio-system:9090&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">query&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> 100 - sum(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> rate(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> istio_requests_total{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> reporter=&amp;#34;source&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload_namespace=&amp;#34;{{ namespace }}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload=~&amp;#34;{{ target }}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> response_code!~&amp;#34;5.*&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> }[{{ interval }}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> /
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> sum(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> rate(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> istio_requests_total{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> reporter=&amp;#34;source&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload_namespace=&amp;#34;{{ namespace }}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload=~&amp;#34;{{ target }}&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> }[{{ interval }}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> ) * 100&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Similarly the below MetricTemplate allows Flagger to compute the latency
when using any Envoy based Ingress/Service Mesh:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flagger.app/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>MetricTemplate&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>latency&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flagger-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prometheus&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>http://flagger-prometheus:9090&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">query&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> histogram_quantile(0.99,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> sum(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> rate(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> envoy_cluster_upstream_rq_time_bucket{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> envoy_cluster_name=~&amp;#34;{{ namespace }}_{{ target }}-canary_[0-9a-zA-Z-]+&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> }[{{ interval }}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> ) by (le)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> ) / 1000&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="further-reading">Further Reading&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://gateway-api.sigs.k8s.io/" target="_blank">Kubernetes Gateway API&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://kubernetes.io/blog/2021/04/22/evolving-kubernetes-networking-with-the-gateway-api/" target="_blank">Evolving Kubernetes networking with the Gateway API | Kubernetes
Blog&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>The Gateway API is in alpha. As of 2022-03-11 its
&lt;a href="https://github.com/kubernetes-sigs/gateway-api#status" target="_blank">GitHub
README&lt;/a>
says&lt;/p>
&lt;blockquote>
&lt;p>The latest supported version is &lt;code>v1alpha2&lt;/code> as released by the
&lt;a href="https://github.com/kubernetes-sigs/gateway-api/releases/tag/v0.4.0" target="_blank">v0.4.0
release&lt;/a>
of this project. This version of the API is expected to graduate to
beta in the future with relatively minimal changes.&lt;/p>
&lt;/blockquote>
&lt;p>We as the Flux project will update the integration once the API becomes
beta/stable.&lt;/p>
&lt;p>Thanks a lot
&lt;a href="https://github.com/aryan9600" target="_blank">Sanskar Jaiswal&lt;/a> for working on
&lt;a href="https://github.com/fluxcd/flagger/pull/1108" target="_blank">the
implementation&lt;/a>!&lt;/p>
&lt;p>We are excited to bring this feature to you and we love feedback! Please
let us know if you have feedback, questions or how you are going to use
this!&lt;/p></description></item><item><title>Blog: Security: Using Pod Security Standard "restricted"</title><link>https://fluxcd.io/blog/2022/03/security-pod-security-standard-restricted/</link><pubDate>Wed, 09 Mar 2022 12:30:00 +0000</pubDate><guid>https://fluxcd.io/blog/2022/03/security-pod-security-standard-restricted/</guid><description>
&lt;p>Next up in our
&lt;a href="https://fluxcd.io/tags/security/">blog series about Flux
Security&lt;/a> is how we moved
to Pod Security Standard &amp;ldquo;restricted&amp;rdquo;, all the background info you need
to know and how that makes things safer for you.&lt;/p>
&lt;p>
&lt;a href="https://fluxcd.io/blog/2022/01/january-update/#security-news">Since version 0.26 of
Flux&lt;/a>
we are applying&lt;/p>
&lt;blockquote>
&lt;p>[..] the
&lt;a href="https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted" target="_blank">restricted pod security
standard&lt;/a>
to all controllers. In practice this means:&lt;/p>
&lt;ul>
&lt;li>all Linux capabilities were dropped&lt;/li>
&lt;li>the root filesystem was set to read-only&lt;/li>
&lt;li>the &lt;code>seccomp&lt;/code> profile was set to the runtime default&lt;/li>
&lt;li>run as non-root was enabled&lt;/li>
&lt;li>the filesystem group was set to 1337&lt;/li>
&lt;li>the user and group ID was set to 65534&lt;/li>
&lt;/ul>
&lt;p>Flux also enables the Seccomp runtime default across all controllers.
Why is this important? Well, the default &lt;code>seccomp&lt;/code> profile blocks key
system calls that can be used maliciously, for example to break out of
the container isolation. The recently disclosed
&lt;a href="https://blog.aquasec.com/cve-2022-0185-linux-kernel-container-escape-in-kubernetes" target="_blank">kernel vulnerability
CVE-2022-0185&lt;/a>
is a good example of that.&lt;/p>
&lt;/blockquote>
&lt;h2 id="pod-security-standards-definition">Pod Security Standards definition&lt;/h2>
&lt;p>Kubernetes defined three policies in its Pod Security Standards. They
range from&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Privileged&lt;/strong>: This does not place any restrictions on the workload
at all. The idea being that this can be used for system- and
infrastructure-level workloads which are managed by privileged and
trusted users only.&lt;/li>
&lt;li>&lt;strong>Baseline&lt;/strong>: This policy comes with some restrictions. It aims to
guard against known privilege escalations while still making it
easy to adopt and use it by keeping a certain level of
compatibility with most workloads.&lt;/li>
&lt;li>&lt;strong>Restricted&lt;/strong>: Inheriting all the restrictions from &lt;em>Baseline&lt;/em>, it
enforces additional limitations, thus follows hardening best
practices by increasing the isolation levels the workload is
exposed to.&lt;/li>
&lt;/ul>
&lt;p>We are very pleased that all Flux controllers were moved to
&lt;em>Restricted&lt;/em>, as that offers the highest level of security for you.&lt;/p>
&lt;p>We recommend checking out the
&lt;a href="https://kubernetes.io/docs/concepts/security/pod-security-standards/" target="_blank">Upstream Kubernetes documentation on Pod
Security
Standards&lt;/a>
as it gives a generally good overview of all the security features
enabled. In addition to that you can see which restrictions were added
as part of which Kubernetes release, meaning that with every Kubernetes
release, you will benefit from new Upstream Kubernetes security
improvements automatically.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;strong>Note:&lt;/strong> &lt;p>As of v1.24 Kubernetes still runs all workloads with &lt;code>seccomp&lt;/code> in
&lt;code>unconfined&lt;/code> mode, in other words, disabled. On the other hand, Docker
has &lt;code>seccomp&lt;/code> enabled by default for years now.&lt;/p>
&lt;p>There are discussions to change the Kubernetes default on v1.25, and have all
workloads set to &lt;code>RuntimeDefault&lt;/code> unless opted-out. This would be based on
&lt;code>SeccompDefault&lt;/code>
&lt;a href="https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/" target="_blank">feature
gate&lt;/a>
being enabled from that version onwards.&lt;/p>
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;strong>Note:&lt;/strong> If you are an OpenShift user, you might run into
&lt;a href="https://github.com/fluxcd/source-controller/issues/582" target="_blank">this
issue&lt;/a>
(
&lt;a href="https://github.com/openshift/cluster-kube-apiserver-operator/issues/1325" target="_blank">related upstream
report&lt;/a>).
The work-around right now is to remove the seccomp profile as
described in
&lt;a href="https://fluxcd.io/flux/use-cases/openshift/">these instructions&lt;/a>.
&lt;/div>
&lt;h2 id="seccomp-and-runtimedefault">&lt;code>seccomp&lt;/code> and &lt;code>RuntimeDefault&lt;/code>&lt;/h2>
&lt;p>Seccomp is short for &amp;ldquo;Secure Computing&amp;rdquo;. It refers to a facility in the
Linux kernel which can limit the number of system calls available to a
given process. Right now there are around 300+ system calls available,
e.g. &lt;code>read&lt;/code> to read from a file descriptor or &lt;code>chmod&lt;/code> to change the
permissions of a file. The more syscalls you block, the more secure your
application, as a rogue process will only be able to do what you
specified.&lt;/p>
&lt;p>In its first inception &lt;code>seccomp&lt;/code> was introduced into Linux in 2005, to
Docker in version 1.10 (Feb 2016) and to Kubernetes in version 1.3 (Jul
2016). So while the technology has been around for a while and you could
handcraft your own &lt;code>seccomp&lt;/code> profiles, the challenge has always been
striking the right balance: if you are too generous in your filter, it
won&amp;rsquo;t guard against malware effectively &amp;ndash; if you are too strict, your
application might not work.&lt;/p>
&lt;p>All container runtimes come with a default seccomp profile.
&lt;a href="https://github.com/moby/moby/blob/master/profiles/seccomp/default.json" target="_blank">Docker
Desktop for
example&lt;/a>
blocks around 44 system calls. In Kubernetes you can enable the seccomp
profile RuntimeDefault for your pod like so:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">securityContext&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">seccompProfile&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>RuntimeDefault&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>All Flux controllers have this implemented as well now!&lt;/p>
&lt;p>By adopting both changes, we further restrict the permissions that Flux
requires in order to operate. This, alongside other changes we are working
on, translate in a decreased attack surface which may reduce the impact of
eventual CVEs that may surface in our code base - or our supply chain.&lt;/p>
&lt;h2 id="further-reading">Further reading&lt;/h2>
&lt;p>If you would like to understand the concepts in this blog post better,
you might want to check out these blog posts (in addition to the docs
referred to above):&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://itnext.io/seccomp-in-kubernetes-part-i-7-things-you-should-know-before-you-even-start-97502ad6b6d6" target="_blank">Seccomp in Kubernetes &amp;mdash; Part I: 7 things you should know before
you even start! | by Paulo Gomes&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://medium.com/@LachlanEvenson/how-to-enable-kubernetes-container-runtimedefault-seccomp-profile-for-all-workloads-6795624fcbcc" target="_blank">How to enable Kubernetes container RuntimeDefault seccomp profile
for all workloads | by Lachlan Evenson&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://kubernetes.io/blog/2021/08/25/seccomp-default/" target="_blank">Enable seccomp for all workloads with a new v1.22 alpha feature |
Kubernetes&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://kubernetes.io/docs/tutorials/security/seccomp" target="_blank">Restrict a Container's Syscalls with seccomp | Kubernetes
Documentation&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="talk-to-us">Talk to us&lt;/h2>
&lt;p>We love feedback, questions and ideas, so please let us know your
personal use-cases today. Ask us if you have any questions and please&lt;/p>
&lt;ul>
&lt;li>join our
&lt;a href="https://fluxcd.io/community/#meetings">upcoming dev meetings&lt;/a>&lt;/li>
&lt;li>find us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>&lt;/li>
&lt;li>add yourself
&lt;a href="https://fluxcd.io/adopters/">as an adopter&lt;/a> if you haven&amp;rsquo;t already&lt;/li>
&lt;/ul>
&lt;p>See you around!&lt;/p></description></item></channel></rss>