UNCLASSIFIED - NO CUI

Integrated bb-common

General MR

Summary

  • Added bb-common 0.12.0 as a helm dependency
  • Replaced all network policies with bb-common generated network policies

Relevant logs/screenshots

Prior to Upgrade:

kubectl get netpol -n kyverno

NAME                      POD-SELECTOR                                                                                                                                                                                                                           AGE
allow-egress-api          <none>                                                                                                                                                                                                                                 8m10s
allow-metric-scraping     app.kubernetes.io/instance=kyverno-kyverno,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/part-of=kyverno-kyverno,app.kubernetes.io/version=3.6.1,helm.sh/chart=upstream-3.6.1                                                    8m10s
allow-webhooks-from-api   app.kubernetes.io/component=admission-controller,app.kubernetes.io/instance=kyverno-kyverno,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/part-of=kyverno-kyverno,app.kubernetes.io/version=3.6.1,helm.sh/chart=upstream-3.6.1   8m10s
default-deny-ingress      <none>                                                                                                                                                                                                                                 8m10s
egress-default-deny       <none>                                                                                                                                                                                                                                 8m10s
egress-kube-dns           <none>                                                                                                                                                                                                                                 8m10s
ingress-egress-allow-ns   <none>                                                                                                                                                                                                                                 8m10s

Post Upgrade:

kubectl get netpol -n kyverno

NAME                                                                       POD-SELECTOR                                                     AGE
allow-egress-from-kyverno-admission-controller-to-kubeapi                  app.kubernetes.io/component=admission-controller                 7m56s
allow-egress-from-kyverno-migrate-resources-to-kubeapi                     batch.kubernetes.io/job-name=kyverno-kyverno-migrate-resources   7m56s
allow-ingress-to-kyverno-admission-controller-port-9443-from-kubeapi       app.kubernetes.io/component=admission-controller                 7m56s
allow-ingress-to-kyverno-tcp-port-8000-from-ns-monitoring-pod-prometheus   app.kubernetes.io/instance=kyverno-kyverno                       7m56s
default-egress-allow-all-in-ns                                             <none>                                                           7m56s
default-egress-allow-kube-dns                                              <none>                                                           7m56s
default-egress-deny-all                                                    <none>                                                           7m56s
default-ingress-allow-all-in-ns                                            <none>                                                           7m56s
default-ingress-deny-all                                                   <none>                                                           7m56s

image

image

Validated secret sync per dev maintenance documentation:

kubectl get secrets kyverno-bbtest-secret -n kyverno-bbtest

NAME                    TYPE     DATA   AGE
kyverno-bbtest-secret   Opaque   2      10s

Performed same validation as above on fresh installation of Kyverno as well.

Validated registry egress network policy

Verified the following configuration deploys the network policy as expected:

kyverno:
  values:
    networkPolicies:
      externalRegistries:
        allowEgress: true

kubectl get netpol allow-egress-from-kyverno-admission-controller-to-private-registry -n kyverno -o yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  annotations:
    generated.network-policies.bigbang.dev/from-definition: private-registry
    generated.network-policies.bigbang.dev/local-key: kyverno-admission-controller
    generated.network-policies.bigbang.dev/remote-key: private-registry
    meta.helm.sh/release-name: kyverno-kyverno
    meta.helm.sh/release-namespace: kyverno
  creationTimestamp: "2025-12-30T12:10:36Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
    helm.toolkit.fluxcd.io/name: kyverno
    helm.toolkit.fluxcd.io/namespace: bigbang
    network-policies.bigbang.dev/direction: egress
    network-policies.bigbang.dev/source: bb-common
  name: allow-egress-from-kyverno-admission-controller-to-private-registry
  namespace: kyverno
  resourceVersion: "16691"
  uid: e426ba85-798f-433f-b326-9127dd92ce3e
spec:
  egress:
  - ports:
    - port: 443
      protocol: TCP
    to:
    - ipBlock:
        cidr: 15.205.173.153/32
  podSelector:
    matchLabels:
      app.kubernetes.io/component: admission-controller
  policyTypes:
  - Egress

Also verified the ports section still works and does not add duplicate ports using the following settings:

kyverno:
  values:
    networkPolicies:
      externalRegistries:
        allowEgress: true
        ports:
          - port: 443
          - port: 80
            protocol: TCP

kubectl get netpol allow-egress-from-kyverno-admission-controller-to-private-registry -n kyverno -o yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  annotations:
    generated.network-policies.bigbang.dev/from-definition: private-registry
    generated.network-policies.bigbang.dev/local-key: kyverno-admission-controller
    generated.network-policies.bigbang.dev/remote-key: private-registry
    meta.helm.sh/release-name: kyverno-kyverno
    meta.helm.sh/release-namespace: kyverno
  creationTimestamp: "2025-12-30T12:10:36Z"
  generation: 2
  labels:
    app.kubernetes.io/managed-by: Helm
    helm.toolkit.fluxcd.io/name: kyverno
    helm.toolkit.fluxcd.io/namespace: bigbang
    network-policies.bigbang.dev/direction: egress
    network-policies.bigbang.dev/source: bb-common
  name: allow-egress-from-kyverno-admission-controller-to-private-registry
  namespace: kyverno
  resourceVersion: "22060"
  uid: e426ba85-798f-433f-b326-9127dd92ce3e
spec:
  egress:
  - ports:
    - port: 443
      protocol: TCP
    - port: 80
      protocol: TCP
    to:
    - ipBlock:
        cidr: 15.205.173.153/32
  podSelector:
    matchLabels:
      app.kubernetes.io/component: admission-controller
  policyTypes:
  - Egress

Linked Issue

issue

Upgrade Notices

Kyverno is now leveraging our bb-common integration for network policies. Please refer to this blog post for additional information on the integration.

Please note that two definitions have been created as part of this integration to allow these policies to be more tailored to a given environment:

  ingress:
    definitions:
      kubeAPI:
        from:
          - ipBlock:
              cidr: 192.168.0.0/16
          - ipBlock:
              cidr: 172.16.0.0/12
          - ipBlock:
              cidr: 10.0.0.0/8

The kubeAPI ingress definition will automatically use the controlPlaneCidr and vpcCidr specified in the global network policy settings. However, it can also be overridden within the package as shown above if needed. In the above example, all private IP ranges are being allowed.

The private-registry egress definition has also been created and defaults to the IP address of Iron Bank using TCP port 443. If another registry is in use the CIDR and ports may need to be updated.

  egress:
    definitions:
      private-registry:
        to:
          - ipBlock:
              cidr: "15.205.173.153/32"
        ports:
          - port: 443
            protocol: TCP

Please note that this network policy is not enabled by default and is currently controlled by the following settings in the package:

  externalRegistries:
    allowEgress: false
    ports: []

The above section will be deprecated in the next major version of Big Bang (4.0) and instead the network policy will automatically be enabled if the require-image-signature Kyverno policy is enabled as this communication is needed as part of that process. If you are currently leveraging the ports section no action is needed as this will continue to function as expected, however, it is recommended to switch over to using the new definition.

This rule can also be toggled on or off manually as shown below:

    from:
      kyverno-admission-controller:
        podSelector:
          matchLabels:
            app.kubernetes.io/component: admission-controller
        to:
          definition:
            private-registry: true # Set to false to disable

Umbrella Branch

bb-common-kyverno

Edited by Jimmy Bourque

Merge request reports

Loading