1# Create secret or use an existing secret
2createAzureOperatorSecret: true
3# azureTenantID is the Entra tenant that the subscription is in
5# azureAdditionalTenants is the list of (comma-separated) additional tenants the operator can authenticate with.
6# This is required when performing cross-tenant authentication. See
7# https://learn.microsoft.com/entra/external-id/cross-tenant-access-overview for more details.
8azureAdditionalTenants: ""
9# azureSubscriptionID is the Azure Subscription the operator will act against.
10azureSubscriptionID: ""
11# azureClientID is the client ID of the Azure Service Principal or Managed Identity to use to authenticate with Azure.
13# azureClientSecret is the client secret of the Azure Service Principal used to authenticate with Azure.
14# This is required when using Service Principal authentication.
16# A PEM or PKCS12 certificate string including the private key for Azure Credential Authentication. If certificate is password protected, use 'azureClientCertificatePassword' for password.
17azureClientCertificate: ""
18# Password used to protect the client certificate (optional).
19azureClientCertificatePassword: ""
20# [Deprecated] Managed Identity (aad-pod-identity) Authentication
21# azureManagedIdentityResourceId is the resource ID (/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{managedIdentityName})
22# of the Azure Managed Identity used to authenticate with Azure if using aad-pod-identity authorization.
25 azureManagedIdentityResourceId: ""
26# azureSyncPeriod is the frequency at which resources are re-reconciled with Azure
27# when there have been no triggering changes in the Kubernetes resources. This sync
28# exists to detect and correct changes that happened in Azure that Kubernetes is not
29# aware about. BE VERY CAREFUL setting this value low - even a modest number of resources
30# can cause subscription level throttling if they are re-synced frequently.
31# Durations are specified as "1h", "15m", or "60s". Specify the special value "never" to prevent
32# syncing. See https://pkg.go.dev/time#ParseDuration for more details.
34# useWorkloadIdentityAuth can be set to use workload identity authentication
35# See https://azure.github.io/azure-workload-identity/docs/introduction.html for more details about Azure Workload Identity.
36# See https://azure.github.io/azure-service-operator/guide/authentication/ for details on setting up Workload Identity with ASO
37useWorkloadIdentityAuth: false
38# workloadIdentityAuthMode controls how namespace and per-resource Workload Identity credentials obtain assertions.
39# Allowed values are "relaxed" and "strict". If not specified, the default is "relaxed".
40# relaxed: ASO uses a single Federated Identity Credential (FIC) for all authentication to Azure, via the ASO controller service account. This is simple to set up but is less secure. See
41# https://github.com/Azure/azure-service-operator/issues/4810 for more details about why this is less secure.
42# strict: ASO uses separate Federated Identity Credentials (FICs) via separate service accounts for each authentication to Azure. This is more secure but requires more setup.
43# The secret may select the ServiceAccount with `AZURE_WORKLOAD_IDENTITY_SERVICE_ACCOUNT`; when omitted, ASO uses `aso-workload`.
44workloadIdentityAuthMode: relaxed
45# azureUserAgentSuffix is appended to the default User-Agent for Azure HTTP clients.
46azureUserAgentSuffix: ""
47# azureAuthorityHost is the URL of the AAD authority. If not specified, the default
48# is the AAD URL for the public cloud: https://login.microsoftonline.com/. See
49# https://docs.microsoft.com/azure/active-directory/develop/authentication-national-cloud
51# azureResourceManagerEndpoint is the Azure Resource Manager endpoint.
52# If not specified, the default is the Public cloud resource manager endpoint.
53# See https://docs.microsoft.com/cli/azure/manage-clouds-azure-cli#list-available-clouds for details
54# about how to find available resource manager endpoints for your cloud. Note that the resource manager
55# endpoint is referred to as "resourceManager" in the Azure CLI.
56azureResourceManagerEndpoint: ""
57# azureResourceManagerAudience is the Azure Resource Manager AAD audience.
58# If not specified, the default is the Public cloud resource manager audience https://management.core.windows.net/.
59# See https://docs.microsoft.com/cli/azure/manage-clouds-azure-cli#list-available-clouds for details
60# about how to find available resource manager audiences for your cloud. Note that the resource manager
61# audience is referred to as "activeDirectoryResourceId" in the Azure CLI.
62azureResourceManagerAudience: ""
63# allowMultiEnvManagement determines whether per-namespace and per-resource credentials can specify
64# their own Azure cloud environment settings (AZURE_RESOURCE_MANAGER_ENDPOINT, AZURE_RESOURCE_MANAGER_AUDIENCE,
65# and AZURE_AUTHORITY_HOST). When enabled, credentials must specify ALL three of these settings or NONE of them.
66# When disabled, any attempt to specify these settings in a credential will cause reconciliation to fail.
67# This defaults to false for security reasons.
68allowMultiEnvManagement: false
69# azureTargetNamespaces lists the namespaces the operator will watch
70# for Azure resources (if the mode includes running watchers). If
71# it's empty the operator will watch all namespaces.
72azureTargetNamespaces: []
73# azureOperatorMode determines whether the operator should run
74# watchers, webhooks or both.
76# tlsMinVersion is the minimum TLS version used by the webhook and secure metrics servers.
77# Supported values are VersionTLS12 and VersionTLS13. If not specified, the controller default of VersionTLS13
81 # webhook.port determines the port the webhook endpoint binds to.
83 # webhook.certDir determines which dir to mount webhook certs.
84 certDir: "/tmp/k8s-webhook-server/serving-certs"
85# image defines the container image the ASO pod should run
86# Note: This should use the latest released tag number explicitly. If
87# it's ':latest' and someone deploys the chart after a new version has
88# been released but before the the chart is updated, they could get
89# errors, eg. due to types in the operator binary that have no
90# corresponding CRD yaml in the cart (and so no CRD in the k8s
94 repository: cgr.dev/chainguard-private/azure-service-operator-fips
96 digest: sha256:0f2d6a4559fff621d86fad12b8920b2956c781165bff9eb8fe643ae6d1cd2514
97# 'metrics' define settings for the metrics from controller.
98# 'address' field defines the metrics binding address on which metrics
101 # secure controls whether metrics should be served via 'http' or 'https'.
102 # Flagging secure as 'true' would use https
103 # Refer to https://azure.github.io/azure-service-operator/guide/metrics/ for more information
105 # profiling exposes below endpoints.
107 # /debug/pprof/cmdline
108 # /debug/pprof/profile
109 # /debug/pprof/symbol
112 # pprof endpoints are sensitive and can only be enabled when serving metrics securely
114 address: 0.0.0.0:{{ .Values.metrics.port }}
116# installCRDs configures if the operator attempts to install and manage the CRDs associated with ASO.
117# If the operator does not install and manage the CRDs on its own, you must manually install the appropriate
118# CRDs for version of the ASO operator you're running. Manually installing a subset of the CRDs is supported;
119# the operator will only reconcile that subset if those are the only CRDs it finds when the pod starts.
121# crdPattern is a semicolon delimited string or a list of strings containing the CRD patterns for the operator to install.
122# Setting this has no effect if installCRDs is false.
123# This defines what new CRDs will be installed by ASO. Will always upgrade any existing CRDs even if no
124# crdPattern is defined. Leaving this field unspecified for a fresh install of ASO will result in the operator pod
125# exiting with an error saying no CRDs are configured. Leaving this field unspecified during an upgrade of ASO preserves
126# the existing set of CRDs already in the cluster. The existing CRDs will be upgraded to the latest version but no
127# new CRDs will be installed.
128# Values can be globs utilizing * or ?. The pattern is compared against the "{group}/{kind}" string of each CRD.
129# Patterns are case-insensitive.
130# Example: "resources.azure.com/*" would match the "resources.azure.com/ResourceGroup" resource.
131# Example: "compute.azure.com/*" would match all compute CRDs
132# Example: "resources.azure.com/*;compute.azure.com/*" would match all resources.azure.com resources as well as all
134# We strongly recommend including entire groups such as "dbformysql.azure.com/*". Individual CRDs such as
135# "dbformysql.azure.com/FlexibleServer" can be listed, but there are often other resources in the group which pair
136# together to enable other scenarios, such as dbformysql.azure.com/FlexibleServersFirewallRules, and it's generally
137# easier to just include the whole group.
138# See https://azure.github.io/azure-service-operator/guide/crd-management for more details.
140# leaderElection configures the timings of the leader election lease. Operators watching a large number of
141# resources may need larger values than the defaults: the initial informer sync competes with lease renewal,
142# and a renewal missed during startup restarts the pod, which can leave the operator flapping across replicas.
143# leaseDuration must be greater than renewDeadline, and renewDeadline greater than retryPeriod.
148# crdLabels is a comma-delimited (or semicolon-delimited) string, or a list of key=value strings, containing
149# additional labels to apply to all CRDs managed by ASO.
150# Setting this has no effect if installCRDs is false.
151# Existing labels not managed by ASO are preserved when CRDs are upgraded. Note that removing a label from this
152# list does not remove it from CRDs already in the cluster.
153# Labels reserved by ASO itself (app.kubernetes.io/name, app.kubernetes.io/version and any label prefixed with
154# serviceoperator.azure.com/) cannot be set here and will be rejected at startup.
155# Example: "cluster.x-k8s.io/provider=infrastructure-azure"
156# Example: "cluster.x-k8s.io/provider=infrastructure-azure,environment=production" would apply both labels.
157# Example: "cluster.x-k8s.io/provider=infrastructure-azure;environment=production" is equivalent, using the
158# semicolon delimiter also accepted by crdPattern.
161# - cluster.x-k8s.io/provider=infrastructure-azure
162# - environment=production
165# deploymentAnnotations contain the deployment annotations for Azure Service Operator
166deploymentAnnotations: {}
167# multitenant contains the value to enable multi-tenant mode for ASOv2. If multitenant.enable is true + azureOperatorMode set to "webhooks", chart will
168# install a cluster and if multitenant.enable is true + azureOperatorMode set to "watchers", chart will install a tenant.
169# NOTE: 'installCRDs' should be set to false while installing a tenant.
172# networkPolicies allows you to configure the NetworkPolicies deployed as part of the Chart
175 # TCP port to be configured for talking to the Kubernetes API
176 kubernetesApiPort: 6443
177 # Destination CIDR for talking to the Kubernetes API
178 kubernetesApiCIDR: 0.0.0.0/0
179 # Destination CIDR for talking to MySQL servers
181 # Destination CIDR for talking to PostgreSQL servers
182 postgresqlCIDR: 0.0.0.0/0
183 # Destination CIDR for talking to Sql servers
185# Node labels for pod assignment
186# Ref: https://kubernetes.io/docs/user-guide/node-selection/
188 kubernetes.io/os: linux
189# podAnnotations contain the pod annotations for Azure Service Operator
191# Enable the pod disruption budget
192# Specifies the minimum number of pods that must be available at any given time during the disruption.
193# Ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
197 # Policy for evicting unhealthy pods, either IfHealthyBudget or AlwaysAllow
198 # Defaults to IfHealthyBudget if unset
199 unhealthyPodEvictionPolicy: ""
200# Labels to be added to the pod
202# The securityContext of the pod
203# See https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
204podSecurityContext: {}
205# Assign a PriorityClassName to pods if set
207# Number of pod replicas to create for the deployment
209# Recommended initial values for resources
210# adjust them as necessary
219 memLimit: 400MiB # This should be set to ~80-90% of the hard memory limit set above in resources
220# probes configures the timings of the operator's liveness, readiness and startup probes.
221# The startup probe is the one most likely to need adjusting. The operator applies its CRDs and starts a
222# controller per installed CRD before it serves /healthz, so on a cluster with a large number of CRDs the default
223# budget of periodSeconds x failureThreshold can expire while it is still working, and the kubelet restarts it
224# mid-apply. Raise failureThreshold in that case.
225# The probe paths and ports are not configurable; only the timings are.
239# Number of old history to retain to allow rollback
240# Default Kubernetes value is set to 10
241revisionHistoryLimit: 10
242# Specify security settings for a Container
243# Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
244# It is not recommended to reduce the restrictions in this list, but additional restrictions outside the default set
245# can be applied. If you believe additional securityContext configuration should be specified by default
246# please raise an issue.
248 runAsUser: 65532 # nonroot user from gcr.io/distroless/static:nonroot image
249 runAsGroup: 65532 # nonroot group from gcr.io/distroless/static:nonroot image
251 allowPrivilegeEscalation: false
252 readOnlyRootFilesystem: true
256# Tolerations are applied to pods. Tolerations allow the scheduler to schedule pods with matching taints. Tolerations allow scheduling but don't guarantee scheduling
257# For more information, see https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration.
259# Affinity and anti-affinity expands the types of constraints you can define.
260# The affinity feature consists of two types of affinity:
261# Node affinity functions like the nodeSelector field but is more expressive and allows you to specify soft rules.
262# Inter-pod affinity/anti-affinity allows you to constrain Pods against labels on other Pods.
263# For more information, see https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity
264# For specific affinity best practices on AKS clusters, see https://azure.github.io/azure-service-operator/guide/best-practices/#affinity
266# MaxConcurrentReconciles is the number of threads/goroutines dedicated to reconciling each resource type.
267# If not specified, the default is 4.
268# IMPORTANT: Having MaxConcurrentReconciles set to N does not mean that ASO is limited to N interactions with
269# Azure at any given time, because the control loop yields to another resource while it is not actively issuing HTTP
270# calls to Azure. Any single resource only blocks the control-loop for its resource-type for as long as it takes to issue
271# an HTTP call to Azure, view the result, and make a decision. In most cases the time taken to perform these actions
272# (and thus how long the loop is blocked and preventing other resources from being acted upon) is a few hundred
273# milliseconds to at most a second or two. In a typical 60s period, hundreds of resources
274# for a given resource type can be managed with this set to 1.
275# MaxConcurrentReconciles applies to every registered resource type being watched/managed by ASO.
276maxConcurrentReconciles: 4
277# defaultReconcilePolicy determines the reconcile policy used when a resource does not specify the
278# serviceoperator.azure.com/reconcile-policy annotation. Valid values are manage, skip, and detach-on-delete.
279# If not specified, the default is the controller default, which is "manage".
280defaultReconcilePolicy: ""
282 # mode configures the internal rate-limiting mode.
283 # Valid values are [disabled, bucket]
284 # * disabled: No ASO-controlled rate-limiting occurs. ASO will attempt to communicate with Azure and
285 # kube-apiserver as much as needed based on load. It will back off based on throttling from
286 # either kube-apiserver or Azure, but will not artificially limit its throughput.
287 # * bucket: Uses a token-bucket algorithm to rate-limit reconciliations. Note that this limits how often
288 # the operator performs a reconciliation, but not every reconciliation triggers a call to kube-apiserver
289 # or Azure (though many do). Since this controls reconciles it can be used to coarsely control throughput
290 # and CPU usage of the operator, as well as the number of requests that the operator issues to Azure.
291 # Keep in mind that the Azure throttling limits (defined at
292 # https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/request-limits-and-throttling)
293 # differentiate between request types. Since a given reconcile for a resource may result in polling (a GET) or
294 # modification (a PUT) it's not possible to entirely avoid Azure throttling by tuning these bucket limits.
295 # We don't recommend enabling this mode by default.
296 # If enabling this mode, we strongly recommend doing some experimentation to tune these values to something to
297 # works for your specific need.
299 # The rate (per second) that the bucket is refilled. This value only has an effect if mode is 'bucket'.
301 # The size of the bucket. This value only has an effect if mode is 'bucket'.
304 # Specifies whether a ServiceAccount should be created
306 # The name of the ServiceAccount to use.
307 # If not set and create is true, `azureserviceoperator-default` would be used as a name
310# List of extra environment variables to inject into the manager container
316# value: "azure-service-operator"