Compare commits

..

17 Commits

Author SHA1 Message Date
Timofei Larkin
508cfedb24 [keycloak-operator] Update to v1.32.0
## What this PR does

Updates the Keycloak Operator to v1.32.0

### Release note

```release-note
[keycloak-operator] Update the operator to v1.32.0.
```

Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
2026-03-10 23:32:15 +03:00
Andrei Kvapil
a240ff4b27 [monitoring] Scope infrastructure dashboards to tenant-root only (#2197)
## Summary

- Splits `dashboards.list` into tenant-facing dashboards and
infrastructure dashboards (`dashboards-infra.list`)
- Infrastructure dashboards (VictoriaMetrics, Flux, Hubble, LINSTOR,
control-plane, etc.) are only rendered for `tenant-root`
- Tenant-facing dashboards (ingress, db, kafka, nats, clickhouse, vm)
remain available to all tenants

## Problem

All tenants currently receive infrastructure dashboards
(VictoriaMetrics, Hubble, LINSTOR, Flux, control-plane, etc.) that are
only relevant to platform operators.

Relates to #2194

## Test plan

- [ ] `helm template` monitoring in `tenant-root` namespace — both lists
rendered
- [ ] `helm template` monitoring in a child tenant namespace — only
`dashboards.list` rendered
- [ ] Verify no dashboard names collide between the two lists

```release-note
Scope infrastructure dashboards to tenant-root only
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Infrastructure dashboards exposed via the monitoring system for
tenant-root deployments.
* Added new ingress dashboards including vhosts and vhost-detail views.

* **Chores**
* Removed a large set of legacy dashboards to streamline the monitoring
surface.
* Reorganized dashboard generation to separate infra-specific dashboards
from standard sets.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 18:19:28 +01:00
Andrei Kvapil
539b5c3d44 [tenant] Allow egress to virt-handler for VM metrics scraping (#2199)
## Summary

- Adds a `CiliumClusterwideNetworkPolicy` allowing egress from tenant
pods to `virt-handler` in `cozy-kubevirt` namespace on port 8443/TCP
- Conditional on `.Values.monitoring` being enabled

## Problem

Tenant vmagent cannot scrape KubeVirt VM metrics from `virt-handler`
because no network policy allows the traffic.

Relates to #2194

## Test plan

- [ ] `helm template` tenant with `monitoring: true` — virt-handler
policy present
- [ ] `helm template` tenant with `monitoring: false` — virt-handler
policy absent
- [ ] Deploy and verify vmagent can scrape kubevirt_vmi_* metrics

```release-note
Allow tenant egress to virt-handler for VM metrics scraping
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* Added a network egress policy that, when monitoring is enabled, allows
tenant namespaces to reach the virt-handler service on TCP port 8443,
improving connectivity for monitoring-related traffic.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 18:16:01 +01:00
Andrei Kvapil
27c5b0b1e2 fix(dashboard): exclude hidden MarketplacePanel resources from sidebar menu (#2177)
## Summary

- Sidebar menu was showing all resources regardless of their
MarketplacePanel `hidden` state
- Fetch MarketplacePanels during sidebar reconciliation and skip
resources where `hidden=true`
- Hiding a resource from the marketplace now also removes it from the
sidebar navigation

## Test plan

- [ ] Set `hidden: true` on a MarketplacePanel (e.g. qdrant)
- [ ] Trigger controller reconciliation
- [ ] Verify the resource is removed from the sidebar menu
- [ ] Set `hidden: false` and verify the resource reappears in the
sidebar

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Sidebar can now hide resources based on MarketplacePanel configuration
parsed from panel definitions.
* Hidden resources are filtered early when assembling sidebar
categories, preventing them from contributing to menu items.
* Listing failures are non-fatal: if configuration fetch fails, no
hiding is applied and the dashboard remains functional.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 17:49:21 +01:00
Andrei Kvapil
6535ec9f38 [ci] Fix E2E check blocking docs-only PRs (#2170)
## What this PR does

The `pull-requests.yaml` workflow used `paths-ignore` at the trigger
level to skip runs for docs-only changes. This prevented the entire
workflow from triggering, so the required "E2E Tests" check was never
created — blocking merge for non-admin users.

This PR replaces trigger-level `paths-ignore` with a `detect-changes`
job using `dorny/paths-filter@v3`. The workflow now always triggers (so
all checks are reported to GitHub), but `build` and downstream jobs are
skipped when only `docs/` files change.

| PR type | build | resolve_assets | e2e |
| --- | --- | --- | --- |
| Code PR | runs | skipped | runs |
| Release PR | skipped (label) | runs | runs |
| Docs-only PR | skipped | skipped | skipped |

### Release note

```release-note
[ci] Fix required E2E check blocking merge of docs-only pull requests
```

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* CI pipeline optimized to skip builds when only documentation changes
occur.
* Added a checks step that detects whether code changed and gates the
build accordingly.
* Build now runs only if code changes are present and the PR is not
marked as a release, reducing unnecessary build runs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 17:48:47 +01:00
Andrei Kvapil
8ac57811eb [cilium] Update cilium to 1.19.1 (#2173)
## What this PR does
This PR updates the cilium system package to the version 1.19.1

### Release note

```release-note
[cilium] Update cilium system package to the version 1.19.1
```

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Upgraded to version 1.19.1 with enhanced security and observability
capabilities
  * Added standalone DNS proxy support for improved DNS handling
* Enhanced multi-cluster service mesh support with automatic CoreDNS
configuration
* Expanded cloud provider integrations with improved node resource
management
  * Added ztunnel encryption support

* **Improvements**
  * Enhanced TLS certificate management and auto-generation
  * Extended observability and profiling options
* Improved endpoint and service handling with updated resource
management

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 17:48:36 +01:00
Andrei Kvapil
4b9c64c459 fix(dashboard): preserve disabled/hidden state on MarketplacePanel reconciliation (#2176)
## Summary

- Fix "Disabling features from menu and marketplace is not working" by
preserving user-set `disabled` and `hidden` values during controller
reconciliation
- The controller was hardcoding `disabled=false` and `hidden=false` on
every reconcile loop, overwriting any changes made through the dashboard
UI

## Test plan

- [ ] Disable a service from the dashboard marketplace panel
- [ ] Verify the service stays disabled after controller reconciliation
- [ ] Hide a service from the dashboard menu
- [ ] Verify the service stays hidden after controller reconciliation
- [ ] Create a new ApplicationDefinition and verify its MarketplacePanel
defaults to disabled=false, hidden=false

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Fixed an issue where user-configured "disabled" and "hidden" settings
in the marketplace panel could be reset during updates. These
preferences are now preserved when the panel is created or updated, and
the system avoids applying unnecessary configuration changes when values
haven't actually changed.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 17:48:17 +01:00
Mattia Eleuteri
e08c895a09 [monitoring] Scope infrastructure dashboards to tenant-root only
Signed-off-by: Mattia Eleuteri <mattia@hidora.io>
Signed-off-by: mattia-eleuteri <mattia@hidora.io>
2026-03-10 16:57:24 +01:00
Mattia Eleuteri
630dfc767a [tenant] Allow egress to virt-handler for VM metrics scraping
- Add CiliumClusterwideNetworkPolicy for vmagent egress to virt-handler
- Restrict endpointSelector to vmagent pods only via app.kubernetes.io/name label

Signed-off-by: Mattia Eleuteri <mattia.eleuteri@hidora.io>
Signed-off-by: mattia-eleuteri <mattia@hidora.io>
2026-03-10 16:56:50 +01:00
Andrei Kvapil
a13481bfea fix(dashboard): fix External IPs factory EnrichedTable rendering (#2175)
## Summary

- Fix External IPs page showing empty rows in the dashboard by
correcting EnrichedTable properties in the `external-ips` factory
- Replace `clusterNamePartOfUrl` with `cluster` and change `pathToItems`
from array format to dot-path string to match convention used by all
other EnrichedTable instances

## Test plan

- [ ] Open Administration → External IPs in dashboard for a tenant with
LoadBalancer services
- [ ] Verify table columns (Name, ClusterIP, LoadbalancerIP, Created)
are rendered
- [ ] Verify service data is displayed correctly in the rows

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Fixed configuration handling for the external-ips dashboard tab to
ensure cluster names display correctly and service items are
consistently listed, improving stability and data presentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 15:18:56 +01:00
Andrei Kvapil
3606b51a3f [platform] Fix VM MAC address not preserved during migration (#2169)
## What this PR does

During the virtual-machine → vm-instance migration (script 29), VM MAC
addresses
are not preserved. Kube-OVN reads MAC exclusively from the pod
annotation
`ovn.kubernetes.io/mac_address`, not from the IP resource
`spec.macAddress`.
Without the annotation, migrated VMs get a new random MAC, breaking
OS-level
network config that matches by MAC (e.g. netplan).

This adds a Helm `lookup` for the Kube-OVN IP resource in the
vm-instance chart
template. When the resource exists, its `macAddress` and `ipAddress` are
automatically injected as pod annotations. This approach is reliable
across
HelmRelease reconciliations — unlike postRenderers, the annotations
cannot be
accidentally lost.

Fixes #2166

### Release note

```release-note
[platform] Fix VM MAC address not preserved during virtual-machine → vm-instance migration, causing network loss on VMs with MAC-based netplan config
```

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* VM templates now automatically populate network annotations (MAC and
IP) from kubeovn IP records when available. This streamlines VM network
setup on deployment, reduces manual annotation steps, and lowers risk of
misconfiguration by ensuring VMs receive the correct address and MAC
information from associated network records.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-10 15:18:17 +01:00
Artem Bortnikov
748f814523 chore: update cilium to 1.19.1
Signed-off-by: Artem Bortnikov <brongineer747@gmail.com>
2026-03-10 12:41:51 +01:00
Kirill Ilin
9a4f49238c fix(migration): preserve VM MAC address during virtual-machine to vm-instance migration
Kube-OVN reads MAC address exclusively from the pod annotation
ovn.kubernetes.io/mac_address, not from the IP resource spec.macAddress.
Without pod-level annotations, migrated VMs receive a new random MAC,
breaking OS-level network config that matches by MAC (e.g. netplan).

Add a Helm lookup for the Kube-OVN IP resource in the vm-instance chart
template. When the IP resource exists, its macAddress and ipAddress are
automatically injected as pod annotations. This removes the need for
fragile Flux postRenderers on the HelmRelease — the chart itself handles
MAC/IP preservation based on actual cluster state.

Remove the postRenderers approach from migration 29 since the chart now
handles this natively.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
2026-03-10 12:41:50 +01:00
IvanHunters
4b166e788a fix(ci): unblock docs-only PRs by moving path filtering to job level
The pull-requests workflow used paths-ignore at the trigger level, which
prevented the entire workflow from running on docs-only PRs. This meant
the required "E2E Tests" check was never created, blocking merge for
non-admin users.

Replace trigger-level paths-ignore with a detect-changes job using
dorny/paths-filter. The workflow now always triggers (so checks are
always reported), but build and downstream jobs are skipped when only
docs files change.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
2026-03-10 12:41:48 +01:00
IvanHunters
49601b166d fix(dashboard): fix External IPs factory EnrichedTable rendering
The external-ips factory used incorrect EnrichedTable properties causing
empty rows in the dashboard. Replace `clusterNamePartOfUrl` with
`cluster` and change `pathToItems` from array to dot-path string format
to match the convention used by all other working EnrichedTable instances.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
2026-03-10 12:41:45 +01:00
IvanHunters
e69efd80c4 fix(dashboard): preserve disabled/hidden state on MarketplacePanel reconciliation
The controller was hardcoding disabled=false and hidden=false on every
reconciliation, overwriting any user changes made through the dashboard
UI. Move spec building inside the CreateOrUpdate mutate function to read
and preserve current disabled/hidden values from the existing resource.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
2026-03-10 12:41:43 +01:00
IvanHunters
318079bf66 fix(dashboard): exclude hidden MarketplacePanel resources from sidebar menu
The sidebar was generated independently from MarketplacePanels, always
showing all resources regardless of their hidden state. Fetch
MarketplacePanels during sidebar reconciliation and skip resources
where hidden=true, so hiding a resource from the marketplace also
removes it from the sidebar navigation.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
2026-03-10 12:41:42 +01:00
114 changed files with 3953 additions and 958 deletions

View File

@@ -6,8 +6,6 @@ env:
on:
pull_request:
types: [opened, synchronize, reopened]
paths-ignore:
- 'docs/**/*'
# Cancel inflight runs for the same PR when a new push arrives.
concurrency:
@@ -15,6 +13,19 @@ concurrency:
cancel-in-progress: true
jobs:
detect-changes:
name: Detect changes
runs-on: ubuntu-latest
outputs:
code: ${{ steps.filter.outputs.code }}
steps:
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
code:
- '!docs/**'
build:
name: Build
runs-on: [self-hosted]
@@ -22,9 +33,11 @@ jobs:
contents: read
packages: write
# Never run when the PR carries the "release" label.
needs: ["detect-changes"]
# Never run when the PR carries the "release" label or only docs changed.
if: |
!contains(github.event.pull_request.labels.*.name, 'release')
needs.detect-changes.outputs.code == 'true'
&& !contains(github.event.pull_request.labels.*.name, 'release')
steps:
- name: Checkout code

View File

@@ -68,31 +68,46 @@ func (m *Manager) ensureMarketplacePanel(ctx context.Context, crd *cozyv1alpha1.
tags[i] = t
}
specMap := map[string]any{
"description": d.Description,
"name": displayName,
"type": "nonCrd",
"apiGroup": "apps.cozystack.io",
"apiVersion": "v1alpha1",
"plural": app.Plural, // e.g., "buckets"
"disabled": false,
"hidden": false,
"tags": tags,
"icon": d.Icon,
}
specBytes, err := json.Marshal(specMap)
if err != nil {
return reconcile.Result{}, err
}
_, err = controllerutil.CreateOrUpdate(ctx, m.Client, mp, func() error {
_, err := controllerutil.CreateOrUpdate(ctx, m.Client, mp, func() error {
if err := controllerutil.SetOwnerReference(crd, mp, m.Scheme); err != nil {
return err
}
// Add dashboard labels to dynamic resources
m.addDashboardLabels(mp, crd, ResourceTypeDynamic)
// Preserve user-set disabled/hidden values from existing resource
disabled := false
hidden := false
if mp.Spec.Raw != nil {
var existing map[string]any
if err := json.Unmarshal(mp.Spec.Raw, &existing); err == nil {
if v, ok := existing["disabled"].(bool); ok {
disabled = v
}
if v, ok := existing["hidden"].(bool); ok {
hidden = v
}
}
}
specMap := map[string]any{
"description": d.Description,
"name": displayName,
"type": "nonCrd",
"apiGroup": "apps.cozystack.io",
"apiVersion": "v1alpha1",
"plural": app.Plural, // e.g., "buckets"
"disabled": disabled,
"hidden": hidden,
"tags": tags,
"icon": d.Icon,
}
specBytes, err := json.Marshal(specMap)
if err != nil {
return err
}
// Only update spec if it's different to avoid unnecessary updates
newSpec := dashv1alpha1.ArbitrarySpec{
JSON: apiextv1.JSON{Raw: specBytes},

View File

@@ -38,6 +38,23 @@ func (m *Manager) ensureSidebar(ctx context.Context, crd *cozyv1alpha1.Applicati
}
all = crdList.Items
// 1b) Fetch all MarketplacePanels to determine which resources are hidden
hiddenResources := map[string]bool{}
var mpList dashv1alpha1.MarketplacePanelList
if err := m.List(ctx, &mpList, &client.ListOptions{}); err == nil {
for i := range mpList.Items {
mp := &mpList.Items[i]
if mp.Spec.Raw != nil {
var spec map[string]any
if err := json.Unmarshal(mp.Spec.Raw, &spec); err == nil {
if hidden, ok := spec["hidden"].(bool); ok && hidden {
hiddenResources[mp.Name] = true
}
}
}
}
}
// 2) Build category -> []item map (only for CRDs with spec.dashboard != nil)
type item struct {
Key string
@@ -63,6 +80,11 @@ func (m *Manager) ensureSidebar(ctx context.Context, crd *cozyv1alpha1.Applicati
plural := pickPlural(kind, def)
lowerKind := strings.ToLower(kind)
// Skip resources hidden via MarketplacePanel
if hiddenResources[def.Name] {
continue
}
// Check if this resource is a module
if def.Spec.Dashboard.Module {
// Special case: info should have its own keysAndTags, not be in modules

View File

@@ -1924,12 +1924,12 @@ func CreateAllFactories() []*dashboardv1alpha1.Factory {
map[string]any{
"type": "EnrichedTable",
"data": map[string]any{
"id": "external-ips-table",
"fetchUrl": "/api/clusters/{2}/k8s/api/v1/namespaces/{3}/services",
"clusterNamePartOfUrl": "{2}",
"baseprefix": "/openapi-ui",
"customizationId": "factory-details-v1.services",
"pathToItems": []any{"items"},
"id": "external-ips-table",
"fetchUrl": "/api/clusters/{2}/k8s/api/v1/namespaces/{3}/services",
"cluster": "{2}",
"baseprefix": "/openapi-ui",
"customizationId": "factory-details-v1.services",
"pathToItems": ".items",
"fieldSelector": map[string]any{
"spec.type": "LoadBalancer",
},

View File

@@ -207,6 +207,27 @@ spec:
- toEndpoints:
- matchLabels:
"k8s:io.kubernetes.pod.namespace": cozy-kubevirt-cdi
{{- if .Values.monitoring }}
---
apiVersion: cilium.io/v2
kind: CiliumClusterwideNetworkPolicy
metadata:
name: {{ include "tenant.name" . }}-egress-virt-handler
spec:
endpointSelector:
matchLabels:
"k8s:io.kubernetes.pod.namespace": "{{ include "tenant.name" . }}"
"k8s:app.kubernetes.io/name": "vmagent"
egress:
- toEndpoints:
- matchLabels:
"k8s:kubevirt.io": "virt-handler"
"k8s:io.kubernetes.pod.namespace": "cozy-kubevirt"
toPorts:
- ports:
- port: "8443"
protocol: TCP
{{- end }}
---
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy

View File

@@ -6,7 +6,7 @@ metadata:
name: {{ include "virtual-machine.fullname" $ }}-ssh-keys
stringData:
{{- range $k, $v := .Values.sshKeys }}
key{{ $k }}: {{ quote $v }}
key{{ $k }}: {{ quote $v }}
{{- end }}
{{- end }}
{{- if or .Values.cloudInit .Values.sshKeys }}
@@ -27,21 +27,7 @@ stringData:
#cloud-config
ssh_authorized_keys:
{{- range .Values.sshKeys }}
- {{ quote . }}
- {{ quote . }}
{{- end }}
{{- end }}
networkdata: |
{{- /*
Provide network config without MAC addresses so the VM can be restored/cloned
with a new MAC without breaking DHCP. Interface names are stable by PCI slot:
enp1s0 = default (pod) NIC, enp2s0+ = additional subnet NICs.
*/}}
version: 2
ethernets:
enp1s0:
dhcp4: true
{{- range $i, $subnet := .Values.subnets }}
enp{{ add $i 2 }}s0:
dhcp4: true
{{- end }}
{{- end }}

View File

@@ -34,6 +34,12 @@ spec:
metadata:
annotations:
kubevirt.io/allow-pod-bridge-network-live-migration: "true"
{{- $ovnIPName := printf "%s.%s" (include "virtual-machine.fullname" .) .Release.Namespace }}
{{- $ovnIP := lookup "kubeovn.io/v1" "IP" "" $ovnIPName }}
{{- if $ovnIP }}
ovn.kubernetes.io/mac_address: {{ $ovnIP.spec.macAddress | quote }}
ovn.kubernetes.io/ip_address: {{ $ovnIP.spec.ipAddress | quote }}
{{- end }}
labels:
{{- include "virtual-machine.labels" . | nindent 8 }}
spec:
@@ -113,8 +119,6 @@ spec:
cloudInitNoCloud:
secretRef:
name: {{ include "virtual-machine.fullname" . }}-cloud-init
networkDataSecretRef:
name: {{ include "virtual-machine.fullname" . }}-cloud-init
{{- end }}
networks:
- name: default

View File

@@ -18,5 +18,5 @@ spec:
path: system/backupstrategy-controller
install:
privileged: true
namespace: cozy-backup-controller
namespace: cozy-backupstrategy-controller
releaseName: backupstrategy-controller

View File

@@ -14,10 +14,3 @@ rules:
- apiGroups: ["backups.cozystack.io"]
resources: ["backupjobs"]
verbs: ["create", "get", "list", "watch"]
# Leader election (--leader-elect)
- apiGroups: ["coordination.k8s.io"]
resources: ["leases"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "patch"]

View File

@@ -30,10 +30,6 @@ rules:
- apiGroups: ["velero.io"]
resources: ["backups", "restores"]
verbs: ["create", "get", "list", "watch", "update", "patch"]
# Events from Recorder.Event() calls
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "patch"]
# Leader election (--leader-elect)
- apiGroups: ["coordination.k8s.io"]
resources: ["leases"]

View File

@@ -10,7 +10,7 @@ update:
rm -rf charts
helm repo add cilium https://helm.cilium.io/
helm repo update cilium
helm pull cilium/cilium --untar --untardir charts --version 1.18
helm pull cilium/cilium --untar --untardir charts --version 1.19
$(SED_INPLACE) -e '/Used in iptables/d' -e '/SYS_MODULE/d' charts/cilium/values.yaml
version=$$(awk '$$1 == "version:" {print $$2}' charts/cilium/Chart.yaml) && \
$(SED_INPLACE) "s/ARG VERSION=.*/ARG VERSION=v$${version}/" images/cilium/Dockerfile

View File

@@ -41,11 +41,8 @@ annotations:
namespace context.\n- kind: CiliumNodeConfig\n version: v2\n name: ciliumnodeconfigs.cilium.io\n
\ displayName: Cilium Node Configuration\n description: |\n CiliumNodeConfig
is a list of configuration key-value pairs. It is applied to\n nodes indicated
by a label selector.\n- kind: CiliumBGPPeeringPolicy\n version: v2alpha1\n name:
ciliumbgppeeringpolicies.cilium.io\n displayName: Cilium BGP Peering Policy\n
\ description: |\n Cilium BGP Peering Policy instructs Cilium to create specific
BGP peering\n configurations.\n- kind: CiliumBGPClusterConfig\n version: v2alpha1\n
\ name: ciliumbgpclusterconfigs.cilium.io\n displayName: Cilium BGP Cluster Config\n
by a label selector.\n- kind: CiliumBGPClusterConfig\n version: v2alpha1\n name:
ciliumbgpclusterconfigs.cilium.io\n displayName: Cilium BGP Cluster Config\n
\ description: |\n Cilium BGP Cluster Config instructs Cilium operator to create
specific BGP cluster\n configurations.\n- kind: CiliumBGPPeerConfig\n version:
v2alpha1\n name: ciliumbgppeerconfigs.cilium.io\n displayName: Cilium BGP Peer
@@ -79,7 +76,7 @@ annotations:
Cilium Gateway Class Config\n description: |\n CiliumGatewayClassConfig defines
a configuration for Gateway API GatewayClass.\n"
apiVersion: v2
appVersion: 1.18.6
appVersion: 1.19.1
description: eBPF-based Networking, Security, and Observability
home: https://cilium.io/
icon: https://cdn.jsdelivr.net/gh/cilium/cilium@main/Documentation/images/logo-solo.svg
@@ -95,4 +92,4 @@ kubeVersion: '>= 1.21.0-0'
name: cilium
sources:
- https://github.com/cilium/cilium
version: 1.18.6
version: 1.19.1

View File

@@ -1,6 +1,6 @@
# cilium
![Version: 1.18.6](https://img.shields.io/badge/Version-1.18.6-informational?style=flat-square) ![AppVersion: 1.18.6](https://img.shields.io/badge/AppVersion-1.18.6-informational?style=flat-square)
![Version: 1.19.1](https://img.shields.io/badge/Version-1.19.1-informational?style=flat-square) ![AppVersion: 1.19.1](https://img.shields.io/badge/AppVersion-1.19.1-informational?style=flat-square)
Cilium is open source software for providing and transparently securing
network connectivity and loadbalancing between application workloads such as
@@ -59,10 +59,14 @@ contributors across the globe, there is almost always someone available to help.
| agentNotReadyTaintKey | string | `"node.cilium.io/agent-not-ready"` | Configure the key of the taint indicating that Cilium is not ready on the node. When set to a value starting with `ignore-taint.cluster-autoscaler.kubernetes.io/`, the Cluster Autoscaler will ignore the taint on its decisions, allowing the cluster to scale up. |
| aksbyocni.enabled | bool | `false` | Enable AKS BYOCNI integration. Note that this is incompatible with AKS clusters not created in BYOCNI mode: use Azure integration (`azure.enabled`) instead. |
| alibabacloud.enabled | bool | `false` | Enable AlibabaCloud ENI integration |
| alibabacloud.nodeSpec.securityGroupTags | list | `[]` | |
| alibabacloud.nodeSpec.securityGroups | list | `[]` | |
| alibabacloud.nodeSpec.vSwitchTags | list | `[]` | |
| alibabacloud.nodeSpec.vSwitches | list | `[]` | |
| annotateK8sNode | bool | `false` | Annotate k8s node upon initialization with Cilium's metadata. |
| annotations | object | `{}` | Annotations to be added to all top-level cilium-agent objects (resources under templates/cilium-agent) |
| apiRateLimit | string | `nil` | The api-rate-limit option can be used to overwrite individual settings of the default configuration for rate limiting calls to the Cilium Agent API |
| authentication.enabled | bool | `true` | Enable authentication processing and garbage collection. Note that if disabled, policy enforcement will still block requests that require authentication. But the resulting authentication requests for these requests will not be processed, therefore the requests not be allowed. |
| authentication.enabled | bool | `false` | Enable authentication processing and garbage collection. Note that if disabled, policy enforcement will still block requests that require authentication. But the resulting authentication requests for these requests will not be processed, therefore the requests not be allowed. |
| authentication.gcInterval | string | `"5m0s"` | Interval for garbage collection of auth map entries. |
| authentication.mutual.connectTimeout | string | `"5s"` | Timeout for connecting to the remote node TCP socket |
| authentication.mutual.port | int | `4250` | Port on the agent where mutual authentication handshakes between agents will be performed |
@@ -73,7 +77,7 @@ contributors across the globe, there is almost always someone available to help.
| authentication.mutual.spire.enabled | bool | `false` | Enable SPIRE integration (beta) |
| authentication.mutual.spire.install.agent.affinity | object | `{}` | SPIRE agent affinity configuration |
| authentication.mutual.spire.install.agent.annotations | object | `{}` | SPIRE agent annotations |
| authentication.mutual.spire.install.agent.image | object | `{"digest":"sha256:163970884fba18860cac93655dc32b6af85a5dcf2ebb7e3e119a10888eff8fcd","override":null,"pullPolicy":"IfNotPresent","repository":"ghcr.io/spiffe/spire-agent","tag":"1.12.4","useDigest":true}` | SPIRE agent image |
| authentication.mutual.spire.install.agent.image | object | `{"digest":"sha256:5106ac601272a88684db14daf7f54b9a45f31f77bb16a906bd5e87756ee7b97c","override":null,"pullPolicy":"IfNotPresent","repository":"ghcr.io/spiffe/spire-agent","tag":"1.9.6","useDigest":true}` | SPIRE agent image |
| authentication.mutual.spire.install.agent.labels | object | `{}` | SPIRE agent labels |
| authentication.mutual.spire.install.agent.nodeSelector | object | `{}` | SPIRE agent nodeSelector configuration ref: ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
| authentication.mutual.spire.install.agent.podSecurityContext | object | `{}` | Security context to be added to spire agent pods. SecurityContext holds pod-level security attributes and common container settings. ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
@@ -85,7 +89,7 @@ contributors across the globe, there is almost always someone available to help.
| authentication.mutual.spire.install.agent.tolerations | list | `[{"effect":"NoSchedule","key":"node.kubernetes.io/not-ready"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/master"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane"},{"effect":"NoSchedule","key":"node.cloudprovider.kubernetes.io/uninitialized","value":"true"},{"key":"CriticalAddonsOnly","operator":"Exists"}]` | SPIRE agent tolerations configuration By default it follows the same tolerations as the agent itself to allow the Cilium agent on this node to connect to SPIRE. ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| authentication.mutual.spire.install.enabled | bool | `true` | Enable SPIRE installation. This will only take effect only if authentication.mutual.spire.enabled is true |
| authentication.mutual.spire.install.existingNamespace | bool | `false` | SPIRE namespace already exists. Set to true if Helm should not create, manage, and import the SPIRE namespace. |
| authentication.mutual.spire.install.initImage | object | `{"digest":"sha256:2383baad1860bbe9d8a7a843775048fd07d8afe292b94bd876df64a69aae7cb1","override":null,"pullPolicy":"IfNotPresent","repository":"docker.io/library/busybox","tag":"1.37.0","useDigest":true}` | init container image of SPIRE agent and server |
| authentication.mutual.spire.install.initImage | object | `{"digest":"sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f","override":null,"pullPolicy":"IfNotPresent","repository":"docker.io/library/busybox","tag":"1.37.0","useDigest":true}` | init container image of SPIRE agent and server |
| authentication.mutual.spire.install.namespace | string | `"cilium-spire"` | SPIRE namespace to install into |
| authentication.mutual.spire.install.server.affinity | object | `{}` | SPIRE server affinity configuration |
| authentication.mutual.spire.install.server.annotations | object | `{}` | SPIRE server annotations |
@@ -95,7 +99,7 @@ contributors across the globe, there is almost always someone available to help.
| authentication.mutual.spire.install.server.dataStorage.enabled | bool | `true` | Enable SPIRE server data storage |
| authentication.mutual.spire.install.server.dataStorage.size | string | `"1Gi"` | Size of the SPIRE server data storage |
| authentication.mutual.spire.install.server.dataStorage.storageClass | string | `nil` | StorageClass of the SPIRE server data storage |
| authentication.mutual.spire.install.server.image | object | `{"digest":"sha256:34147f27066ab2be5cc10ca1d4bfd361144196467155d46c45f3519f41596e49","override":null,"pullPolicy":"IfNotPresent","repository":"ghcr.io/spiffe/spire-server","tag":"1.12.4","useDigest":true}` | SPIRE server image |
| authentication.mutual.spire.install.server.image | object | `{"digest":"sha256:59a0b92b39773515e25e68a46c40d3b931b9c1860bc445a79ceb45a805cab8b4","override":null,"pullPolicy":"IfNotPresent","repository":"ghcr.io/spiffe/spire-server","tag":"1.9.6","useDigest":true}` | SPIRE server image |
| authentication.mutual.spire.install.server.initContainers | list | `[]` | SPIRE server init containers |
| authentication.mutual.spire.install.server.labels | object | `{}` | SPIRE server labels |
| authentication.mutual.spire.install.server.nodeSelector | object | `{}` | SPIRE server nodeSelector configuration ref: ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
@@ -114,13 +118,14 @@ contributors across the globe, there is almost always someone available to help.
| authentication.rotatedIdentitiesQueueSize | int | `1024` | Buffer size of the channel Cilium uses to receive certificate expiration events from auth handlers. |
| autoDirectNodeRoutes | bool | `false` | Enable installation of PodCIDR routes between worker nodes if worker nodes share a common L2 network segment. |
| azure.enabled | bool | `false` | Enable Azure integration. Note that this is incompatible with AKS clusters created in BYOCNI mode: use AKS BYOCNI integration (`aksbyocni.enabled`) instead. |
| azure.nodeSpec.azureInterfaceName | string | `""` | |
| bandwidthManager | object | `{"bbr":false,"bbrHostNamespaceOnly":false,"enabled":false}` | Enable bandwidth manager to optimize TCP and UDP workloads and allow for rate-limiting traffic from individual Pods with EDT (Earliest Departure Time) through the "kubernetes.io/egress-bandwidth" Pod annotation. |
| bandwidthManager.bbr | bool | `false` | Activate BBR TCP congestion control for Pods |
| bandwidthManager.bbrHostNamespaceOnly | bool | `false` | Activate BBR TCP congestion control for Pods in the host namespace only. |
| bandwidthManager.enabled | bool | `false` | Enable bandwidth manager infrastructure (also prerequirement for BBR) |
| bgpControlPlane | object | `{"enabled":false,"legacyOriginAttribute":{"enabled":false},"routerIDAllocation":{"ipPool":"","mode":"default"},"secretsNamespace":{"create":false,"name":"kube-system"},"statusReport":{"enabled":true}}` | This feature set enables virtual BGP routers to be created via CiliumBGPPeeringPolicy CRDs. |
| bgpControlPlane | object | `{"enabled":false,"legacyOriginAttribute":{"enabled":false},"routerIDAllocation":{"ipPool":"","mode":"default"},"secretsNamespace":{"create":false,"name":"kube-system"},"statusReport":{"enabled":true}}` | This feature set enables virtual BGP routers to be created via BGP CRDs. |
| bgpControlPlane.enabled | bool | `false` | Enables the BGP control plane. |
| bgpControlPlane.legacyOriginAttribute | object | `{"enabled":false}` | Legacy BGP ORIGIN attribute settings (BGPv2 only) |
| bgpControlPlane.legacyOriginAttribute | object | `{"enabled":false}` | Legacy BGP ORIGIN attribute settings |
| bgpControlPlane.legacyOriginAttribute.enabled | bool | `false` | Enable/Disable advertising LoadBalancerIP routes with the legacy BGP ORIGIN attribute value INCOMPLETE (2) instead of the default IGP (0). Enable for compatibility with the legacy behavior of MetalLB integration. |
| bgpControlPlane.routerIDAllocation | object | `{"ipPool":"","mode":"default"}` | BGP router-id allocation mode |
| bgpControlPlane.routerIDAllocation.ipPool | string | `""` | IP pool to allocate the BGP router-id from when the mode is ip-pool. |
@@ -128,20 +133,20 @@ contributors across the globe, there is almost always someone available to help.
| bgpControlPlane.secretsNamespace | object | `{"create":false,"name":"kube-system"}` | SecretsNamespace is the namespace which BGP support will retrieve secrets from. |
| bgpControlPlane.secretsNamespace.create | bool | `false` | Create secrets namespace for BGP secrets. |
| bgpControlPlane.secretsNamespace.name | string | `"kube-system"` | The name of the secret namespace to which Cilium agents are given read access |
| bgpControlPlane.statusReport | object | `{"enabled":true}` | Status reporting settings (BGPv2 only) |
| bgpControlPlane.statusReport.enabled | bool | `true` | Enable/Disable BGPv2 status reporting It is recommended to enable status reporting in general, but if you have any issue such as high API server load, you can disable it by setting this to false. |
| bgpControlPlane.statusReport | object | `{"enabled":true}` | Status reporting settings |
| bgpControlPlane.statusReport.enabled | bool | `true` | Enable/Disable BGP status reporting It is recommended to enable status reporting in general, but if you have any issue such as high API server load, you can disable it by setting this to false. |
| bpf.authMapMax | int | `524288` | Configure the maximum number of entries in auth map. |
| bpf.autoMount.enabled | bool | `true` | Enable automatic mount of BPF filesystem When `autoMount` is enabled, the BPF filesystem is mounted at `bpf.root` path on the underlying host and inside the cilium agent pod. If users disable `autoMount`, it's expected that users have mounted bpffs filesystem at the specified `bpf.root` volume, and then the volume will be mounted inside the cilium agent pod at the same path. |
| bpf.ctAccounting | bool | `false` | Enable CT accounting for packets and bytes |
| bpf.ctAnyMax | int | `262144` | Configure the maximum number of entries for the non-TCP connection tracking table. |
| bpf.ctTcpMax | int | `524288` | Configure the maximum number of entries in the TCP connection tracking table. |
| bpf.datapathMode | string | `veth` | Mode for Pod devices for the core datapath (veth, netkit, netkit-l2) |
| bpf.datapathMode | string | `veth` | Mode for Pod devices for the core datapath (veth, netkit, netkit-l2). Note netkit is incompatible with TPROXY (`bpf.tproxy`). |
| bpf.disableExternalIPMitigation | bool | `false` | Disable ExternalIP mitigation (CVE-2020-8554) |
| bpf.distributedLRU | object | `{"enabled":false}` | Control to use a distributed per-CPU backend memory for the core BPF LRU maps which Cilium uses. This improves performance significantly, but it is also recommended to increase BPF map sizing along with that. |
| bpf.distributedLRU.enabled | bool | `false` | Enable distributed LRU backend memory. For compatibility with existing installations it is off by default. |
| bpf.enableTCX | bool | `true` | Attach endpoint programs using tcx instead of legacy tc hooks on supported kernels. |
| bpf.events | object | `{"default":{"burstLimit":null,"rateLimit":null},"drop":{"enabled":true},"policyVerdict":{"enabled":true},"trace":{"enabled":true}}` | Control events generated by the Cilium datapath exposed to Cilium monitor and Hubble. Helm configuration for BPF events map rate limiting is experimental and might change in upcoming releases. |
| bpf.events.default | object | `{"burstLimit":null,"rateLimit":null}` | Default settings for all types of events except dbg and pcap. |
| bpf.events.default | object | `{"burstLimit":null,"rateLimit":null}` | Default settings for all types of events except dbg. |
| bpf.events.default.burstLimit | int | `0` | Configure the maximum number of messages that can be written to BPF events map in 1 second. If burstLimit is greater than 0, non-zero value for rateLimit must also be provided lest the configuration is considered invalid. Setting both burstLimit and rateLimit to 0 disables BPF events rate limiting. |
| bpf.events.default.rateLimit | int | `0` | Configure the limit of messages per second that can be written to BPF events map. The number of messages is averaged, meaning that if no messages were written to the map over 5 seconds, it's possible to write more events in the 6th second. If rateLimit is greater than 0, non-zero value for burstLimit must also be provided lest the configuration is considered invalid. Setting both burstLimit and rateLimit to 0 disables BPF events rate limiting. |
| bpf.events.drop.enabled | bool | `true` | Enable drop events. |
@@ -158,19 +163,23 @@ contributors across the globe, there is almost always someone available to help.
| bpf.monitorAggregation | string | `"medium"` | Configure the level of aggregation for monitor notifications. Valid options are none, low, medium, maximum. |
| bpf.monitorFlags | string | `"all"` | Configure which TCP flags trigger notifications when seen for the first time in a connection. |
| bpf.monitorInterval | string | `"5s"` | Configure the typical time between monitor notifications for active connections. |
| bpf.monitorTraceIPOption | int | `0` | Configure the IP tracing option type. This option is used to specify the IP option type to use for tracing. The value must be an integer between 0 and 255. @schema type: [null, integer] minimum: 0 maximum: 255 @schema |
| bpf.natMax | int | `524288` | Configure the maximum number of entries for the NAT table. |
| bpf.neighMax | int | `524288` | Configure the maximum number of entries for the neighbor table. |
| bpf.nodeMapMax | int | `nil` | Configures the maximum number of entries for the node table. |
| bpf.policyMapMax | int | `16384` | Configure the maximum number of entries in endpoint policy map (per endpoint). @schema type: [null, integer] @schema |
| bpf.policyMapPressureMetricsThreshold | float64 | `0.1` | Configure threshold for emitting pressure metrics of policy maps. @schema type: [null, number] @schema |
| bpf.policyStatsMapMax | int | `65536` | Configure the maximum number of entries in global policy stats map. @schema type: [null, integer] @schema |
| bpf.preallocateMaps | bool | `false` | Enables pre-allocation of eBPF map values. This increases memory usage but can reduce latency. |
| bpf.root | string | `"/sys/fs/bpf"` | Configure the mount point for the BPF filesystem |
| bpf.tproxy | bool | `false` | Configure the eBPF-based TPROXY (beta) to reduce reliance on iptables rules for implementing Layer 7 policy. |
| bpf.tproxy | bool | `false` | Configure the eBPF-based TPROXY (beta) to reduce reliance on iptables rules for implementing Layer 7 policy. Note this is incompatible with netkit (`bpf.datapathMode=netkit`, `bpf.datapathMode=netkit-l2`). |
| bpf.vlanBypass | list | `[]` | Configure explicitly allowed VLAN id's for bpf logic bypass. [0] will allow all VLAN id's without any filtering. |
| bpfClockProbe | bool | `false` | Enable BPF clock source probing for more efficient tick retrieval. |
| certgen | object | `{"affinity":{},"annotations":{"cronJob":{},"job":{}},"extraVolumeMounts":[],"extraVolumes":[],"generateCA":true,"image":{"digest":"sha256:2825dbfa6f89cbed882fd1d81e46a56c087e35885825139923aa29eb8aec47a9","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/certgen","tag":"v0.3.1","useDigest":true},"nodeSelector":{},"podLabels":{},"priorityClassName":"","resources":{},"tolerations":[],"ttlSecondsAfterFinished":1800}` | Configure certificate generation for Hubble integration. If hubble.tls.auto.method=cronJob, these values are used for the Kubernetes CronJob which will be scheduled regularly to (re)generate any certificates not provided manually. |
| certgen | object | `{"affinity":{},"annotations":{"cronJob":{},"job":{}},"cronJob":{"failedJobsHistoryLimit":1,"successfulJobsHistoryLimit":3},"extraVolumeMounts":[],"extraVolumes":[],"generateCA":true,"image":{"digest":"sha256:19921f48ee7e2295ea4dca955878a6cd8d70e6d4219d08f688e866ece9d95d4d","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/certgen","tag":"v0.3.2","useDigest":true},"nodeSelector":{},"podLabels":{},"priorityClassName":"","resources":{},"tolerations":[],"ttlSecondsAfterFinished":null}` | Configure certificate generation for Hubble integration. If hubble.tls.auto.method=cronJob, these values are used for the Kubernetes CronJob which will be scheduled regularly to (re)generate any certificates not provided manually. |
| certgen.affinity | object | `{}` | Affinity for certgen |
| certgen.annotations | object | `{"cronJob":{},"job":{}}` | Annotations to be added to the hubble-certgen initial Job and CronJob |
| certgen.cronJob.failedJobsHistoryLimit | int | `1` | The number of failed finished jobs to keep |
| certgen.cronJob.successfulJobsHistoryLimit | int | `3` | The number of successful finished jobs to keep |
| certgen.extraVolumeMounts | list | `[]` | Additional certgen volumeMounts. |
| certgen.extraVolumes | list | `[]` | Additional certgen volumes. |
| certgen.generateCA | bool | `true` | When set to true the certificate authority secret is created. |
@@ -179,7 +188,7 @@ contributors across the globe, there is almost always someone available to help.
| certgen.priorityClassName | string | `""` | Priority class for certgen ref: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass |
| certgen.resources | object | `{}` | Resource limits for certgen ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers |
| certgen.tolerations | list | `[]` | Node tolerations for pod assignment on nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| certgen.ttlSecondsAfterFinished | int | `1800` | Seconds after which the completed job pod will be deleted |
| certgen.ttlSecondsAfterFinished | string | `nil` | Seconds after which the completed job pod will be deleted |
| cgroup | object | `{"autoMount":{"enabled":true,"resources":{}},"hostRoot":"/run/cilium/cgroupv2"}` | Configure cgroup related configuration |
| cgroup.autoMount.enabled | bool | `true` | Enable auto mount of cgroup2 filesystem. When `autoMount` is enabled, cgroup2 filesystem is mounted at `cgroup.hostRoot` path on the underlying host and inside the cilium agent pod. If users disable `autoMount`, it's expected that users have mounted cgroup2 filesystem at the specified `cgroup.hostRoot` volume, and then the volume will be mounted inside the cilium agent pod at the same path. |
| cgroup.autoMount.resources | object | `{}` | Init Container Cgroup Automount resource limits & requests |
@@ -205,7 +214,7 @@ contributors across the globe, there is almost always someone available to help.
| clustermesh.apiserver.extraVolumeMounts | list | `[]` | Additional clustermesh-apiserver volumeMounts. |
| clustermesh.apiserver.extraVolumes | list | `[]` | Additional clustermesh-apiserver volumes. |
| clustermesh.apiserver.healthPort | int | `9880` | TCP port for the clustermesh-apiserver health API. |
| clustermesh.apiserver.image | object | `{"digest":"sha256:8ee142912a0e261850c0802d9256ddbe3729e1cd35c6bea2d93077f334c3cf3b","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/clustermesh-apiserver","tag":"v1.18.6","useDigest":true}` | Clustermesh API server image. |
| clustermesh.apiserver.image | object | `{"digest":"sha256:56d6c3dc13b50126b80ecb571707a0ea97f6db694182b9d61efd386d04e5bb28","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/clustermesh-apiserver","tag":"v1.19.1","useDigest":true}` | Clustermesh API server image. |
| clustermesh.apiserver.kvstoremesh.enabled | bool | `true` | Enable KVStoreMesh. KVStoreMesh caches the information retrieved from the remote clusters in the local etcd instance (deprecated - KVStoreMesh will always be enabled once the option is removed). |
| clustermesh.apiserver.kvstoremesh.extraArgs | list | `[]` | Additional KVStoreMesh arguments. |
| clustermesh.apiserver.kvstoremesh.extraEnv | list | `[]` | Additional KVStoreMesh environment variables. |
@@ -255,38 +264,65 @@ contributors across the globe, there is almost always someone available to help.
| clustermesh.apiserver.service.annotations | object | `{}` | Annotations for the clustermesh-apiserver service. Example annotations to configure an internal load balancer on different cloud providers: * AKS: service.beta.kubernetes.io/azure-load-balancer-internal: "true" * EKS: service.beta.kubernetes.io/aws-load-balancer-scheme: "internal" * GKE: networking.gke.io/load-balancer-type: "Internal" |
| clustermesh.apiserver.service.enableSessionAffinity | string | `"HAOnly"` | Defines when to enable session affinity. Each replica in a clustermesh-apiserver deployment runs its own discrete etcd cluster. Remote clients connect to one of the replicas through a shared Kubernetes Service. A client reconnecting to a different backend will require a full resync to ensure data integrity. Session affinity can reduce the likelihood of this happening, but may not be supported by all cloud providers. Possible values: - "HAOnly" (default) Only enable session affinity for deployments with more than 1 replica. - "Always" Always enable session affinity. - "Never" Never enable session affinity. Useful in environments where session affinity is not supported, but may lead to slightly degraded performance due to more frequent reconnections. |
| clustermesh.apiserver.service.externalTrafficPolicy | string | `"Cluster"` | The externalTrafficPolicy of service used for apiserver access. |
| clustermesh.apiserver.service.externallyCreated | bool | `false` | Set externallyCreated to true to create the clustermesh-apiserver service outside this helm chart. For example after external load balancer controllers are created. |
| clustermesh.apiserver.service.internalTrafficPolicy | string | `"Cluster"` | The internalTrafficPolicy of service used for apiserver access. |
| clustermesh.apiserver.service.labels | object | `{}` | Labels for the clustermesh-apiserver service. |
| clustermesh.apiserver.service.loadBalancerClass | string | `nil` | Configure a loadBalancerClass. Allows to configure the loadBalancerClass on the clustermesh-apiserver LB service in case the Service type is set to LoadBalancer (requires Kubernetes 1.24+). |
| clustermesh.apiserver.service.loadBalancerIP | string | `nil` | Configure a specific loadBalancerIP. Allows to configure a specific loadBalancerIP on the clustermesh-apiserver LB service in case the Service type is set to LoadBalancer. |
| clustermesh.apiserver.service.loadBalancerSourceRanges | list | `[]` | Configure loadBalancerSourceRanges. Allows to configure the source IP ranges allowed to access the clustermesh-apiserver LB service in case the Service type is set to LoadBalancer. |
| clustermesh.apiserver.service.nodePort | int | `32379` | Optional port to use as the node port for apiserver access. WARNING: make sure to configure a different NodePort in each cluster if kube-proxy replacement is enabled, as Cilium is currently affected by a known bug (#24692) when NodePorts are handled by the KPR implementation. If a service with the same NodePort exists both in the local and the remote cluster, all traffic originating from inside the cluster and targeting the corresponding NodePort will be redirected to a local backend, regardless of whether the destination node belongs to the local or the remote cluster. |
| clustermesh.apiserver.service.nodePort | int | `32379` | Optional port to use as the node port for apiserver access. |
| clustermesh.apiserver.service.type | string | `"NodePort"` | The type of service used for apiserver access. |
| clustermesh.apiserver.terminationGracePeriodSeconds | int | `30` | terminationGracePeriodSeconds for the clustermesh-apiserver deployment |
| clustermesh.apiserver.tls.admin | object | `{"cert":"","key":""}` | base64 encoded PEM values for the clustermesh-apiserver admin certificate and private key. Used if 'auto' is not enabled. |
| clustermesh.apiserver.tls.authMode | string | `"legacy"` | Configure the clustermesh authentication mode. Supported values: - legacy: All clusters access remote clustermesh instances with the same username (i.e., remote). The "remote" certificate must be generated with CN=remote if provided manually. - migration: Intermediate mode required to upgrade from legacy to cluster (and vice versa) with no disruption. Specifically, it enables the creation of the per-cluster usernames, while still using the common one for authentication. The "remote" certificate must be generated with CN=remote if provided manually (same as legacy). - cluster: Each cluster accesses remote etcd instances with a username depending on the local cluster name (i.e., remote-<cluster-name>). The "remote" certificate must be generated with CN=remote-<cluster-name> if provided manually. Cluster mode is meaningful only when the same CA is shared across all clusters part of the mesh. |
| clustermesh.apiserver.tls.admin.cert | string | `""` | Deprecated, as secrets will always need to be created externally if `auto` is disabled. |
| clustermesh.apiserver.tls.admin.key | string | `""` | Deprecated, as secrets will always need to be created externally if `auto` is disabled. |
| clustermesh.apiserver.tls.authMode | string | `"migration"` | Configure the clustermesh authentication mode. Supported values: - legacy: All clusters access remote clustermesh instances with the same username (i.e., remote). The "remote" certificate must be generated with CN=remote if provided manually. - migration: Intermediate mode required to upgrade from legacy to cluster (and vice versa) with no disruption. Specifically, it enables the creation of the per-cluster usernames, while still using the common one for authentication. The "remote" certificate must be generated with CN=remote if provided manually (same as legacy). - cluster: Each cluster accesses remote etcd instances with a username depending on the local cluster name (i.e., remote-<cluster-name>). The "remote" certificate must be generated with CN=remote-<cluster-name> if provided manually. Cluster mode is meaningful only when the same CA is shared across all clusters part of the mesh. |
| clustermesh.apiserver.tls.auto | object | `{"certManagerIssuerRef":{},"certValidityDuration":1095,"enabled":true,"method":"helm"}` | Configure automatic TLS certificates generation. A Kubernetes CronJob is used the generate any certificates not provided by the user at installation time. |
| clustermesh.apiserver.tls.auto.certManagerIssuerRef | object | `{}` | certmanager issuer used when clustermesh.apiserver.tls.auto.method=certmanager. |
| clustermesh.apiserver.tls.auto.certValidityDuration | int | `1095` | Generated certificates validity duration in days. |
| clustermesh.apiserver.tls.auto.enabled | bool | `true` | When set to true, automatically generate a CA and certificates to enable mTLS between clustermesh-apiserver and external workload instances. If set to false, the certs to be provided by setting appropriate values below. |
| clustermesh.apiserver.tls.client | object | `{"cert":"","key":""}` | base64 encoded PEM values for the clustermesh-apiserver client certificate and private key. Used if 'auto' is not enabled. |
| clustermesh.apiserver.tls.enableSecrets | bool | `true` | Allow users to provide their own certificates Users may need to provide their certificates using a mechanism that requires they provide their own secrets. This setting does not apply to any of the auto-generated mechanisms below, it only restricts the creation of secrets via the `tls-provided` templates. |
| clustermesh.apiserver.tls.auto.enabled | bool | `true` | When set to true, automatically generate a CA and certificates to enable mTLS between clustermesh-apiserver and external workload instances. When set to false you need to pre-create the following secrets: - clustermesh-apiserver-server-cert - clustermesh-apiserver-admin-cert - clustermesh-apiserver-remote-cert - clustermesh-apiserver-local-cert The above secret should at least contains the keys `tls.crt` and `tls.key` and optionally `ca.crt` if a CA bundle is not configured. |
| clustermesh.apiserver.tls.enableSecrets | deprecated | `true` | Allow users to provide their own certificates Users may need to provide their certificates using a mechanism that requires they provide their own secrets. This setting does not apply to any of the auto-generated mechanisms below, it only restricts the creation of secrets via the `tls-provided` templates. This option is deprecated as secrets are expected to be created externally when 'auto' is not enabled. |
| clustermesh.apiserver.tls.remote | object | `{"cert":"","key":""}` | base64 encoded PEM values for the clustermesh-apiserver remote cluster certificate and private key. Used if 'auto' is not enabled. |
| clustermesh.apiserver.tls.remote.cert | string | `""` | Deprecated, as secrets will always need to be created externally if `auto` is disabled. |
| clustermesh.apiserver.tls.remote.key | string | `""` | Deprecated, as secrets will always need to be created externally if `auto` is disabled. |
| clustermesh.apiserver.tls.server | object | `{"cert":"","extraDnsNames":[],"extraIpAddresses":[],"key":""}` | base64 encoded PEM values for the clustermesh-apiserver server certificate and private key. Used if 'auto' is not enabled. |
| clustermesh.apiserver.tls.server.cert | string | `""` | Deprecated, as secrets will always need to be created externally if `auto` is disabled. |
| clustermesh.apiserver.tls.server.extraDnsNames | list | `[]` | Extra DNS names added to certificate when it's auto generated |
| clustermesh.apiserver.tls.server.extraIpAddresses | list | `[]` | Extra IP addresses added to certificate when it's auto generated |
| clustermesh.apiserver.tls.server.key | string | `""` | Deprecated, as secrets will always need to be created externally if `auto` is disabled. |
| clustermesh.apiserver.tolerations | list | `[]` | Node tolerations for pod assignment on nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| clustermesh.apiserver.topologySpreadConstraints | list | `[]` | Pod topology spread constraints for clustermesh-apiserver |
| clustermesh.apiserver.updateStrategy | object | `{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"}` | clustermesh-apiserver update strategy |
| clustermesh.cacheTTL | string | `"0s"` | The time to live for the cache of a remote cluster after connectivity is lost. If the connection is not re-established within this duration, the cached data is revoked to prevent stale state. If not specified or set to 0s, the cache is never revoked (default). |
| clustermesh.config | object | `{"clusters":[],"domain":"mesh.cilium.io","enabled":false}` | Clustermesh explicit configuration. |
| clustermesh.config.clusters | list | `[]` | List of clusters to be peered in the mesh. |
| clustermesh.config.clusters | list | `[]` | Clusters to be peered in the mesh. @schema type: [object, array] @schema |
| clustermesh.config.domain | string | `"mesh.cilium.io"` | Default dns domain for the Clustermesh API servers This is used in the case cluster addresses are not provided and IPs are used. |
| clustermesh.config.enabled | bool | `false` | Enable the Clustermesh explicit configuration. |
| clustermesh.config.enabled | bool | `false` | Enable the Clustermesh explicit configuration. If set to false, you need to provide the following resources yourself: - (Secret) cilium-clustermesh (used by cilium-agent/cilium-operator to connect to the local etcd instance if KVStoreMesh is enabled or the remote clusters if KVStoreMesh is disabled) - (Secret) cilium-kvstoremesh (used by KVStoreMesh to connect to the remote clusters) - (ConfigMap) clustermesh-remote-users (used to create one etcd user per remote cluster if clustermesh-apiserver is used and `clustermesh.apiserver.tls.authMode` is not set to `legacy`) |
| clustermesh.enableEndpointSliceSynchronization | bool | `false` | Enable the synchronization of Kubernetes EndpointSlices corresponding to the remote endpoints of appropriately-annotated global services through ClusterMesh |
| clustermesh.enableMCSAPISupport | bool | `false` | Enable Multi-Cluster Services API support |
| clustermesh.enableMCSAPISupport | bool | `false` | Enable Multi-Cluster Services API support (deprecated; use clustermesh.mcsapi.enabled) |
| clustermesh.maxConnectedClusters | int | `255` | The maximum number of clusters to support in a ClusterMesh. This value cannot be changed on running clusters, and all clusters in a ClusterMesh must be configured with the same value. Values > 255 will decrease the maximum allocatable cluster-local identities. Supported values are 255 and 511. |
| clustermesh.policyDefaultLocalCluster | bool | `false` | Control whether policy rules assume by default the local cluster if not explicitly selected |
| clustermesh.useAPIServer | bool | `false` | Deploy clustermesh-apiserver for clustermesh |
| clustermesh.mcsapi.corednsAutoConfigure.affinity | object | `{}` | Affinity for coredns-mcsapi-autoconfig |
| clustermesh.mcsapi.corednsAutoConfigure.annotations | object | `{}` | Annotations to be added to the coredns-mcsapi-autoconfig Job |
| clustermesh.mcsapi.corednsAutoConfigure.coredns.clusterDomain | string | `"cluster.local"` | The cluster domain for the cluster CoreDNS service |
| clustermesh.mcsapi.corednsAutoConfigure.coredns.clustersetDomain | string | `"clusterset.local"` | The clusterset domain for the cluster CoreDNS service |
| clustermesh.mcsapi.corednsAutoConfigure.coredns.configMapName | string | `"coredns"` | The ConfigMap name for the cluster CoreDNS service |
| clustermesh.mcsapi.corednsAutoConfigure.coredns.deploymentName | string | `"coredns"` | The Deployment for the cluster CoreDNS service |
| clustermesh.mcsapi.corednsAutoConfigure.coredns.namespace | string | `"kube-system"` | The namespace for the cluster CoreDNS service |
| clustermesh.mcsapi.corednsAutoConfigure.coredns.serviceAccountName | string | `"coredns"` | The Service Account name for the cluster CoreDNS service |
| clustermesh.mcsapi.corednsAutoConfigure.enabled | bool | `false` | Enable auto-configuration of CoreDNS for Multi-Cluster Services API. CoreDNS MUST be at least in version v1.12.2 to run this. |
| clustermesh.mcsapi.corednsAutoConfigure.extraArgs | list | `[]` | Additional arguments to `clustermesh-apiserver coredns-mcsapi-auto-configure`. |
| clustermesh.mcsapi.corednsAutoConfigure.extraVolumeMounts | list | `[]` | Additional coredns-mcsapi-autoconfig volumeMounts. |
| clustermesh.mcsapi.corednsAutoConfigure.extraVolumes | list | `[]` | Additional coredns-mcsapi-autoconfig volumes. |
| clustermesh.mcsapi.corednsAutoConfigure.nodeSelector | object | `{}` | Node selector for coredns-mcsapi-autoconfig ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
| clustermesh.mcsapi.corednsAutoConfigure.podLabels | object | `{}` | Labels to be added to coredns-mcsapi-autoconfig pods |
| clustermesh.mcsapi.corednsAutoConfigure.priorityClassName | string | `""` | Priority class for coredns-mcsapi-autoconfig ref: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass |
| clustermesh.mcsapi.corednsAutoConfigure.resources | object | `{}` | Resource limits for coredns-mcsapi-autoconfig ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers |
| clustermesh.mcsapi.corednsAutoConfigure.tolerations | list | `[]` | Node tolerations for pod assignment on nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| clustermesh.mcsapi.corednsAutoConfigure.ttlSecondsAfterFinished | int | `1800` | Seconds after which the completed job pod will be deleted |
| clustermesh.mcsapi.enabled | bool | `false` | Enable Multi-Cluster Services API support |
| clustermesh.mcsapi.installCRDs | bool | `true` | Enabled MCS-API CRDs auto-installation |
| clustermesh.policyDefaultLocalCluster | bool | `true` | Control whether policy rules assume by default the local cluster if not explicitly selected |
| clustermesh.useAPIServer | bool | `false` | Deploy clustermesh-apiserver for clustermesh. This option is typically used with ``clustermesh.config.enabled=true``. Refer to the ``clustermesh.config.enabled=true``documentation for more information. |
| cni.binPath | string | `"/opt/cni/bin"` | Configure the path to the CNI binary directory on the host. |
| cni.chainingMode | string | `nil` | Configure chaining on top of other CNI plugins. Possible values: - none - aws-cni - flannel - generic-veth - portmap |
| cni.chainingTarget | string | `nil` | A CNI network name in to which the Cilium plugin should be added as a chained plugin. This will cause the agent to watch for a CNI network with this network name. When it is found, this will be used as the basis for Cilium's CNI configuration file. If this is set, it assumes a chaining mode of generic-veth. As a special case, a chaining mode of aws-cni implies a chainingTarget of aws-cni. |
@@ -301,15 +337,13 @@ contributors across the globe, there is almost always someone available to help.
| cni.install | bool | `true` | Install the CNI configuration and binary files into the filesystem. |
| cni.iptablesRemoveAWSRules | bool | `true` | Enable the removal of iptables rules created by the AWS CNI VPC plugin. |
| cni.logFile | string | `"/var/run/cilium/cilium-cni.log"` | Configure the log file for CNI logging with retention policy of 7 days. Disable CNI file logging by setting this field to empty explicitly. |
| cni.resources | object | `{"requests":{"cpu":"100m","memory":"10Mi"}}` | Specifies the resources for the cni initContainer |
| cni.resources | object | `{"limits":{"cpu":1,"memory":"1Gi"},"requests":{"cpu":"100m","memory":"10Mi"}}` | Specifies the resources for the cni initContainer |
| cni.uninstall | bool | `false` | Remove the CNI configuration and binary files on agent shutdown. Enable this if you're removing Cilium from the cluster. Disable this to prevent the CNI configuration file from being removed during agent upgrade, which can cause nodes to go unmanageable. |
| commonLabels | object | `{}` | commonLabels allows users to add common labels for all Cilium resources. |
| connectivityProbeFrequencyRatio | float64 | `0.5` | Ratio of the connectivity probe frequency vs resource usage, a float in [0, 1]. 0 will give more frequent probing, 1 will give less frequent probing. Probing frequency is dynamically adjusted based on the cluster size. |
| conntrackGCInterval | string | `"0s"` | Configure how frequently garbage collection should occur for the datapath connection tracking table. |
| conntrackGCMaxInterval | string | `""` | Configure the maximum frequency for the garbage collection of the connection tracking table. Only affects the automatic computation for the frequency and has no effect when 'conntrackGCInterval' is set. This can be set to more frequently clean up unused identities created from ToFQDN policies. |
| crdWaitTimeout | string | `"5m"` | Configure timeout in which Cilium will exit if CRDs are not available |
| customCalls | object | `{"enabled":false}` | Tail call hooks for custom eBPF programs. |
| customCalls.enabled | bool | `false` | Enable tail call hooks for custom eBPF programs. |
| daemon.allowedConfigOverrides | string | `nil` | allowedConfigOverrides is a list of config-map keys that can be overridden. That is to say, if this value is set, config sources (excepting the first one) can only override keys in this list. This takes precedence over blockedConfigOverrides. By default, all keys may be overridden. To disable overrides, set this to "none" or change the configSources variable. |
| daemon.blockedConfigOverrides | string | `nil` | blockedConfigOverrides is a list of config-map keys that may not be overridden. In other words, if any of these keys appear in a configuration source excepting the first one, they will be ignored This is ignored if allowedConfigOverrides is set. By default, all keys may be overridden. |
| daemon.configSources | string | `nil` | Configure a custom list of possible configuration override sources The default is "config-map:cilium-config,cilium-node-config". For supported values, see the help text for the build-config subcommand. Note that this value should be a comma-separated string. |
@@ -318,8 +352,8 @@ contributors across the globe, there is almost always someone available to help.
| dashboards | object | `{"annotations":{},"enabled":false,"label":"grafana_dashboard","labelValue":"1","namespace":null}` | Grafana dashboards for cilium-agent grafana can import dashboards based on the label and value ref: https://github.com/grafana/helm-charts/tree/main/charts/grafana#sidecar-for-dashboards |
| debug.enabled | bool | `false` | Enable debug logging |
| debug.metricsSamplingInterval | string | `"5m"` | Set the agent-internal metrics sampling frequency. This sets the frequency of the internal sampling of the agent metrics. These are available via the "cilium-dbg shell -- metrics -s" command and are part of the metrics HTML page included in the sysdump. @schema type: [null, string] @schema |
| debug.verbose | string | `nil` | Configure verbosity levels for debug logging This option is used to enable debug messages for operations related to such sub-system such as (e.g. kvstore, envoy, datapath or policy), and flow is for enabling debug messages emitted per request, message and connection. Multiple values can be set via a space-separated string (e.g. "datapath envoy"). Applicable values: - flow - kvstore - envoy - datapath - policy |
| defaultLBServiceIPAM | string | `"lbipam"` | defaultLBServiceIPAM indicates the default LoadBalancer Service IPAM when no LoadBalancer class is set. Applicable values: lbipam, nodeipam, none @schema type: [string] @schema |
| debug.verbose | string | `nil` | Configure verbosity levels for debug logging This option is used to enable debug messages for operations related to such sub-system such as (e.g. kvstore, envoy, datapath, policy, or tagged), and flow is for enabling debug messages emitted per request, message and connection. Multiple values can be set via a space-separated string (e.g. "datapath envoy"). Applicable values: - flow - kvstore - envoy - datapath - policy - tagged |
| defaultLBServiceIPAM | string | `"lbipam"` | defaultLBServiceIPAM indicates the default LoadBalancer Service IPAM when no LoadBalancer class is set. Applicable values: lbipam, nodeipam, none |
| directRoutingSkipUnreachable | bool | `false` | Enable skipping of PodCIDR routes between worker nodes if the worker nodes are in a different L2 network segment. |
| disableEndpointCRD | bool | `false` | Disable the usage of CiliumEndpoint CRD. |
| dnsPolicy | string | `""` | DNS policy for Cilium agent pods. Ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy |
@@ -338,13 +372,15 @@ contributors across the globe, there is almost always someone available to help.
| egressGateway.reconciliationTriggerInterval | string | `"1s"` | Time between triggers of egress gateway state reconciliations |
| enableCriticalPriorityClass | bool | `true` | Explicitly enable or disable priority class. .Capabilities.KubeVersion is unsettable in `helm template` calls, it depends on k8s libraries version that Helm was compiled against. This option allows to explicitly disable setting the priority class, which is useful for rendering charts for gke clusters in advance. |
| enableIPv4BIGTCP | bool | `false` | Enables IPv4 BIG TCP support which increases maximum IPv4 GSO/GRO limits for nodes and pods |
| enableIPv4Masquerade | bool | `true` unless ipam eni mode is active | Enables masquerading of IPv4 traffic leaving the node from endpoints. |
| enableIPv4Masquerade | bool | `true` unless ipam eni mode is active | Enables masquerading of IPv4 traffic leaving the node from endpoints. |
| enableIPv6BIGTCP | bool | `false` | Enables IPv6 BIG TCP support which increases maximum IPv6 GSO/GRO limits for nodes and pods |
| enableIPv6Masquerade | bool | `true` | Enables masquerading of IPv6 traffic leaving the node from endpoints. |
| enableInternalTrafficPolicy | bool | `true` | Enable Internal Traffic Policy |
| enableLBIPAM | bool | `true` | Enable LoadBalancer IP Address Management |
| enableMasqueradeRouteSource | bool | `false` | Enables masquerading to the source of the route for traffic leaving the node from endpoints. |
| enableNoServiceEndpointsRoutable | bool | `true` | Enable routing to a service that has zero endpoints |
| enableNonDefaultDenyPolicies | bool | `true` | Enable Non-Default-Deny policies |
| enableTunnelBIGTCP | bool | `false` | Enable BIG TCP in tunneling mode and increase maximum GRO/GSO limits for VXLAN/GENEVE tunnels |
| enableXTSocketFallback | bool | `true` | Enables the fallback compatibility solution for when the xt_socket kernel module is missing and it is needed for the datapath L7 redirection to work properly. See documentation for details on when this can be disabled: https://docs.cilium.io/en/stable/operations/system_requirements/#linux-kernel. |
| encryption.enabled | bool | `false` | Enable transparent network encryption. |
| encryption.ipsec.encryptedOverlay | bool | `false` | Enable IPsec encrypted overlay |
@@ -355,11 +391,15 @@ contributors across the globe, there is almost always someone available to help.
| encryption.ipsec.mountPath | string | `"/etc/ipsec"` | Path to mount the secret inside the Cilium pod. |
| encryption.ipsec.secretName | string | `"cilium-ipsec-keys"` | Name of the Kubernetes secret containing the encryption keys. |
| encryption.nodeEncryption | bool | `false` | Enable encryption for pure node to node traffic. This option is only effective when encryption.type is set to "wireguard". |
| encryption.strictMode | object | `{"allowRemoteNodeIdentities":false,"cidr":"","enabled":false}` | Configure the WireGuard Pod2Pod strict mode. |
| encryption.strictMode.allowRemoteNodeIdentities | bool | `false` | Allow dynamic lookup of remote node identities. This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap. |
| encryption.strictMode.cidr | string | `""` | CIDR for the WireGuard Pod2Pod strict mode. |
| encryption.strictMode.enabled | bool | `false` | Enable WireGuard Pod2Pod strict mode. |
| encryption.type | string | `"ipsec"` | Encryption method. Can be either ipsec or wireguard. |
| encryption.strictMode | object | `{"allowRemoteNodeIdentities":false,"cidr":"","egress":{"allowRemoteNodeIdentities":false,"cidr":"","enabled":false},"enabled":false,"ingress":{"enabled":false}}` | Configure the Encryption Pod2Pod strict mode. |
| encryption.strictMode.allowRemoteNodeIdentities | bool | `false` | Allow dynamic lookup of remote node identities. (deprecated: please use encryption.strictMode.egress.allowRemoteNodeIdentities) This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap. |
| encryption.strictMode.cidr | string | `""` | CIDR for the Encryption Pod2Pod strict mode. (deprecated: please use encryption.strictMode.egress.cidr) |
| encryption.strictMode.egress.allowRemoteNodeIdentities | bool | `false` | Allow dynamic lookup of remote node identities. This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap. |
| encryption.strictMode.egress.cidr | string | `""` | CIDR for the Encryption Pod2Pod strict egress mode. |
| encryption.strictMode.egress.enabled | bool | `false` | Enable strict egress encryption. |
| encryption.strictMode.enabled | bool | `false` | Enable Encryption Pod2Pod strict mode. (deprecated: please use encryption.strictMode.egress.enabled) |
| encryption.strictMode.ingress.enabled | bool | `false` | Enable strict ingress encryption. When enabled, all unencrypted overlay ingress traffic will be dropped. This option is only applicable when WireGuard and tunneling are enabled. |
| encryption.type | string | `"ipsec"` | Encryption method. Can be one of ipsec, wireguard or ztunnel. |
| encryption.wireguard.persistentKeepalive | string | `"0s"` | Controls WireGuard PersistentKeepalive option. Set 0s to disable. |
| endpointHealthChecking.enabled | bool | `true` | Enable connectivity health checking between virtual endpoints. |
| endpointLockdownOnMapOverflow | bool | `false` | Enable endpoint lockdown on policy map overflow. |
@@ -373,12 +413,24 @@ contributors across the globe, there is almost always someone available to help.
| eni.gcTags | object | `{"io.cilium/cilium-managed":"true,"io.cilium/cluster-name":"<auto-detected>"}` | Additional tags attached to ENIs created by Cilium. Dangling ENIs with this tag will be garbage collected |
| eni.iamRole | string | `""` | If using IAM role for Service Accounts will not try to inject identity values from cilium-aws kubernetes secret. Adds annotation to service account if managed by Helm. See https://github.com/aws/amazon-eks-pod-identity-webhook |
| eni.instanceTagsFilter | list | `[]` | Filter via AWS EC2 Instance tags (k=v) which will dictate which AWS EC2 Instances are going to be used to create new ENIs |
| eni.nodeSpec | object | `{"deleteOnTermination":null,"disablePrefixDelegation":false,"excludeInterfaceTags":[],"firstInterfaceIndex":null,"securityGroupTags":[],"securityGroups":[],"subnetIDs":[],"subnetTags":[],"usePrimaryAddress":false}` | NodeSpec configuration for the ENI |
| eni.nodeSpec.deleteOnTermination | string | `nil` | Delete ENI on termination @schema type: [null, boolean] @schema |
| eni.nodeSpec.disablePrefixDelegation | bool | `false` | Disable prefix delegation for IP allocation |
| eni.nodeSpec.excludeInterfaceTags | list | `[]` | Exclude interface tags to use for IP allocation |
| eni.nodeSpec.firstInterfaceIndex | string | `nil` | First interface index to use for IP allocation @schema type: [null, integer] @schema |
| eni.nodeSpec.securityGroupTags | list | `[]` | Security group tags to use for IP allocation |
| eni.nodeSpec.securityGroups | list | `[]` | Security groups to use for IP allocation |
| eni.nodeSpec.subnetIDs | list | `[]` | Subnet IDs to use for IP allocation |
| eni.nodeSpec.subnetTags | list | `[]` | Subnet tags to use for IP allocation |
| eni.nodeSpec.usePrimaryAddress | bool | `false` | Use primary address for IP allocation |
| eni.subnetIDsFilter | list | `[]` | Filter via subnet IDs which will dictate which subnets are going to be used to create new ENIs Important note: This requires that each instance has an ENI with a matching subnet attached when Cilium is deployed. If you only want to control subnets for ENIs attached by Cilium, use the CNI configuration file settings (cni.customConf) instead. |
| eni.subnetTagsFilter | list | `[]` | Filter via tags (k=v) which will dictate which subnets are going to be used to create new ENIs Important note: This requires that each instance has an ENI with a matching subnet attached when Cilium is deployed. If you only want to control subnets for ENIs attached by Cilium, use the CNI configuration file settings (cni.customConf) instead. |
| envoy.affinity | object | `{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"cilium.io/no-schedule","operator":"NotIn","values":["true"]}]}]}},"podAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchLabels":{"k8s-app":"cilium"}},"topologyKey":"kubernetes.io/hostname"}]},"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchLabels":{"k8s-app":"cilium-envoy"}},"topologyKey":"kubernetes.io/hostname"}]}}` | Affinity for cilium-envoy. |
| envoy.annotations | object | `{}` | Annotations to be added to all top-level cilium-envoy objects (resources under templates/cilium-envoy) |
| envoy.baseID | int | `0` | Set Envoy'--base-id' to use when allocating shared memory regions. Only needs to be changed if multiple Envoy instances will run on the same node and may have conflicts. Supported values: 0 - 4294967295. Defaults to '0' |
| envoy.bootstrapConfigMap | string | `nil` | ADVANCED OPTION: Bring your own custom Envoy bootstrap ConfigMap. Provide the name of a ConfigMap with a `bootstrap-config.json` key. When specified, Envoy will use this ConfigMap instead of the default provided by the chart. WARNING: Use of this setting has the potential to prevent cilium-envoy from starting up, and can cause unexpected behavior (e.g. due to syntax error or semantically incorrect configuration). Before submitting an issue, please ensure you have disabled this feature, as support cannot be provided for custom Envoy bootstrap configs. @schema type: [null, string] @schema |
| envoy.clusterMaxConnections | int | `1024` | Maximum number of connections on Envoy clusters |
| envoy.clusterMaxRequests | int | `1024` | Maximum number of requests on Envoy clusters |
| envoy.connectTimeoutSeconds | int | `2` | Time in seconds after which a TCP connection attempt times out |
| envoy.debug.admin.enabled | bool | `false` | Enable admin interface for cilium-envoy. This is useful for debugging and should not be enabled in production. |
| envoy.debug.admin.port | int | `9901` | Port number (bound to loopback interface). kubectl port-forward can be used to access the admin interface. |
@@ -394,7 +446,8 @@ contributors across the globe, there is almost always someone available to help.
| envoy.httpRetryCount | int | `3` | Maximum number of retries for each HTTP request |
| envoy.httpUpstreamLingerTimeout | string | `nil` | Time in seconds to block Envoy worker thread while an upstream HTTP connection is closing. If set to 0, the connection is closed immediately (with TCP RST). If set to -1, the connection is closed asynchronously in the background. |
| envoy.idleTimeoutDurationSeconds | int | `60` | Set Envoy upstream HTTP idle connection timeout seconds. Does not apply to connections with pending requests. Default 60s |
| envoy.image | object | `{"digest":"sha256:81398e449f2d3d0a6a70527e4f641aaa685d3156bea0bb30712fae3fd8822b86","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium-envoy","tag":"v1.35.9-1767794330-db497dd19e346b39d81d7b5c0dedf6c812bcc5c9","useDigest":true}` | Envoy container image. |
| envoy.image | object | `{"digest":"sha256:8188114a2768b5f49d6ce58e168b20d765e0fbc64eee0d83241aa2b150ccd788","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium-envoy","tag":"v1.35.9-1770979049-232ed4a26881e4ab4f766f251f258ed424fff663","useDigest":true}` | Envoy container image. |
| envoy.initContainers | list | `[]` | Init containers added to the cilium Envoy DaemonSet. |
| envoy.initialFetchTimeoutSeconds | int | `30` | Time in seconds after which the initial fetch on an xDS stream is considered timed out |
| envoy.livenessProbe.enabled | bool | `true` | Enable liveness probe for cilium-envoy |
| envoy.livenessProbe.failureThreshold | int | `10` | failure threshold of liveness probe |
@@ -406,6 +459,7 @@ contributors across the globe, there is almost always someone available to help.
| envoy.log.path | string | `""` | Path to a separate Envoy log file, if any. Defaults to /dev/stdout. |
| envoy.maxConcurrentRetries | int | `128` | Maximum number of concurrent retries on Envoy clusters |
| envoy.maxConnectionDurationSeconds | int | `0` | Set Envoy HTTP option max_connection_duration seconds. Default 0 (disable) |
| envoy.maxGlobalDownstreamConnections | int | `50000` | Maximum number of global downstream connections |
| envoy.maxRequestsPerConnection | int | `0` | ProxyMaxRequestsPerConnection specifies the max_requests_per_connection setting for Envoy |
| envoy.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node selector for cilium-envoy. |
| envoy.podAnnotations | object | `{}` | Annotations to be added to envoy pods |
@@ -439,6 +493,7 @@ contributors across the globe, there is almost always someone available to help.
| envoy.terminationGracePeriodSeconds | int | `1` | Configure termination grace period for cilium-envoy DaemonSet. |
| envoy.tolerations | list | `[{"operator":"Exists"}]` | Node tolerations for envoy scheduling to nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| envoy.updateStrategy | object | `{"rollingUpdate":{"maxUnavailable":2},"type":"RollingUpdate"}` | cilium-envoy update strategy ref: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#updating-a-daemonset |
| envoy.useOriginalSourceAddress | bool | `true` | For cases when CiliumEnvoyConfig is not used directly (Ingress, Gateway), configures Cilium BPF Metadata listener filter to use the original source address when extracting the metadata for a request. |
| envoy.xffNumTrustedHopsL7PolicyEgress | int | `0` | Number of trusted hops regarding the x-forwarded-for and related HTTP headers for the egress L7 policy enforcement Envoy listeners. |
| envoy.xffNumTrustedHopsL7PolicyIngress | int | `0` | Number of trusted hops regarding the x-forwarded-for and related HTTP headers for the ingress L7 policy enforcement Envoy listeners. |
| envoyConfig.enabled | bool | `false` | Enable CiliumEnvoyConfig CRD CiliumEnvoyConfig CRD can also be implicitly enabled by other options. |
@@ -482,12 +537,13 @@ contributors across the globe, there is almost always someone available to help.
| hubble.dropEventEmitter.interval | string | `"2m"` | - Minimum time between emitting same events. |
| hubble.dropEventEmitter.reasons | list | `["auth_required","policy_denied"]` | - Drop reasons to emit events for. ref: https://docs.cilium.io/en/stable/_api/v1/flow/README/#dropreason |
| hubble.enabled | bool | `true` | Enable Hubble (true by default). |
| hubble.export | object | `{"dynamic":{"config":{"configMapName":"cilium-flowlog-config","content":[{"excludeFilters":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log","includeFilters":[],"name":"all"}],"createConfigMap":true},"enabled":false},"static":{"allowList":[],"denyList":[],"enabled":false,"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log"}}` | Hubble flows export. |
| hubble.export.dynamic | object | `{"config":{"configMapName":"cilium-flowlog-config","content":[{"excludeFilters":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log","includeFilters":[],"name":"all"}],"createConfigMap":true},"enabled":false}` | - Dynamic exporters configuration. Dynamic exporters may be reconfigured without a need of agent restarts. |
| hubble.export | object | `{"dynamic":{"config":{"configMapName":"cilium-flowlog-config","content":[{"aggregationInterval":"0s","excludeFilters":[],"fieldAggregate":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log","includeFilters":[],"name":"all"}],"createConfigMap":true},"enabled":false},"static":{"aggregationInterval":"0s","allowList":[],"denyList":[],"enabled":false,"fieldAggregate":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log"}}` | Hubble flows export. |
| hubble.export.dynamic | object | `{"config":{"configMapName":"cilium-flowlog-config","content":[{"aggregationInterval":"0s","excludeFilters":[],"fieldAggregate":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log","includeFilters":[],"name":"all"}],"createConfigMap":true},"enabled":false}` | - Dynamic exporters configuration. Dynamic exporters may be reconfigured without a need of agent restarts. |
| hubble.export.dynamic.config.configMapName | string | `"cilium-flowlog-config"` | -- Name of configmap with configuration that may be altered to reconfigure exporters within a running agents. |
| hubble.export.dynamic.config.content | list | `[{"excludeFilters":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log","includeFilters":[],"name":"all"}]` | -- Exporters configuration in YAML format. |
| hubble.export.dynamic.config.content | list | `[{"aggregationInterval":"0s","excludeFilters":[],"fieldAggregate":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log","includeFilters":[],"name":"all"}]` | -- Exporters configuration in YAML format. |
| hubble.export.dynamic.config.createConfigMap | bool | `true` | -- True if helm installer should create config map. Switch to false if you want to self maintain the file content. |
| hubble.export.static | object | `{"allowList":[],"denyList":[],"enabled":false,"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log"}` | - Static exporter configuration. Static exporter is bound to agent lifecycle. |
| hubble.export.static | object | `{"aggregationInterval":"0s","allowList":[],"denyList":[],"enabled":false,"fieldAggregate":[],"fieldMask":[],"fileCompress":false,"fileMaxBackups":5,"fileMaxSizeMb":10,"filePath":"/var/run/cilium/hubble/events.log"}` | - Static exporter configuration. Static exporter is bound to agent lifecycle. |
| hubble.export.static.aggregationInterval | string | `"0s"` | - Defines the interval at which to aggregate before exporting Hubble flows. Aggregation feature is only enabled when fieldAggregate is specified and aggregationInterval > 0s. |
| hubble.export.static.fileCompress | bool | `false` | - Enable compression of rotated files. |
| hubble.export.static.fileMaxBackups | int | `5` | - Defines max number of backup/rotated files. |
| hubble.export.static.fileMaxSizeMb | int | `10` | - Defines max file size of output file before it gets rotated. |
@@ -535,9 +591,12 @@ contributors across the globe, there is almost always someone available to help.
| hubble.relay.extraVolumes | list | `[]` | Additional hubble-relay volumes. |
| hubble.relay.gops.enabled | bool | `true` | Enable gops for hubble-relay |
| hubble.relay.gops.port | int | `9893` | Configure gops listen port for hubble-relay |
| hubble.relay.image | object | `{"digest":"sha256:fb6135e34c31e5f175cb5e75f86cea52ef2ff12b49bcefb7088ed93f5009eb8e","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/hubble-relay","tag":"v1.18.6","useDigest":true}` | Hubble-relay container image. |
| hubble.relay.image | object | `{"digest":"sha256:d8c4e13bc36a56179292bb52bc6255379cb94cb873700d316ea3139b1bdb8165","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/hubble-relay","tag":"v1.19.1","useDigest":true}` | Hubble-relay container image. |
| hubble.relay.listenHost | string | `""` | Host to listen to. Specify an empty string to bind to all the interfaces. |
| hubble.relay.listenPort | string | `"4245"` | Port to listen to. |
| hubble.relay.logOptions | object | `{"format":null,"level":null}` | Logging configuration for hubble-relay. |
| hubble.relay.logOptions.format | string | text-ts | Log format for hubble-relay. Valid values are: text, text-ts, json, json-ts. |
| hubble.relay.logOptions.level | string | info | Log level for hubble-relay. Valid values are: debug, info, warn, error. |
| hubble.relay.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node labels for pod assignment ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
| hubble.relay.podAnnotations | object | `{}` | Annotations to be added to hubble-relay pods |
| hubble.relay.podDisruptionBudget.enabled | bool | `false` | enable PodDisruptionBudget ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/ |
@@ -547,7 +606,9 @@ contributors across the globe, there is almost always someone available to help.
| hubble.relay.podLabels | object | `{}` | Labels to be added to hubble-relay pods |
| hubble.relay.podSecurityContext | object | `{"fsGroup":65532,"seccompProfile":{"type":"RuntimeDefault"}}` | hubble-relay pod security context |
| hubble.relay.pprof.address | string | `"localhost"` | Configure pprof listen address for hubble-relay |
| hubble.relay.pprof.blockProfileRate | int | `0` | Enable goroutine blocking profiling for hubble-relay and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead]) |
| hubble.relay.pprof.enabled | bool | `false` | Enable pprof for hubble-relay |
| hubble.relay.pprof.mutexProfileFraction | int | `0` | Enable mutex contention profiling for hubble-relay and set the fraction of sampled events (set to 1 to sample all events) |
| hubble.relay.pprof.port | int | `6062` | Configure pprof listen port for hubble-relay |
| hubble.relay.priorityClassName | string | `""` | The priority class to use for hubble-relay |
| hubble.relay.prometheus | object | `{"enabled":false,"port":9966,"serviceMonitor":{"annotations":{},"enabled":false,"interval":"10s","labels":{},"metricRelabelings":null,"relabelings":null,"scrapeTimeout":null}}` | Enable prometheus metrics for hubble-relay on the configured port at /metrics |
@@ -641,13 +702,14 @@ contributors across the globe, there is almost always someone available to help.
| hubble.ui.tls.client.cert | string | `""` | base64 encoded PEM values for the Hubble UI client certificate (deprecated). Use existingSecret instead. |
| hubble.ui.tls.client.existingSecret | string | `""` | Name of the Secret containing the client certificate and key for Hubble UI If specified, cert and key are ignored. |
| hubble.ui.tls.client.key | string | `""` | base64 encoded PEM values for the Hubble UI client key (deprecated). Use existingSecret instead. |
| hubble.ui.tmpVolume | object | `{}` | Configure temporary volume for hubble-ui |
| hubble.ui.tolerations | list | `[]` | Node tolerations for pod assignment on nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| hubble.ui.topologySpreadConstraints | list | `[]` | Pod topology spread constraints for hubble-ui |
| hubble.ui.updateStrategy | object | `{"rollingUpdate":{"maxUnavailable":1},"type":"RollingUpdate"}` | hubble-ui update strategy. |
| identityAllocationMode | string | `"crd"` | Method to use for identity allocation (`crd`, `kvstore` or `doublewrite-readkvstore` / `doublewrite-readcrd` for migrating between identity backends). |
| identityChangeGracePeriod | string | `"5s"` | Time to wait before using new identity on endpoint identity change. |
| identityManagementMode | string | `"agent"` | Control whether CiliumIdentities are created by the agent ("agent"), the operator ("operator") or both ("both"). "Both" should be used only to migrate between "agent" and "operator". Operator-managed identities is a beta feature. |
| image | object | `{"digest":"sha256:42ec562a5ff6c8a860c0639f5a7611685e253fd9eb2d2fcdade693724c9166a4","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium","tag":"v1.18.6","useDigest":true}` | Agent container image. |
| image | object | `{"digest":"sha256:41f1f74a0000de8656f1de4088ea00c8f2d49d6edea579034c73c5fd5fe01792","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium","tag":"v1.19.1","useDigest":true}` | Agent container image. |
| imagePullSecrets | list | `[]` | Configure image pull secrets for pulling container images |
| ingressController.default | bool | `false` | Set cilium ingress controller to be the default ingress controller This will let cilium ingress controller route entries without ingress class set |
| ingressController.defaultSecretName | string | `nil` | Default secret name for ingresses without .spec.tls[].secretName set. |
@@ -682,6 +744,11 @@ contributors across the globe, there is almost always someone available to help.
| ipam.installUplinkRoutesForDelegatedIPAM | bool | `false` | Install ingress/egress routes through uplink on host for Pods when working with delegated IPAM plugin. |
| ipam.mode | string | `"cluster-pool"` | Configure IP Address Management mode. ref: https://docs.cilium.io/en/stable/network/concepts/ipam/ |
| ipam.multiPoolPreAllocation | string | `""` | Pre-allocation settings for IPAM in Multi-Pool mode |
| ipam.nodeSpec | object | `{"ipamMaxAllocate":null,"ipamMinAllocate":null,"ipamPreAllocate":null,"ipamStaticIPTags":[]}` | NodeSpec configuration for the IPAM |
| ipam.nodeSpec.ipamMaxAllocate | string | `nil` | IPAM max allocate @schema type: [null, integer] @schema |
| ipam.nodeSpec.ipamMinAllocate | string | `nil` | IPAM min allocate @schema type: [null, integer] @schema |
| ipam.nodeSpec.ipamPreAllocate | string | `nil` | IPAM pre allocate @schema type: [null, integer] @schema |
| ipam.nodeSpec.ipamStaticIPTags | list | `[]` | IPAM static IP tags (currently only works with AWS and Azure) |
| ipam.operator.autoCreateCiliumPodIPPools | object | `{}` | IP pools to auto-create in multi-pool IPAM mode. |
| ipam.operator.clusterPoolIPv4MaskSize | int | `24` | IPv4 CIDR mask size to delegate to individual nodes for IPAM. |
| ipam.operator.clusterPoolIPv4PodCIDRList | list | `["10.0.0.0/8"]` | IPv4 CIDR list range to delegate to individual nodes for IPAM. |
@@ -744,19 +811,18 @@ contributors across the globe, there is almost always someone available to help.
| monitor | object | `{"enabled":false}` | cilium-monitor sidecar. |
| monitor.enabled | bool | `false` | Enable the cilium-monitor sidecar. |
| name | string | `"cilium"` | Agent daemonset name. |
| namespaceOverride | string | `""` | namespaceOverride allows to override the destination namespace for Cilium resources. This property allows to use Cilium as part of an Umbrella Chart with different targets. |
| namespaceOverride | string | `""` | namespaceOverride allows to override the destination namespace for Cilium resources. |
| nat.mapStatsEntries | int | `32` | Number of the top-k SNAT map connections to track in Cilium statedb. |
| nat.mapStatsInterval | string | `"30s"` | Interval between how often SNAT map is counted for stats. |
| nat46x64Gateway | object | `{"enabled":false}` | Configure standalone NAT46/NAT64 gateway |
| nat46x64Gateway.enabled | bool | `false` | Enable RFC6052-prefixed translation |
| nodeIPAM.enabled | bool | `false` | Configure Node IPAM ref: https://docs.cilium.io/en/stable/network/node-ipam/ |
| nodePort | object | `{"addresses":null,"autoProtectPortRange":true,"bindProtection":true,"enableHealthCheck":true,"enableHealthCheckLoadBalancerIP":false,"enabled":false}` | Configure N-S k8s service loadbalancing |
| nodePort | object | `{"addresses":null,"autoProtectPortRange":true,"bindProtection":true,"enableHealthCheck":true,"enableHealthCheckLoadBalancerIP":false}` | Configure N-S k8s service loadbalancing |
| nodePort.addresses | string | `nil` | List of CIDRs for choosing which IP addresses assigned to native devices are used for NodePort load-balancing. By default this is empty and the first suitable, preferably private, IPv4 and IPv6 address assigned to each device is used. Example: addresses: ["192.168.1.0/24", "2001::/64"] |
| nodePort.autoProtectPortRange | bool | `true` | Append NodePort range to ip_local_reserved_ports if clash with ephemeral ports is detected. |
| nodePort.bindProtection | bool | `true` | Set to true to prevent applications binding to service ports. |
| nodePort.enableHealthCheck | bool | `true` | Enable healthcheck nodePort server for NodePort services |
| nodePort.enableHealthCheckLoadBalancerIP | bool | `false` | Enable access of the healthcheck nodePort on the LoadBalancerIP. Needs EnableHealthCheck to be enabled |
| nodePort.enabled | bool | `false` | Enable the Cilium NodePort service implementation. |
| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node selector for cilium-agent. |
| nodeSelectorLabels | bool | `false` | Enable/Disable use of node label based identity |
| nodeinit.affinity | object | `{}` | Affinity for cilium-nodeinit |
@@ -766,7 +832,7 @@ contributors across the globe, there is almost always someone available to help.
| nodeinit.extraEnv | list | `[]` | Additional nodeinit environment variables. |
| nodeinit.extraVolumeMounts | list | `[]` | Additional nodeinit volumeMounts. |
| nodeinit.extraVolumes | list | `[]` | Additional nodeinit volumes. |
| nodeinit.image | object | `{"digest":"sha256:5bdca3c2dec2c79f58d45a7a560bf1098c2126350c901379fe850b7f78d3d757","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/startup-script","tag":"1755531540-60ee83e","useDigest":true}` | node-init image. |
| nodeinit.image | object | `{"digest":"sha256:50b9cf9c280096b59b80d2fc8ee6638facef79ac18998a22f0cbc40d5d28c16f","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/startup-script","tag":"1763560095-8f36c34","useDigest":true}` | node-init image. |
| nodeinit.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node labels for nodeinit pod assignment ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
| nodeinit.podAnnotations | object | `{}` | Annotations to be added to node-init pods. |
| nodeinit.podLabels | object | `{}` | Labels to be added to node-init pods. |
@@ -779,6 +845,7 @@ contributors across the globe, there is almost always someone available to help.
| nodeinit.startup | object | `{"postScript":"","preScript":""}` | startup offers way to customize startup nodeinit script (pre and post position) |
| nodeinit.tolerations | list | `[{"operator":"Exists"}]` | Node tolerations for nodeinit scheduling to nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| nodeinit.updateStrategy | object | `{"type":"RollingUpdate"}` | node-init update strategy |
| nodeinit.waitForCloudInit | bool | `false` | wait for Cloud init to finish on the host and assume the node has cloud init installed |
| operator.affinity | object | `{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchLabels":{"io.cilium/app":"operator"}},"topologyKey":"kubernetes.io/hostname"}]}}` | Affinity for cilium-operator |
| operator.annotations | object | `{}` | Annotations to be added to all top-level cilium-operator objects (resources under templates/cilium-operator) |
| operator.dashboards | object | `{"annotations":{},"enabled":false,"label":"grafana_dashboard","labelValue":"1","namespace":null}` | Grafana dashboards for cilium-operator grafana can import dashboards based on the label and value ref: https://github.com/grafana/helm-charts/tree/main/charts/grafana#sidecar-for-dashboards |
@@ -793,7 +860,7 @@ contributors across the globe, there is almost always someone available to help.
| operator.hostNetwork | bool | `true` | HostNetwork setting |
| operator.identityGCInterval | string | `"15m0s"` | Interval for identity garbage collection. |
| operator.identityHeartbeatTimeout | string | `"30m0s"` | Timeout for identity heartbeats. |
| operator.image | object | `{"alibabacloudDigest":"sha256:212c4cbe27da3772bcb952b8f8cbaa0b0eef72488b52edf90ad2b32072a3ca4c","awsDigest":"sha256:47dbc1a5bd483fec170dab7fb0bf2cca3585a4893675b0324d41d97bac8be5eb","azureDigest":"sha256:a57aff47aeb32eccfedaa2a49d1af984d996d6d6de79609c232e0c4cf9ce97a1","genericDigest":"sha256:34a827ce9ed021c8adf8f0feca131f53b3c54a3ef529053d871d0347ec4d69af","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/operator","suffix":"","tag":"v1.18.6","useDigest":true}` | cilium-operator image. |
| operator.image | object | `{"alibabacloudDigest":"sha256:837b12f4239e88ea5b4b5708ab982c319a94ee05edaecaafe5fd0e5b1962f554","awsDigest":"sha256:18913d05a6c4d205f0b7126c4723bb9ccbd4dc24403da46ed0f9f4bf2a142804","azureDigest":"sha256:82bce78603056e709d4c4e9f9ebb25c222c36d8a07f8c05381c2372d9078eca8","genericDigest":"sha256:e7278d763e448bf6c184b0682cf98cdca078d58a27e1b2f3c906792670aa211a","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/operator","suffix":"","tag":"v1.19.1","useDigest":true}` | cilium-operator image. |
| operator.nodeGCInterval | string | `"5m0s"` | Interval for cilium node garbage collection. |
| operator.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node labels for cilium-operator pod assignment ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
| operator.podAnnotations | object | `{}` | Annotations to be added to cilium-operator pods |
@@ -804,10 +871,12 @@ contributors across the globe, there is almost always someone available to help.
| operator.podLabels | object | `{}` | Labels to be added to cilium-operator pods |
| operator.podSecurityContext | object | `{"seccompProfile":{"type":"RuntimeDefault"}}` | Security context to be added to cilium-operator pods |
| operator.pprof.address | string | `"localhost"` | Configure pprof listen address for cilium-operator |
| operator.pprof.blockProfileRate | int | `0` | Enable goroutine blocking profiling for cilium-operator and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead]) |
| operator.pprof.enabled | bool | `false` | Enable pprof for cilium-operator |
| operator.pprof.mutexProfileFraction | int | `0` | Enable mutex contention profiling for cilium-operator and set the fraction of sampled events (set to 1 to sample all events) |
| operator.pprof.port | int | `6061` | Configure pprof listen port for cilium-operator |
| operator.priorityClassName | string | `""` | The priority class to use for cilium-operator |
| operator.prometheus | object | `{"enabled":true,"metricsService":false,"port":9963,"serviceMonitor":{"annotations":{},"enabled":false,"interval":"10s","jobLabel":"","labels":{},"metricRelabelings":null,"relabelings":null,"scrapeTimeout":null}}` | Enable prometheus metrics for cilium-operator on the configured port at /metrics |
| operator.prometheus | object | `{"enabled":true,"metricsService":false,"port":9963,"serviceMonitor":{"annotations":{},"enabled":false,"interval":"10s","jobLabel":"","labels":{},"metricRelabelings":null,"relabelings":null,"scrapeTimeout":null},"tls":{"enabled":false,"server":{"existingSecret":"","mtls":{"enabled":false}}}}` | Enable prometheus metrics for cilium-operator on the configured port at /metrics |
| operator.prometheus.serviceMonitor.annotations | object | `{}` | Annotations to add to ServiceMonitor cilium-operator |
| operator.prometheus.serviceMonitor.enabled | bool | `false` | Enable service monitors. This requires the prometheus CRDs to be available (see https://github.com/prometheus-operator/prometheus-operator/blob/main/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml) |
| operator.prometheus.serviceMonitor.interval | string | `"10s"` | Interval for scrape metrics. |
@@ -816,6 +885,8 @@ contributors across the globe, there is almost always someone available to help.
| operator.prometheus.serviceMonitor.metricRelabelings | string | `nil` | Metrics relabeling configs for the ServiceMonitor cilium-operator |
| operator.prometheus.serviceMonitor.relabelings | string | `nil` | Relabeling configs for the ServiceMonitor cilium-operator |
| operator.prometheus.serviceMonitor.scrapeTimeout | string | `nil` | Timeout after which scrape is considered to be failed. |
| operator.prometheus.tls | object | `{"enabled":false,"server":{"existingSecret":"","mtls":{"enabled":false}}}` | TLS configuration for Prometheus |
| operator.prometheus.tls.server.existingSecret | string | `""` | Name of the Secret containing the certificate, key and CA files for the Prometheus server. |
| operator.removeNodeTaints | bool | `true` | Remove Cilium node taint from Kubernetes nodes that have a healthy Cilium pod running. |
| operator.replicas | int | `2` | Number of replicas to run for the cilium-operator deployment |
| operator.resources | object | `{}` | cilium-operator resource limits & requests ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ |
@@ -828,25 +899,30 @@ contributors across the globe, there is almost always someone available to help.
| operator.topologySpreadConstraints | list | `[]` | Pod topology spread constraints for cilium-operator |
| operator.unmanagedPodWatcher.intervalSeconds | int | `15` | Interval, in seconds, to check if there are any pods that are not managed by Cilium. |
| operator.unmanagedPodWatcher.restart | bool | `true` | Restart any pod that are not managed by Cilium. |
| operator.unmanagedPodWatcher.selector | string | `nil` | Selector for pods that should be restarted when not managed by Cilium. If not set, defaults to built-in selector "k8s-app=kube-dns". Set to empty string to select all pods. @schema type: [null, string] @schema |
| operator.updateStrategy | object | `{"rollingUpdate":{"maxSurge":"25%","maxUnavailable":"50%"},"type":"RollingUpdate"}` | cilium-operator update strategy |
| pmtuDiscovery.enabled | bool | `false` | Enable path MTU discovery to send ICMP fragmentation-needed replies to the client. |
| pmtuDiscovery.packetizationLayerPMTUDMode | string | `"blackhole"` | Enable kernel probing path MTU discovery for Pods which uses different message sizes to search for correct MTU value. Valid values are: always, blackhole, disabled and unset (or empty). If value is 'unset' or left empty then will not try to override setting. |
| podAnnotations | object | `{}` | Annotations to be added to agent pods |
| podLabels | object | `{}` | Labels to be added to agent pods |
| podSecurityContext | object | `{"appArmorProfile":{"type":"Unconfined"},"seccompProfile":{"type":"Unconfined"}}` | Security Context for cilium-agent pods. |
| podSecurityContext.appArmorProfile | object | `{"type":"Unconfined"}` | AppArmorProfile options for the `cilium-agent` and init containers |
| policyCIDRMatchMode | string | `nil` | policyCIDRMatchMode is a list of entities that may be selected by CIDR selector. The possible value is "nodes". |
| policyDenyResponse | string | `"none"` | Configure what the response should be to pod egress traffic denied by network policy. Possible values: - none (default) - icmp |
| policyEnforcementMode | string | `"default"` | The agent can be put into one of the three policy enforcement modes: default, always and never. ref: https://docs.cilium.io/en/stable/security/policy/intro/#policy-enforcement-modes |
| pprof.address | string | `"localhost"` | Configure pprof listen address for cilium-agent |
| pprof.blockProfileRate | int | `0` | Enable goroutine blocking profiling for cilium-agent and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead]) |
| pprof.enabled | bool | `false` | Enable pprof for cilium-agent |
| pprof.mutexProfileFraction | int | `0` | Enable mutex contention profiling for cilium-agent and set the fraction of sampled events (set to 1 to sample all events) |
| pprof.port | int | `6060` | Configure pprof listen port for cilium-agent |
| preflight.affinity | object | `{"podAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchLabels":{"k8s-app":"cilium"}},"topologyKey":"kubernetes.io/hostname"}]}}` | Affinity for cilium-preflight |
| preflight.annotations | object | `{}` | Annotations to be added to all top-level preflight objects (resources under templates/cilium-preflight) |
| preflight.enabled | bool | `false` | Enable Cilium pre-flight resources (required for upgrade) |
| preflight.envoy.image | object | `{"digest":"sha256:81398e449f2d3d0a6a70527e4f641aaa685d3156bea0bb30712fae3fd8822b86","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium-envoy","tag":"v1.35.9-1767794330-db497dd19e346b39d81d7b5c0dedf6c812bcc5c9","useDigest":true}` | Envoy pre-flight image. |
| preflight.envoy.image | object | `{"digest":"sha256:8188114a2768b5f49d6ce58e168b20d765e0fbc64eee0d83241aa2b150ccd788","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium-envoy","tag":"v1.35.9-1770979049-232ed4a26881e4ab4f766f251f258ed424fff663","useDigest":true}` | Envoy pre-flight image. |
| preflight.extraEnv | list | `[]` | Additional preflight environment variables. |
| preflight.extraVolumeMounts | list | `[]` | Additional preflight volumeMounts. |
| preflight.extraVolumes | list | `[]` | Additional preflight volumes. |
| preflight.image | object | `{"digest":"sha256:42ec562a5ff6c8a860c0639f5a7611685e253fd9eb2d2fcdade693724c9166a4","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium","tag":"v1.18.6","useDigest":true}` | Cilium pre-flight image. |
| preflight.image | object | `{"digest":"sha256:41f1f74a0000de8656f1de4088ea00c8f2d49d6edea579034c73c5fd5fe01792","override":null,"pullPolicy":"IfNotPresent","repository":"quay.io/cilium/cilium","tag":"v1.19.1","useDigest":true}` | Cilium pre-flight image. |
| preflight.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node labels for preflight pod assignment ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
| preflight.podAnnotations | object | `{}` | Annotations to be added to preflight pods |
| preflight.podDisruptionBudget.enabled | bool | `false` | enable PodDisruptionBudget ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/ |
@@ -890,24 +966,36 @@ contributors across the globe, there is almost always someone available to help.
| sctp | object | `{"enabled":false}` | SCTP Configuration Values |
| sctp.enabled | bool | `false` | Enable SCTP support. NOTE: Currently, SCTP support does not support rewriting ports or multihoming. |
| secretsNamespaceAnnotations | object | `{}` | Annotations to be added to all cilium-secret namespaces (resources under templates/cilium-secrets-namespace) |
| secretsNamespaceLabels | object | `{}` | Labels to be added to all cilium-secret namespaces (resources under templates/cilium-secrets-namespace) |
| securityContext.allowPrivilegeEscalation | bool | `false` | disable privilege escalation |
| securityContext.capabilities.applySysctlOverwrites | list | `["SYS_ADMIN","SYS_CHROOT","SYS_PTRACE"]` | capabilities for the `apply-sysctl-overwrites` init container |
| securityContext.capabilities.ciliumAgent | list | `["CHOWN","KILL","NET_ADMIN","NET_RAW","IPC_LOCK","SYS_MODULE","SYS_ADMIN","SYS_RESOURCE","DAC_OVERRIDE","FOWNER","SETGID","SETUID"]` | Capabilities for the `cilium-agent` container |
| securityContext.capabilities.ciliumAgent | list | `["CHOWN","KILL","NET_ADMIN","NET_RAW","IPC_LOCK","SYS_MODULE","SYS_ADMIN","SYS_RESOURCE","DAC_OVERRIDE","FOWNER","SETGID","SETUID","SYSLOG"]` | Capabilities for the `cilium-agent` container |
| securityContext.capabilities.cleanCiliumState | list | `["NET_ADMIN","SYS_MODULE","SYS_ADMIN","SYS_RESOURCE"]` | Capabilities for the `clean-cilium-state` init container |
| securityContext.capabilities.mountCgroup | list | `["SYS_ADMIN","SYS_CHROOT","SYS_PTRACE"]` | Capabilities for the `mount-cgroup` init container |
| securityContext.privileged | bool | `false` | Run the pod with elevated privileges |
| securityContext.seLinuxOptions | object | `{"level":"s0","type":"spc_t"}` | SELinux options for the `cilium-agent` and init containers |
| serviceAccounts | object | Component's fully qualified name. | Define serviceAccount names for components. |
| serviceAccounts.clustermeshcertgen | object | `{"annotations":{},"automount":true,"create":true,"name":"clustermesh-apiserver-generate-certs"}` | Clustermeshcertgen is used if clustermesh.apiserver.tls.auto.method=cronJob |
| serviceAccounts.corednsMCSAPI | object | `{"annotations":{},"automount":true,"create":true,"name":"cilium-coredns-mcsapi-autoconfig"}` | CorednsMCSAPI is used if clustermesh.mcsapi.corednsAutoConfigure.enabled=true |
| serviceAccounts.hubblecertgen | object | `{"annotations":{},"automount":true,"create":true,"name":"hubble-generate-certs"}` | Hubblecertgen is used if hubble.tls.auto.method=cronJob |
| serviceAccounts.nodeinit.enabled | bool | `false` | Enabled is temporary until https://github.com/cilium/cilium-cli/issues/1396 is implemented. Cilium CLI doesn't create the SAs for node-init, thus the workaround. Helm is not affected by this issue. Name and automount can be configured, if enabled is set to true. Otherwise, they are ignored. Enabled can be removed once the issue is fixed. Cilium-nodeinit DS must also be fixed. |
| serviceNoBackendResponse | string | `"reject"` | Configure what the response should be to traffic for a service without backends. Possible values: - reject (default) - drop |
| sleepAfterInit | bool | `false` | Do not run Cilium agent when running with clean mode. Useful to completely uninstall Cilium as it will stop Cilium from starting and create artifacts in the node. |
| socketLB | object | `{"enabled":false}` | Configure socket LB |
| socketLB.enabled | bool | `false` | Enable socket LB |
| standaloneDnsProxy | object | `{"annotations":{},"automountServiceAccountToken":false,"debug":false,"enabled":false,"image":{"digest":"","override":null,"pullPolicy":"IfNotPresent","repository":"","tag":"","useDigest":true},"nodeSelector":{"kubernetes.io/os":"linux"},"rollOutPods":false,"serverPort":10095,"tolerations":[],"updateStrategy":{"rollingUpdate":{"maxSurge":2,"maxUnavailable":0},"type":"RollingUpdate"}}` | Standalone DNS Proxy Configuration Note: The standalone DNS proxy uses the agent's dnsProxy.* configuration for DNS settings (proxyPort, enableDnsCompression) to ensure consistency. |
| standaloneDnsProxy.annotations | object | `{}` | Standalone DNS proxy annotations |
| standaloneDnsProxy.automountServiceAccountToken | bool | `false` | Standalone DNS proxy auto mount service account token |
| standaloneDnsProxy.debug | bool | `false` | Standalone DNS proxy debug mode |
| standaloneDnsProxy.enabled | bool | `false` | Enable standalone DNS proxy (alpha feature) |
| standaloneDnsProxy.image | object | `{"digest":"","override":null,"pullPolicy":"IfNotPresent","repository":"","tag":"","useDigest":true}` | Standalone DNS proxy image |
| standaloneDnsProxy.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Standalone DNS proxy Node Selector |
| standaloneDnsProxy.rollOutPods | bool | `false` | Roll out Standalone DNS proxy automatically when configmap is updated. |
| standaloneDnsProxy.serverPort | int | `10095` | Standalone DNS proxy server port |
| standaloneDnsProxy.tolerations | list | `[]` | Standalone DNS proxy tolerations |
| standaloneDnsProxy.updateStrategy | object | `{"rollingUpdate":{"maxSurge":2,"maxUnavailable":0},"type":"RollingUpdate"}` | Standalone DNS proxy update strategy |
| startupProbe.failureThreshold | int | `300` | failure threshold of startup probe. Allow Cilium to take up to 600s to start up (300 attempts with 2s between attempts). |
| startupProbe.periodSeconds | int | `2` | interval between checks of the startup probe |
| svcSourceRangeCheck | bool | `true` | Enable check of service source ranges (currently, only for LoadBalancer). |
| synchronizeK8sNodes | bool | `true` | Synchronize Kubernetes nodes to kvstore and perform CNP GC. |
| sysctlfix | object | `{"enabled":true}` | Configure sysctl override described in #20072. |
| sysctlfix.enabled | bool | `true` | Enable the sysctl override. When enabled, the init container will mount the /proc of the host so that the `sysctlfix` utility can execute. |
@@ -929,11 +1017,12 @@ contributors across the globe, there is almost always someone available to help.
| tls.secretsNamespace | object | `{"create":true,"name":"cilium-secrets"}` | Configures where secrets used in CiliumNetworkPolicies will be looked for |
| tls.secretsNamespace.create | bool | `true` | Create secrets namespace for TLS Interception secrets. |
| tls.secretsNamespace.name | string | `"cilium-secrets"` | Name of TLS Interception secret namespace. |
| tmpVolume | object | `{}` | Configure temporary volume for cilium-agent |
| tolerations | list | `[{"operator":"Exists"}]` | Node tolerations for agent scheduling to nodes with taints ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
| tunnelPort | int | Port 8472 for VXLAN, Port 6081 for Geneve | Configure VXLAN and Geneve tunnel port. |
| tunnelProtocol | string | `"vxlan"` | Tunneling protocol to use in tunneling mode and for ad-hoc tunnels. Possible values: - "" - vxlan - geneve |
| tunnelSourcePortRange | string | 0-0 to let the kernel driver decide the range | Configure VXLAN and Geneve tunnel source port range hint. |
| underlayProtocol | string | `"ipv4"` | IP family for the underlay. |
| underlayProtocol | string | `"ipv4"` | IP family for the underlay. Possible values: - "ipv4" - "ipv6" |
| updateStrategy | object | `{"rollingUpdate":{"maxUnavailable":2},"type":"RollingUpdate"}` | Cilium agent update strategy |
| upgradeCompatibility | string | `nil` | upgradeCompatibility helps users upgrading to ensure that the configMap for Cilium will not change critical values to ensure continued operation This flag is not required for new installations. For example: '1.7', '1.8', '1.9' |
| vtep.cidr | string | `""` | A space separated list of VTEP device CIDRs, for example "1.1.1.0/24 1.1.2.0/24" |

View File

@@ -292,7 +292,7 @@ overloadManager:
- name: "envoy.resource_monitors.global_downstream_max_connections"
typedConfig:
"@type": "type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig"
max_active_downstream_connections: "50000"
max_active_downstream_connections: "{{ .Values.envoy.maxGlobalDownstreamConnections }}"
applicationLogConfig:
logFormat:
{{- if .Values.envoy.log.format_json }}

View File

@@ -156,6 +156,14 @@ fi
iptables -w -t nat -D POSTROUTING -m comment --comment "ip-masq: ensure nat POSTROUTING directs all non-LOCAL destination traffic to our custom IP-MASQ chain" -m addrtype ! --dst-type LOCAL -j IP-MASQ || true
{{- end }}
{{- if .Values.nodeinit.waitForCloudInit }}
echo "Waiting for cloud-init..."
if command -v cloud-init >/dev/null 2>&1; then
cloud-init status --wait
echo "cloud-init completed!"
fi
{{- end }}
{{- if not (eq .Values.nodeinit.bootstrapFile "") }}
mkdir -p {{ .Values.nodeinit.bootstrapFile | dir | quote }}
date > {{ .Values.nodeinit.bootstrapFile | quote }}

View File

@@ -21,6 +21,24 @@ dnsPolicy: {{ .Values.dnsPolicy }}
{{- end }}
{{- end }}
{{/*
Allow packagers to add extra volumes to cilium-operator.
*/}}
{{- define "cilium-operator.volumes.extra" }}
{{- end }}
{{- define "cilium-operator.volumeMounts.extra" }}
{{- end }}
{{/*
Allow packagers to set securityContext for cilium-operator.
*/}}
{{- define "cilium.operator.securityContext" }}
{{- with .Values.operator.securityContext }}
{{ toYaml . }}
{{- end }}
{{- end }}
{{/*
Intentionally empty to allow downstream chart packagers to add extra
containers to hubble-relay without having to modify the deployment manifest
@@ -72,3 +90,87 @@ Allow packagers to add extra configuration to certgen.
*/}}
{{- define "certgen.config.extra" -}}
{{- end }}
{{/*
Allow packagers to add extra arguments to the clustermesh-apiserver apiserver container.
*/}}
{{- define "clustermesh.apiserver.args.extra" -}}
{{- end }}
{{/*
Allow packagers to add extra arguments to the clustermesh-apiserver kvstoremesh container.
*/}}
{{- define "clustermesh.kvstoremesh.args.extra" -}}
{{- end }}
{{/*
Allow packagers to add init containers to the cilium-envoy pods.
*/}}
{{- define "envoy.initContainers" -}}
{{- end }}
{{/*
Allow packagers to add extra args to the cilium-envoy container.
*/}}
{{- define "envoy.args.extra" -}}
{{- end }}
{{/*
Allow packagers to add extra env vars to the cilium-envoy container.
*/}}
{{- define "envoy.env.extra" -}}
{{- end }}
{{/*
Allow packagers to add extra volume mounts to the cilium-envoy container.
*/}}
{{- define "envoy.volumeMounts.extra" -}}
{{- end }}
{{/*
Allow packagers to add extra host path mounts to the cilium-envoy container.
*/}}
{{- define "envoy.hostPathMounts.extra" -}}
{{- end }}
{{/*
Allow packagers to define set of ports for cilium-envoy container.
The template needs to allow overriding ports spec not just adding.
*/}}
{{- define "envoy.ports" -}}
{{- if .Values.envoy.prometheus.enabled }}
ports:
- name: envoy-metrics
containerPort: {{ .Values.envoy.prometheus.port }}
hostPort: {{ .Values.envoy.prometheus.port }}
protocol: TCP
{{- if and .Values.envoy.debug.admin.enabled .Values.envoy.debug.admin.port }}
- name: envoy-admin
containerPort: {{ .Values.envoy.debug.admin.port }}
hostPort: {{ .Values.envoy.debug.admin.port }}
protocol: TCP
{{- end }}
{{- end }}
{{- end }}
{{/*
Allow packagers to define update strategy for cilium-envoy pods.
*/}}
{{- define "envoy.updateStrategy" -}}
{{- with .Values.envoy.updateStrategy }}
updateStrategy:
{{- toYaml . | trim | nindent 2 }}
{{- end }}
{{- end }}
{{/*
Allow packagers to define affinity for cilium-envoy pods.
*/}}
{{- define "envoy.affinity" -}}
{{- with .Values.envoy.affinity }}
affinity:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- end }}

View File

@@ -131,12 +131,16 @@ To override the namespace and configMap when using `auto`:
{{- define "k8sServiceHost" }}
{{- $configmapName := default "cluster-info" .Values.k8sServiceLookupConfigMapName }}
{{- $configmapNamespace := default "kube-public" .Values.k8sServiceLookupNamespace }}
{{- if and (eq .Values.k8sServiceHost "auto") (lookup "v1" "ConfigMap" $configmapNamespace $configmapName) }}
{{- if eq .Values.k8sServiceHost "auto" }}
{{- $configmap := (lookup "v1" "ConfigMap" $configmapNamespace $configmapName) }}
{{- $kubeconfig := get $configmap.data "kubeconfig" }}
{{- $k8sServer := get ($kubeconfig | fromYaml) "clusters" | mustFirst | dig "cluster" "server" "" }}
{{- $uri := (split "https://" $k8sServer)._1 | trim }}
{{- (split ":" $uri)._0 | quote }}
{{- if $configmap }}
{{- $kubeconfig := get $configmap.data "kubeconfig" }}
{{- $k8sServer := get ($kubeconfig | fromYaml) "clusters" | mustFirst | dig "cluster" "server" "" }}
{{- $uri := (split "https://" $k8sServer)._1 | trim }}
{{- (split ":" $uri)._0 | quote }}
{{- else }}
{{- fail (printf "ConfigMap %s/%s not found, please create it or set k8sServiceHost to a valid value" $configmapNamespace $configmapName) }}
{{- end }}
{{- else }}
{{- .Values.k8sServiceHost | quote }}
{{- end }}

View File

@@ -94,7 +94,6 @@ rules:
- cilium.io
resources:
- ciliumloadbalancerippools
- ciliumbgppeeringpolicies
- ciliumbgpnodeconfigs
- ciliumbgpadvertisements
- ciliumbgppeerconfigs

View File

@@ -10,6 +10,7 @@
{{- $kubeProxyReplacement := (coalesce .Values.kubeProxyReplacement "false") -}}
{{- $envoyDS := eq (include "envoyDaemonSetEnabled" .) "true" -}}
{{- $buildDaemonConfig := or (kindIs "invalid" .Values.daemon.configSources) (not (regexMatch "^config-map:[^,]+$" .Values.daemon.configSources)) -}}
---
apiVersion: apps/v1
@@ -134,7 +135,7 @@ spec:
httpGet:
host: {{ .Values.ipv4.enabled | ternary "127.0.0.1" "::1" | quote }}
path: /healthz
port: {{ .Values.healthPort }}
port: health
scheme: HTTP
httpHeaders:
- name: "brief"
@@ -154,7 +155,7 @@ spec:
httpGet:
host: {{ .Values.ipv4.enabled | ternary "127.0.0.1" "::1" | quote }}
path: /healthz
port: {{ .Values.healthPort }}
port: health
scheme: HTTP
httpHeaders:
- name: "brief"
@@ -177,7 +178,7 @@ spec:
httpGet:
host: {{ .Values.ipv4.enabled | ternary "127.0.0.1" "::1" | quote }}
path: /healthz
port: {{ .Values.healthPort }}
port: health
scheme: HTTP
httpHeaders:
- name: "brief"
@@ -250,12 +251,17 @@ spec:
resources:
{{- toYaml . | trim | nindent 10 }}
{{- end }}
{{- if or .Values.prometheus.enabled (or .Values.hubble.metrics.enabled .Values.hubble.metrics.dynamic.enabled) }}
ports:
- name: health
containerPort: {{ .Values.healthPort }}
hostPort: {{ .Values.healthPort }}
protocol: TCP
{{- if .Values.hubble.enabled }}
- name: peer-service
containerPort: {{ .Values.hubble.peerService.targetPort }}
hostPort: {{ .Values.hubble.peerService.targetPort }}
protocol: TCP
{{- end }}
{{- if .Values.prometheus.enabled }}
- name: prometheus
containerPort: {{ .Values.prometheus.port }}
@@ -280,7 +286,6 @@ spec:
hostPort: {{ .Values.hubble.metrics.port }}
protocol: TCP
{{- end }}
{{- end }}
securityContext:
{{- if .Values.securityContext.privileged }}
privileged: true
@@ -375,6 +380,10 @@ spec:
- name: cilium-ipsec-secrets
mountPath: {{ .Values.encryption.ipsec.mountPath }}
{{- end }}
{{- if and .Values.encryption.enabled (eq .Values.encryption.type "ztunnel") }}
- name: cilium-ztunnel-secrets
mountPath: /etc/ztunnel
{{- end }}
{{- if .Values.kubeConfigPath }}
- name: kube-config
mountPath: {{ .Values.kubeConfigPath }}
@@ -390,8 +399,14 @@ spec:
mountPath: /var/lib/cilium/tls/hubble
readOnly: true
{{- end }}
{{- if $buildDaemonConfig }}
- name: tmp
mountPath: /tmp
{{- else }}
- name: cilium-config-path
mountPath: /tmp/cilium/config-map
readOnly: true
{{- end }}
{{- range .Values.extraHostPathMounts }}
- name: {{ .name }}
mountPath: {{ .mountPath }}
@@ -447,6 +462,7 @@ spec:
{{- toYaml .Values.extraContainers | nindent 6 }}
{{- end }}
initContainers:
{{- if $buildDaemonConfig }}
- name: config
image: {{ include "cilium.image" .Values.image | quote }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
@@ -513,6 +529,17 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
terminationMessagePolicy: FallbackToLogsOnError
securityContext:
{{- if .Values.securityContext.privileged }}
privileged: true
{{- else }}
capabilities:
add:
- NET_ADMIN
drop:
- ALL
{{- end}}
{{- end }}
{{- if .Values.cgroup.autoMount.enabled }}
# Required to mount cgroup2 filesystem on the underlying Kubernetes node.
# We use nsenter command with host's cgroup and mount namespaces enabled.
@@ -524,9 +551,12 @@ spec:
value: {{ .Values.cgroup.hostRoot }}
- name: BIN_PATH
value: {{ .Values.cni.binPath }}
{{- with .Values.cgroup.autoMount.resources }}
{{- if .Values.cgroup.autoMount.resources }}
resources:
{{- toYaml . | trim | nindent 10 }}
{{- toYaml .Values.cgroup.autoMount.resources | trim | nindent 10 }}
{{- else if .Values.initResources }}
resources:
{{- toYaml .Values.initResources | trim | nindent 10 }}
{{- end }}
command:
- sh
@@ -821,7 +851,7 @@ spec:
{{- end }}
{{- if and .Values.clustermesh.config.enabled (not (and .Values.clustermesh.useAPIServer .Values.clustermesh.apiserver.kvstoremesh.enabled )) }}
hostAliases:
{{- range $cluster := .Values.clustermesh.config.clusters }}
{{- range $_, $cluster := (include "clustermesh-clusters" . | fromJson) }}
{{- range $ip := $cluster.ips }}
- ip: {{ $ip }}
hostnames: [ "{{ $cluster.name }}.{{ $.Values.clustermesh.config.domain }}" ]
@@ -829,9 +859,20 @@ spec:
{{- end }}
{{- end }}
volumes:
# For sharing configuration between the "config" initContainer and the agent
{{- if $buildDaemonConfig }}
# For sharing configuration between the "config" initContainer and the agent
- name: tmp
{{- if .Values.tmpVolume }}
{{- toYaml .Values.tmpVolume | nindent 8 }}
{{- else }}
emptyDir: {}
{{- end }}
{{- else }}
# To read the configuration from the config map
- name: cilium-config-path
configMap:
name: {{ trimPrefix "config-map:" .Values.daemon.configSources }}
{{- end }}
# To keep state between restarts / upgrades
- name: cilium-run
hostPath:
@@ -992,6 +1033,11 @@ spec:
secret:
secretName: {{ .Values.encryption.ipsec.secretName }}
{{- end }}
{{- if and .Values.encryption.enabled (eq .Values.encryption.type "ztunnel") }}
- name: cilium-ztunnel-secrets
secret:
secretName: cilium-ztunnel-secrets
{{- end }}
{{- if .Values.cni.configMap }}
- name: cni-configuration
configMap:

View File

@@ -120,7 +120,7 @@ rules:
- watch
{{- end}}
{{- if and .Values.operator.enabled .Values.serviceAccounts.operator.create $readSecretsOnlyFromSecretsNamespace .Values.tls.secretsNamespace.name }}
{{- if and .Values.agent (not .Values.preflight.enabled) .Values.serviceAccounts.cilium.create $readSecretsOnlyFromSecretsNamespace .Values.tls.secretsNamespace.name }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role

View File

@@ -126,7 +126,7 @@ subjects:
namespace: {{ include "cilium.namespace" . }}
{{- end}}
{{- if and (not .Values.preflight.enabled) $readSecretsOnlyFromSecretsNamespace .Values.tls.secretsNamespace.name }}
{{- if and .Values.agent (not .Values.preflight.enabled) .Values.serviceAccounts.cilium.create $readSecretsOnlyFromSecretsNamespace .Values.tls.secretsNamespace.name }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding

View File

@@ -11,8 +11,13 @@ kind: Secret
metadata:
name: {{ .commonCASecretName }}
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
cilium.io/helm-template-non-idempotent: "true"
{{- with .Values.nonIdempotentAnnotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
data:

View File

@@ -33,12 +33,6 @@
{{- end }}
{{- $defaultBpfCtTcpMax = 0 -}}
{{- $defaultBpfCtAnyMax = 0 -}}
{{- $defaultKubeProxyReplacement = "probe" -}}
{{- end -}}
{{- /* Default values when 1.9 was initially deployed */ -}}
{{- if semverCompare ">=1.9" (default "1.9" .Values.upgradeCompatibility) -}}
{{- $defaultKubeProxyReplacement = "probe" -}}
{{- end -}}
{{- /* Default values when 1.10 was initially deployed */ -}}
@@ -52,7 +46,6 @@
{{- if .Values.azure.enabled }}
{{- $azureUsePrimaryAddress = "false" -}}
{{- end }}
{{- $defaultKubeProxyReplacement = "disabled" -}}
{{- $defaultDNSProxyEnableTransparentMode = "true" -}}
{{- end -}}
@@ -71,6 +64,10 @@
{{- end }}
{{- end -}}
{{- $ipam := (coalesce .Values.ipam.mode $defaultIPAM) -}}
{{- if .Values.eni.enabled }}
{{- $ipam = "eni" -}}
{{- end }}
{{- $bpfCtTcpMax := (coalesce .Values.bpf.ctTcpMax $defaultBpfCtTcpMax) -}}
{{- $bpfCtAnyMax := (coalesce .Values.bpf.ctAnyMax $defaultBpfCtAnyMax) -}}
{{- $stringValueKPR := (toString .Values.kubeProxyReplacement) -}}
@@ -258,6 +255,14 @@ data:
operator-prometheus-serve-addr: ":{{ .Values.operator.prometheus.port }}"
enable-metrics: "true"
{{- end }}
{{- if and .Values.operator.prometheus.enabled .Values.operator.prometheus.tls.enabled }}
operator-prometheus-enable-tls: "true"
operator-prometheus-tls-cert-file: /var/lib/cilium/tls/prometheus/server.crt
operator-prometheus-tls-key-file: /var/lib/cilium/tls/prometheus/server.key
{{- if .Values.operator.prometheus.tls.server.mtls.enabled }}
operator-prometheus-tls-client-ca-files: /var/lib/cilium/tls/prometheus/client-ca.crt
{{- end }}
{{- end }}
{{- if .Values.operator.skipCRDCreation }}
skip-crd-creation: "true"
@@ -456,6 +461,9 @@ data:
# policy map (per endpoint)
bpf-policy-map-max: "{{ .Values.bpf.policyMapMax | int }}"
{{- end }}
{{- if has (kindOf .Values.bpf.policyMapPressureMetricsThreshold) (list "int64" "float64") }}
bpf-policy-map-pressure-metrics-threshold: {{ .Values.bpf.policyMapPressureMetricsThreshold | quote }}
{{- end }}
{{- if hasKey .Values.bpf "policyStatsMapMax" }}
# bpf-policy-stats-map-max specifies the maximum number of entries in global
# policy stats map
@@ -505,7 +513,7 @@ data:
cluster-name: {{ .Values.cluster.name | quote }}
{{- if hasKey .Values.cluster "id" }}
# Unique ID of the cluster. Must be unique across all conneted clusters and
# Unique ID of the cluster. Must be unique across all connected clusters and
# in the range of 1 and 255. Only relevant when building a mesh of clusters.
cluster-id: "{{ .Values.cluster.id }}"
{{- end }}
@@ -526,7 +534,7 @@ data:
{{- end }}
{{- end }}
routing-mode: {{ .Values.routingMode | default (ternary "native" "tunnel" .Values.gke.enabled) | quote }}
routing-mode: {{ .Values.routingMode | default (ternary "native" "tunnel" (or .Values.eni.enabled .Values.gke.enabled)) | quote }}
tunnel-protocol: {{ .Values.tunnelProtocol | default "vxlan" | quote }}
{{- if eq .Values.routingMode "native" }}
@@ -558,6 +566,10 @@ data:
service-no-backend-response: "{{ .Values.serviceNoBackendResponse }}"
{{- end}}
{{- if .Values.policyDenyResponse }}
policy-deny-response: "{{ .Values.policyDenyResponse }}"
{{- end}}
{{- if .Values.MTU }}
mtu: {{ .Values.MTU | quote }}
{{- end }}
@@ -575,6 +587,35 @@ data:
{{- end }}
ec2-api-endpoint: {{ .Values.eni.ec2APIEndpoint | quote }}
eni-tags: {{ .Values.eni.eniTags | toRawJson | quote }}
{{- if .Values.eni.nodeSpec }}
{{- if ne .Values.eni.nodeSpec.firstInterfaceIndex nil }}
eni-first-interface-index: {{ .Values.eni.nodeSpec.firstInterfaceIndex | quote }}
{{- end }}
{{- if .Values.eni.nodeSpec.subnetIDs }}
eni-subnet-ids: {{ .Values.eni.nodeSpec.subnetIDs | join "," | quote }}
{{- end }}
{{- if .Values.eni.nodeSpec.subnetTags }}
eni-subnet-tags: {{ .Values.eni.nodeSpec.subnetTags | join "," | quote }}
{{- end }}
{{- if .Values.eni.nodeSpec.securityGroups }}
eni-security-groups: {{ .Values.eni.nodeSpec.securityGroups | join "," | quote }}
{{- end }}
{{- if .Values.eni.nodeSpec.securityGroupTags }}
eni-security-group-tags: {{ .Values.eni.nodeSpec.securityGroupTags | join "," | quote }}
{{- end }}
{{- if .Values.eni.nodeSpec.excludeInterfaceTags }}
eni-exclude-interface-tags: {{ .Values.eni.nodeSpec.excludeInterfaceTags | join "," | quote }}
{{- end }}
{{- if .Values.eni.nodeSpec.usePrimaryAddress }}
eni-use-primary-address: "true"
{{- end }}
{{- if .Values.eni.nodeSpec.disablePrefixDelegation }}
eni-disable-prefix-delegation: "true"
{{- end }}
{{- if ne .Values.eni.nodeSpec.deleteOnTermination nil }}
eni-delete-on-termination: {{ .Values.eni.nodeSpec.deleteOnTermination | quote }}
{{- end }}
{{- end }}
{{- if .Values.eni.subnetIDsFilter }}
subnet-ids-filter: {{ .Values.eni.subnetIDsFilter | join " " | quote }}
{{- end }}
@@ -600,17 +641,39 @@ data:
{{- end }}
azure-use-primary-address: {{ $azureUsePrimaryAddress | quote }}
{{- end }}
{{- if .Values.azure.nodeSpec.azureInterfaceName }}
azure-interface-name: {{ .Values.azure.nodeSpec.azureInterfaceName | quote }}
{{- end }}
{{- if .Values.alibabacloud.enabled }}
enable-endpoint-routes: "true"
auto-create-cilium-node-resource: "true"
{{- end }}
{{- if .Values.alibabacloud.nodeSpec.vSwitches }}
alibabacloud-vswitches: {{ .Values.alibabacloud.nodeSpec.vSwitches | join "," | quote }}
{{- end }}
{{- if .Values.alibabacloud.nodeSpec.vSwitchTags }}
alibabacloud-vswitch-tags: {{ .Values.alibabacloud.nodeSpec.vSwitchTags | join "," | quote }}
{{- end }}
{{- if .Values.alibabacloud.nodeSpec.securityGroups }}
alibabacloud-security-groups: {{ .Values.alibabacloud.nodeSpec.securityGroups | join "," | quote }}
{{- end }}
{{- if .Values.alibabacloud.nodeSpec.securityGroupTags }}
alibabacloud-security-group-tags: {{ .Values.alibabacloud.nodeSpec.securityGroupTags | join "," | quote }}
{{- end }}
{{- if hasKey .Values "l7Proxy" }}
# Enables L7 proxy for L7 policy enforcement and visibility
enable-l7-proxy: {{ .Values.l7Proxy | quote }}
{{- end }}
{{- if hasKey .Values "standaloneDnsProxy" }}
{{- if .Values.standaloneDnsProxy.enabled }}
enable-standalone-dns-proxy: {{ .Values.standaloneDnsProxy.enabled | quote }}
standalone-dns-proxy-server-port: {{ .Values.standaloneDnsProxy.serverPort | quote }}
{{- end }}
{{- end }}
{{- if ne $cniChainingMode "none" }}
# Enable chaining with another CNI plugin
#
@@ -643,6 +706,7 @@ data:
enable-ipv4-big-tcp: {{ .Values.enableIPv4BIGTCP | quote }}
enable-ipv6-big-tcp: {{ .Values.enableIPv6BIGTCP | quote }}
enable-ipv6-masquerade: {{ .Values.enableIPv6Masquerade | quote }}
enable-tunnel-big-tcp: {{ .Values.enableTunnelBIGTCP | quote }}
{{- if hasKey .Values.bpf "enableTCX" }}
enable-tcx: {{ .Values.bpf.enableTCX | quote }}
@@ -687,6 +751,8 @@ data:
{{- if .Values.encryption.wireguard.persistentKeepalive }}
wireguard-persistent-keepalive: {{ .Values.encryption.wireguard.persistentKeepalive | quote }}
{{- end }}
{{- else if eq .Values.encryption.type "ztunnel" }}
enable-ztunnel: {{ .Values.encryption.enabled | quote }}
{{- end }}
{{- if .Values.encryption.nodeEncryption }}
encrypt-node: {{ .Values.encryption.nodeEncryption | quote }}
@@ -694,11 +760,20 @@ data:
{{- end }}
{{- if .Values.encryption.strictMode.enabled }}
enable-encryption-strict-mode: {{ .Values.encryption.strictMode.enabled | quote }}
# --- DEPRECATED: Please use encryption.strictMode.egress.enabled instead
enable-encryption-strict-mode-egress: {{ .Values.encryption.strictMode.enabled | quote }}
encryption-strict-egress-cidr: {{ .Values.encryption.strictMode.cidr | quote }}
encryption-strict-egress-allow-remote-node-identities: {{ .Values.encryption.strictMode.allowRemoteNodeIdentities | quote }}
{{- end }}
encryption-strict-mode-cidr: {{ .Values.encryption.strictMode.cidr | quote }}
{{- if .Values.encryption.strictMode.ingress.enabled }}
enable-encryption-strict-mode-ingress: {{ .Values.encryption.strictMode.ingress.enabled | quote }}
{{- end }}
encryption-strict-mode-allow-remote-node-identities: {{ .Values.encryption.strictMode.allowRemoteNodeIdentities | quote }}
{{- if .Values.encryption.strictMode.egress.enabled }}
enable-encryption-strict-mode-egress: {{ .Values.encryption.strictMode.egress.enabled | quote }}
encryption-strict-egress-cidr: {{ .Values.encryption.strictMode.egress.cidr | quote }}
encryption-strict-egress-allow-remote-node-identities: {{ .Values.encryption.strictMode.egress.allowRemoteNodeIdentities | quote }}
{{- end }}
enable-xt-socket-fallback: {{ .Values.enableXTSocketFallback | quote }}
@@ -773,6 +848,10 @@ data:
kube-proxy-replacement-healthz-bind-address: {{ default "" .Values.kubeProxyReplacementHealthzBindAddr | quote}}
{{- end }}
{{- if hasKey .Values "enableNoServiceEndpointsRoutable" }}
enable-no-service-endpoints-routable: {{ .Values.enableNoServiceEndpointsRoutable | quote }}
{{- end }}
{{- if $socketLB }}
{{- if hasKey $socketLB "enabled" }}
bpf-lb-sock: {{ $socketLB.enabled | quote }}
@@ -789,9 +868,6 @@ data:
{{- end }}
{{- if hasKey .Values "nodePort" }}
{{- if eq $kubeProxyReplacement "false" }}
enable-node-port: {{ .Values.nodePort.enabled | quote }}
{{- end }}
{{- if hasKey .Values.nodePort "range" }}
node-port-range: {{ get .Values.nodePort "range" | quote }}
{{- end }}
@@ -832,10 +908,6 @@ data:
enable-service-topology: {{ .Values.loadBalancer.serviceTopology | quote }}
# {{- end }}
{{- if hasKey .Values.loadBalancer "protocolDifferentiation" }}
bpf-lb-proto-diff: {{ .Values.loadBalancer.protocolDifferentiation.enabled | quote }}
{{- end }}
{{- end }}
{{- if hasKey .Values.maglev "tableSize" }}
bpf-lb-maglev-table-size: {{ .Values.maglev.tableSize | quote}}
@@ -843,11 +915,9 @@ data:
{{- if hasKey .Values.maglev "hashSeed" }}
bpf-lb-maglev-hash-seed: {{ .Values.maglev.hashSeed | quote}}
{{- end }}
{{- if .Values.sessionAffinity }}
enable-session-affinity: {{ .Values.sessionAffinity | quote }}
{{- end }}
{{- if .Values.svcSourceRangeCheck }}
enable-svc-source-range-check: {{ .Values.svcSourceRangeCheck | quote }}
{{- if .Values.bpf.monitorTraceIPOption }}
ip-tracing-option-type: {{ .Values.bpf.monitorTraceIPOption | quote }}
{{- end }}
{{- if hasKey .Values "l2NeighDiscovery" }}
@@ -860,12 +930,16 @@ data:
pprof: {{ .Values.pprof.enabled | quote }}
pprof-address: {{ .Values.pprof.address | quote }}
pprof-port: {{ .Values.pprof.port | quote }}
pprof-mutex-profile-fraction: {{ .Values.pprof.mutexProfileFraction | quote }}
pprof-block-profile-rate: {{ .Values.pprof.blockProfileRate | quote }}
{{- end }}
{{- if .Values.operator.pprof.enabled }}
operator-pprof: {{ .Values.operator.pprof.enabled | quote }}
operator-pprof-address: {{ .Values.operator.pprof.address | quote }}
operator-pprof-port: {{ .Values.operator.pprof.port | quote }}
operator-pprof-mutex-profile-fraction: {{ .Values.operator.pprof.mutexProfileFraction | quote }}
operator-pprof-block-profile-rate: {{ .Values.operator.pprof.blockProfileRate | quote }}
{{- end }}
{{- if .Values.logSystemLoad }}
@@ -973,6 +1047,10 @@ data:
# Capacity of the buffer to store recent events.
hubble-event-buffer-capacity: {{ .Values.hubble.eventBufferCapacity | quote }}
{{- end }}
{{- if hasKey .Values.hubble "lostEventSendInterval" }}
# Interval to send lost events from Observer server.
hubble-lost-event-send-interval: {{ include "validateDuration" .Values.hubble.lostEventSendInterval | quote }}
{{- end }}
{{- if or .Values.hubble.metrics.enabled .Values.hubble.metrics.dynamic.enabled}}
# Address to expose Hubble metrics (e.g. ":7070"). Metrics server will be disabled if this
# field is not set.
@@ -1040,8 +1118,10 @@ data:
hubble-export-file-max-size-mb: {{ .Values.hubble.export.fileMaxSizeMb | default .Values.hubble.export.static.fileMaxSizeMb | quote }}
hubble-export-file-max-backups: {{ .Values.hubble.export.fileMaxBackups | default .Values.hubble.export.static.fileMaxBackups | quote }}
hubble-export-file-compress: {{ .Values.hubble.export.fileCompress | default .Values.hubble.export.static.fileCompress | quote }}
hubble-export-aggregation-interval: {{ include "validateDuration" .Values.hubble.export.aggregationInterval | default .Values.hubble.export.static.aggregationInterval | quote }}
hubble-export-file-path: {{ .Values.hubble.export.static.filePath | quote }}
hubble-export-fieldmask: {{ .Values.hubble.export.static.fieldMask | join " " | quote }}
hubble-export-fieldaggregate: {{ .Values.hubble.export.static.fieldAggregate | join " " | quote }}
hubble-export-allowlist: {{ .Values.hubble.export.static.allowList | join " " | quote }}
hubble-export-denylist: {{ .Values.hubble.export.static.denyList | join " " | quote }}
{{- end }}
@@ -1078,10 +1158,28 @@ data:
disable-iptables-feeder-rules: {{ .Values.disableIptablesFeederRules | join " " | quote }}
{{- end }}
{{- if .Values.aksbyocni.enabled }}
{{- if or (not .Values.ipam.mode) (eq .Values.ipam.mode "cluster-pool") }}
ipam: "cluster-pool"
{{- else if eq .Values.ipam.mode "multi-pool" }}
ipam: "multi-pool"
{{- end }}
{{- else }}
ipam: {{ $ipam | quote }}
{{- end }}
{{- if .Values.ipam.nodeSpec }}
{{- if ne .Values.ipam.nodeSpec.ipamMinAllocate nil }}
ipam-min-allocate: {{ .Values.ipam.nodeSpec.ipamMinAllocate | quote }}
{{- end }}
{{- if ne .Values.ipam.nodeSpec.ipamPreAllocate nil }}
ipam-pre-allocate: {{ .Values.ipam.nodeSpec.ipamPreAllocate | quote }}
{{- end }}
{{- if ne .Values.ipam.nodeSpec.ipamMaxAllocate nil }}
ipam-max-allocate: {{ .Values.ipam.nodeSpec.ipamMaxAllocate | quote }}
{{- end }}
{{- if .Values.ipam.nodeSpec.ipamStaticIPTags }}
ipam-static-ip-tags: {{ .Values.ipam.nodeSpec.ipamStaticIPTags | join "," | quote }}
{{- end }}
{{- end }}
{{- if .Values.ipam.multiPoolPreAllocation }}
ipam-multi-pool-pre-allocation: {{ .Values.ipam.multiPoolPreAllocation | quote }}
{{- end }}
@@ -1092,18 +1190,10 @@ data:
{{- if (eq $ipam "cluster-pool") }}
{{- if .Values.ipv4.enabled }}
{{- if hasKey .Values.ipam.operator "clusterPoolIPv4PodCIDR" }}
{{- /* ipam.operator.clusterPoolIPv4PodCIDR removed in v1.14, remove this failsafe around v1.17 */ -}}
{{- fail "Value ipam.operator.clusterPoolIPv4PodCIDR removed, use ipam.operator.clusterPoolIPv4PodCIDRList instead" }}
{{- end }}
cluster-pool-ipv4-cidr: {{ .Values.ipam.operator.clusterPoolIPv4PodCIDRList | join " " | quote }}
cluster-pool-ipv4-mask-size: {{ .Values.ipam.operator.clusterPoolIPv4MaskSize | quote }}
{{- end }}
{{- if .Values.ipv6.enabled }}
{{- if hasKey .Values.ipam.operator "clusterPoolIPv6PodCIDR" }}
{{- /* ipam.operator.clusterPoolIPv6PodCIDR removed in v1.14, remove this failsafe around v1.17 */ -}}
{{- fail "Value ipam.operator.clusterPoolIPv6PodCIDR removed, use ipam.operator.clusterPoolIPv6PodCIDRList instead" }}
{{- end }}
cluster-pool-ipv6-cidr: {{ .Values.ipam.operator.clusterPoolIPv6PodCIDRList | join " " | quote }}
cluster-pool-ipv6-mask-size: {{ .Values.ipam.operator.clusterPoolIPv6MaskSize | quote }}
{{- end }}
@@ -1172,20 +1262,11 @@ data:
crd-wait-timeout: {{ include "validateDuration" .Values.crdWaitTimeout | quote }}
{{- end }}
{{- if .Values.enableK8sEndpointSlice }}
enable-k8s-endpoint-slice: {{ .Values.enableK8sEndpointSlice | quote }}
{{- end }}
{{- if hasKey .Values.k8s "serviceProxyName" }}
# Configure service proxy name for Cilium.
k8s-service-proxy-name: {{ .Values.k8s.serviceProxyName | quote }}
{{- end }}
{{- if and .Values.customCalls .Values.customCalls.enabled }}
# Enable tail call hooks for custom eBPF programs.
enable-custom-calls: {{ .Values.customCalls.enabled | quote }}
{{- end }}
{{- if .Values.l2announcements.enabled }}
# Enable L2 announcements
enable-l2-announcements: {{ .Values.l2announcements.enabled | quote }}
@@ -1222,6 +1303,8 @@ data:
enable-pmtu-discovery: "true"
{{- end }}
packetization-layer-pmtud-mode: {{ .Values.pmtuDiscovery.packetizationLayerPMTUDMode | quote }}
{{- if not .Values.securityContext.privileged }}
procfs: "/host/proc"
{{- end }}
@@ -1296,11 +1379,20 @@ data:
{{- end }}
{{- if .Values.operator.unmanagedPodWatcher.restart }}
unmanaged-pod-watcher-interval: {{ .Values.operator.unmanagedPodWatcher.intervalSeconds | quote }}
{{- $interval := .Values.operator.unmanagedPodWatcher.intervalSeconds }}
{{- if kindIs "float64" $interval }}
unmanaged-pod-watcher-interval: {{ printf "%ds" (int $interval) | quote }}
{{- else }}
unmanaged-pod-watcher-interval: {{ $interval | quote }}
{{- end }}
{{- else }}
unmanaged-pod-watcher-interval: "0"
{{- end }}
{{- if ne .Values.operator.unmanagedPodWatcher.selector nil }}
pod-restart-selector: {{ .Values.operator.unmanagedPodWatcher.selector }}
{{- end }}
{{- if .Values.dnsProxy }}
{{- if hasKey .Values.dnsProxy "enableTransparentMode" }}
# explicit setting gets precedence
@@ -1370,10 +1462,14 @@ data:
proxy-xff-num-trusted-hops-egress: {{ .Values.envoy.xffNumTrustedHopsL7PolicyEgress | quote }}
proxy-connect-timeout: {{ .Values.envoy.connectTimeoutSeconds | quote }}
proxy-initial-fetch-timeout: {{ .Values.envoy.initialFetchTimeoutSeconds | quote }}
proxy-max-active-downstream-connections: {{ .Values.envoy.maxGlobalDownstreamConnections | quote }}
proxy-max-requests-per-connection: {{ .Values.envoy.maxRequestsPerConnection | quote }}
proxy-max-connection-duration-seconds: {{ .Values.envoy.maxConnectionDurationSeconds | quote }}
proxy-idle-timeout-seconds: {{ .Values.envoy.idleTimeoutDurationSeconds | quote }}
proxy-max-concurrent-retries: {{ .Values.envoy.maxConcurrentRetries | quote }}
proxy-use-original-source-address: {{ .Values.envoy.useOriginalSourceAddress | quote }}
proxy-cluster-max-connections: {{ .Values.envoy.clusterMaxConnections | quote }}
proxy-cluster-max-requests: {{ .Values.envoy.clusterMaxRequests | quote }}
http-retry-count: {{ .Values.envoy.httpRetryCount | quote }}
http-stream-idle-timeout: {{ .Values.envoy.streamIdleTimeoutDurationSeconds | quote }}
@@ -1402,13 +1498,14 @@ data:
{{- if hasKey .Values.clustermesh "maxConnectedClusters" }}
max-connected-clusters: {{ .Values.clustermesh.maxConnectedClusters | quote }}
{{- end }}
clustermesh-cache-ttl: {{ .Values.clustermesh.cacheTTL | quote }}
clustermesh-enable-endpoint-sync: {{ .Values.clustermesh.enableEndpointSliceSynchronization | quote }}
clustermesh-enable-mcs-api: {{ .Values.clustermesh.enableMCSAPISupport | quote }}
clustermesh-enable-mcs-api: {{ (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) | quote }}
clustermesh-mcs-api-install-crds: {{ .Values.clustermesh.mcsapi.installCRDs | quote }}
policy-default-local-cluster: {{ .Values.clustermesh.policyDefaultLocalCluster | quote }}
nat-map-stats-entries: {{ .Values.nat.mapStatsEntries | quote }}
nat-map-stats-interval: {{ .Values.nat.mapStatsInterval | quote }}
enable-internal-traffic-policy: {{ .Values.enableInternalTrafficPolicy | quote }}
enable-lb-ipam: {{ .Values.enableLBIPAM | quote }}
enable-non-default-deny-policies: {{ .Values.enableNonDefaultDenyPolicies | quote }}

View File

@@ -22,10 +22,7 @@ spec:
selector:
matchLabels:
k8s-app: cilium-envoy
{{- with .Values.envoy.updateStrategy }}
updateStrategy:
{{- toYaml . | trim | nindent 4 }}
{{- end }}
{{- include "envoy.updateStrategy" . | nindent 2 }}
template:
metadata:
annotations:
@@ -69,6 +66,7 @@ spec:
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- include "envoy.initContainers" . | nindent 6 }}
containers:
- name: cilium-envoy
image: {{ include "cilium.image" .Values.envoy.image | quote }}
@@ -94,6 +92,7 @@ spec:
{{- if .Values.envoy.log.path }}
- '--log-path {{ .Values.envoy.log.path }}'
{{- end }}
{{- include "envoy.args.extra" . | nindent 8 }}
{{- with .Values.envoy.extraArgs }}
{{- toYaml . | trim | nindent 8 }}
{{- end }}
@@ -157,6 +156,7 @@ spec:
- name: KUBERNETES_SERVICE_PORT
value: {{ include "k8sServicePort" . }}
{{- end }}
{{- include "envoy.env.extra" . | nindent 8 }}
{{- with .Values.envoy.extraEnv }}
{{- toYaml . | trim | nindent 8 }}
{{- end }}
@@ -164,19 +164,7 @@ spec:
resources:
{{- toYaml . | trim | nindent 10 }}
{{- end }}
{{- if .Values.envoy.prometheus.enabled }}
ports:
- name: envoy-metrics
containerPort: {{ .Values.envoy.prometheus.port }}
hostPort: {{ .Values.envoy.prometheus.port }}
protocol: TCP
{{- if and .Values.envoy.debug.admin.enabled .Values.envoy.debug.admin.port }}
- name: envoy-admin
containerPort: {{ .Values.envoy.debug.admin.port }}
hostPort: {{ .Values.envoy.debug.admin.port }}
protocol: TCP
{{- end }}
{{- end }}
{{- include "envoy.ports" . }}
securityContext:
{{- if .Values.envoy.securityContext.privileged }}
privileged: true
@@ -209,6 +197,7 @@ spec:
mountPath: /sys/fs/bpf
mountPropagation: HostToContainer
{{- end }}
{{- include "envoy.volumeMounts.extra" . | nindent 8 }}
{{- range .Values.envoy.extraHostPathMounts }}
- name: {{ .name }}
mountPath: {{ .mountPath }}
@@ -232,10 +221,7 @@ spec:
{{- if .Values.envoy.dnsPolicy }}
dnsPolicy: {{ .Values.envoy.dnsPolicy }}
{{- end }}
{{- with .Values.envoy.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- include "envoy.affinity" . | nindent 6 }}
{{- with .Values.envoy.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
@@ -269,6 +255,7 @@ spec:
path: /sys/fs/bpf
type: DirectoryOrCreate
{{- end }}
{{- include "envoy.hostPathMounts.extra" . | nindent 4 }}
{{- range .Values.envoy.extraHostPathMounts }}
- name: {{ .name }}
hostPath:

View File

@@ -32,5 +32,5 @@ spec:
- name: envoy-metrics
port: {{ .Values.envoy.prometheus.port }}
protocol: TCP
targetPort: envoy-metrics
targetPort: {{ .Values.envoy.prometheus.port }}
{{- end }}

View File

@@ -49,8 +49,8 @@ spec:
externalTrafficPolicy: {{ .Values.ingressController.service.externalTrafficPolicy }}
{{- end }}
---
apiVersion: v1
kind: Endpoints
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: {{ .Values.ingressController.service.name }}
namespace: {{ include "cilium.namespace" . }}
@@ -65,9 +65,10 @@ metadata:
annotations:
{{- toYaml .Values.ingressController.service.annotations | nindent 4 }}
{{- end }}
subsets:
addressType: IPv4
endpoints:
- addresses:
- ip: "192.192.192.192"
ports:
- port: 9999
- "192.192.192.192"
ports:
- port: 9999
{{- end }}

View File

@@ -122,6 +122,8 @@ spec:
{{- if .Values.serviceAccounts.nodeinit.enabled }}
serviceAccountName: {{ .Values.serviceAccounts.nodeinit.name | quote }}
automountServiceAccountToken: {{ .Values.serviceAccounts.nodeinit.automount }}
{{- else }}
automountServiceAccountToken: false
{{- end }}
{{- with .Values.nodeinit.extraVolumes }}
volumes:

View File

@@ -69,7 +69,7 @@ rules:
resources:
- endpointslices
verbs:
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- create
- update
- delete
@@ -78,6 +78,17 @@ rules:
- get
- list
- watch
{{- if .Values.clustermesh.enableEndpointSliceSynchronization }}
- apiGroups:
- ""
resources:
# The controller needs to be able to set a service's finalizers to be able to create an EndpointSlice
# resource that is owned by the service and sets blockOwnerDeletion=true in its ownerRef.
# This is required when the admission plugin OwnerReferencesPermissionEnforcement is activated.
- services/finalizers
verbs:
- update
{{- end }}
- apiGroups:
- ""
resources:
@@ -114,6 +125,20 @@ rules:
- delete
- patch
{{- end }}
{{- if or .Values.ingressController.enabled .Values.gatewayAPI.enabled }}
- apiGroups:
- "discovery.k8s.io"
resources:
- endpointslices
verbs:
- get
- list
- watch
- create
- update
- delete
- patch
{{- end }}
{{- if .Values.clustermesh.enableEndpointSliceSynchronization }}
- apiGroups:
- ""
@@ -227,7 +252,6 @@ rules:
- update
resourceNames:
- ciliumloadbalancerippools.cilium.io
- ciliumbgppeeringpolicies.cilium.io
- ciliumbgpclusterconfigs.cilium.io
- ciliumbgppeerconfigs.cilium.io
- ciliumbgpadvertisements.cilium.io
@@ -248,12 +272,15 @@ rules:
- ciliuml2announcementpolicies.cilium.io
- ciliumpodippools.cilium.io
- ciliumgatewayclassconfigs.cilium.io
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.installCRDs }}
- serviceimports.multicluster.x-k8s.io
- serviceexports.multicluster.x-k8s.io
{{- end }}
- apiGroups:
- cilium.io
resources:
- ciliumloadbalancerippools
- ciliumpodippools
- ciliumbgppeeringpolicies
- ciliumbgpclusterconfigs
- ciliumbgpnodeconfigoverrides
- ciliumbgppeerconfigs
@@ -301,6 +328,10 @@ rules:
- networking.k8s.io
resources:
- ingresses/status # To update ingress status with load balancer IP.
# The controller needs to be able to set ingress finalizers to be able to create a CiliumEnvoyConfig
# resource that is owned by the ingress, and set blockOwnerDeletion=true in its ownerRef.
# This is required when the admission plugin OwnerReferencesPermissionEnforcement is activated.
- ingresses/finalizers
verbs:
- update
{{- end }}
@@ -352,7 +383,7 @@ rules:
- update
- patch
{{- end }}
{{- if or .Values.gatewayAPI.enabled .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.gatewayAPI.enabled .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- apiGroups:
- multicluster.x-k8s.io
resources:
@@ -361,14 +392,14 @@ rules:
- get
- list
- watch
{{- if .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- create
- update
- patch
- delete
{{- end }}
{{- end }}
{{- if .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- apiGroups:
- multicluster.x-k8s.io
resources:
@@ -401,4 +432,10 @@ rules:
- patch
- delete
{{- end }}
- apiGroups:
- cilium.io
resources:
- ciliumendpointslices
verbs:
- deletecollection
{{- end }}

View File

@@ -98,7 +98,7 @@ spec:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- name: CILIUM_CLUSTERMESH_CONFIG
value: /var/lib/cilium/clustermesh/
{{- end }}
@@ -170,6 +170,7 @@ spec:
- name: AZURE_RESOURCE_GROUP
value: {{ .Values.azure.resourceGroup }}
{{- end }}
{{- if .Values.azure.clientID }}
- name: AZURE_CLIENT_ID
valueFrom:
secretKeyRef:
@@ -181,11 +182,15 @@ spec:
name: cilium-azure
key: AZURE_CLIENT_SECRET
{{- end }}
{{- end }}
{{- with .Values.operator.extraEnv }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- if .Values.operator.prometheus.enabled }}
ports:
- name: health
containerPort: 9234
hostPort: 9234
{{- if .Values.operator.prometheus.enabled }}
- name: prometheus
containerPort: {{ .Values.operator.prometheus.port }}
{{- if .Values.operator.hostNetwork }}
@@ -199,7 +204,7 @@ spec:
host: {{ .Values.ipv4.enabled | ternary "127.0.0.1" "::1" | quote }}
{{- end }}
path: /healthz
port: 9234
port: health
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
@@ -210,7 +215,7 @@ spec:
host: {{ .Values.ipv4.enabled | ternary "127.0.0.1" "::1" | quote }}
{{- end }}
path: /healthz
port: 9234
port: health
scheme: HTTP
initialDelaySeconds: 0
periodSeconds: 5
@@ -230,7 +235,7 @@ spec:
readOnly: true
{{- end }}
{{- end }}
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- name: clustermesh-secrets
mountPath: /var/lib/cilium/clustermesh
readOnly: true
@@ -245,6 +250,11 @@ spec:
mountPath: {{ dir .Values.authentication.mutual.spire.agentSocketPath }}
readOnly: true
{{- end }}
{{- if and .Values.operator.prometheus.enabled .Values.operator.prometheus.tls.enabled }}
- name: prometheus-tls
mountPath: /var/lib/cilium/tls/prometheus
readOnly: true
{{- end }}
{{- range .Values.operator.extraHostPathMounts }}
- name: {{ .name }}
mountPath: {{ .mountPath }}
@@ -256,13 +266,15 @@ spec:
{{- with .Values.operator.extraVolumeMounts }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- include "cilium-operator.volumeMounts.extra" . | nindent 8 }}
{{- with .Values.operator.resources }}
resources:
{{- toYaml . | trim | nindent 10 }}
{{- end }}
{{- with .Values.operator.securityContext }}
{{- $sc := include "cilium.operator.securityContext" . | trim }}
{{- if $sc }}
securityContext:
{{- toYaml . | trim | nindent 10 }}
{{- $sc | nindent 10 }}
{{- end }}
terminationMessagePolicy: FallbackToLogsOnError
hostNetwork: {{ .Values.operator.hostNetwork }}
@@ -295,23 +307,25 @@ spec:
nodeSelector:
{{- toYaml . | trim | nindent 8 }}
{{- end }}
{{- if and (or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.config.enabled (not (and .Values.clustermesh.useAPIServer .Values.clustermesh.apiserver.kvstoremesh.enabled )) }}
{{- if and (or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.config.enabled (not (and .Values.clustermesh.useAPIServer .Values.clustermesh.apiserver.kvstoremesh.enabled )) }}
hostAliases:
{{- range $cluster := .Values.clustermesh.config.clusters }}
{{- range $_, $cluster := (include "clustermesh-clusters" . | fromJson) }}
{{- range $ip := $cluster.ips }}
- ip: {{ $ip }}
hostnames: [ "{{ $cluster.name }}.{{ $.Values.clustermesh.config.domain }}" ]
{{- end }}
{{- end }}
{{- end }}
{{- with .Values.operator.tolerations }}
{{- if or (.Values.operator.tolerations) (hasKey .Values "agentNotReadyTaintKey") }}
tolerations:
{{- with .Values.operator.tolerations }}
{{- toYaml . | trim | nindent 8 }}
{{- end }}
{{- if hasKey .Values "agentNotReadyTaintKey" }}
- key: {{ .Values.agentNotReadyTaintKey }}
operator: Exists
{{ end}}
{{- end}}
volumes:
# To read the configuration from the config map
- name: cilium-config-path
@@ -360,7 +374,7 @@ spec:
{{- with .Values.operator.extraVolumes }}
{{- toYaml . | nindent 6 }}
{{- end }}
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.enableEndpointSliceSynchronization .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
# To read the clustermesh configuration
- name: clustermesh-secrets
projected:
@@ -417,4 +431,25 @@ spec:
path: local-etcd-client-ca.crt
{{- end }}
{{- end }}
{{- if and .Values.operator.prometheus.enabled .Values.operator.prometheus.tls.enabled }}
# To read the prometheus configuration
- name: prometheus-tls
projected:
# note: the leading zero means this number is in octal representation: do not remove it
defaultMode: 0400
sources:
- secret:
name: {{ .Values.operator.prometheus.tls.server.existingSecret }}
optional: true
items:
- key: tls.crt
path: server.crt
- key: tls.key
path: server.key
{{- if .Values.operator.prometheus.tls.server.mtls.enabled }}
- key: ca.crt
path: client-ca.crt
{{- end }}
{{- end }}
{{- include "cilium-operator.volumes.extra" . | nindent 6 }}
{{- end }}

View File

@@ -83,3 +83,35 @@ rules:
- update
- patch
{{- end }}
{{- if and .Values.operator.enabled .Values.serviceAccounts.operator.create }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: cilium-operator-ztunnel
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.operator.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
labels:
app.kubernetes.io/part-of: cilium
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
rules:
# ZTunnel DaemonSet management permissions
# Note: These permissions must always be granted (not conditional on encryption.type)
# because the controller needs to clean up stale DaemonSets when ztunnel is disabled.
- apiGroups:
- apps
resources:
- daemonsets
verbs:
- create
- delete
- get
- list
- watch
{{- end }}

View File

@@ -77,3 +77,29 @@ subjects:
name: {{ .Values.serviceAccounts.operator.name | quote }}
namespace: {{ include "cilium.namespace" . }}
{{- end }}
{{- if and .Values.operator.enabled .Values.serviceAccounts.operator.create }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cilium-operator-ztunnel
namespace: {{ include "cilium.namespace" . }}
labels:
app.kubernetes.io/part-of: cilium
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.operator.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cilium-operator-ztunnel
subjects:
- kind: ServiceAccount
name: {{ .Values.serviceAccounts.operator.name | quote }}
namespace: {{ include "cilium.namespace" . }}
{{- end }}

View File

@@ -1,5 +1,6 @@
{{- if .Values.operator.enabled }}
{{- if .Values.azure.enabled }}
{{- if .Values.azure.clientID }}
apiVersion: v1
kind: Secret
metadata:
@@ -19,3 +20,4 @@ data:
AZURE_CLIENT_SECRET: {{ default "" .Values.azure.clientSecret | b64enc | quote }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -94,7 +94,6 @@ rules:
- cilium.io
resources:
- ciliumloadbalancerippools
- ciliumbgppeeringpolicies
- ciliumbgpnodeconfigs
- ciliumbgpadvertisements
- ciliumbgppeerconfigs

View File

@@ -20,6 +20,9 @@ metadata:
{{- with $.Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with $.Values.secretsNamespaceLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
annotations:
{{- with $.Values.secretsNamespaceAnnotations }}
{{- toYaml . | nindent 4 }}

View File

@@ -50,7 +50,7 @@ rules:
- get
- list
- watch
{{- if .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- apiGroups:
- multicluster.x-k8s.io
resources:

View File

@@ -137,6 +137,7 @@ spec:
- --advertise-client-urls=https://localhost:2379
- --initial-cluster-token=$(INITIAL_CLUSTER_TOKEN)
- --auto-compaction-retention=1
- --enable-grpc-gateway=false
{{- if .Values.clustermesh.apiserver.metrics.etcd.enabled }}
- --listen-metrics-urls=http://0.0.0.0:{{ .Values.clustermesh.apiserver.metrics.etcd.port }}
- --metrics={{ .Values.clustermesh.apiserver.metrics.etcd.mode }}
@@ -208,12 +209,13 @@ spec:
- --prometheus-serve-addr=:{{ .Values.clustermesh.apiserver.metrics.port }}
- --controller-group-metrics=all
{{- end }}
{{- if .Values.clustermesh.enableMCSAPISupport }}
{{- if or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport }}
- --clustermesh-enable-mcs-api
{{- end }}
{{- if .Values.ciliumEndpointSlice.enabled }}
- --enable-cilium-endpoint-slice
{{- end }}
{{- include "clustermesh.apiserver.args.extra" . | nindent 8 }}
{{- with .Values.clustermesh.apiserver.extraArgs }}
{{- toYaml . | trim | nindent 8 }}
{{- end }}
@@ -303,12 +305,14 @@ spec:
{{- if hasKey .Values.clustermesh "maxConnectedClusters" }}
- --max-connected-clusters={{ .Values.clustermesh.maxConnectedClusters }}
{{- end }}
- --clustermesh-cache-ttl={{ .Values.clustermesh.cacheTTL }}
- --health-port={{ .Values.clustermesh.apiserver.kvstoremesh.healthPort }}
{{- if .Values.clustermesh.apiserver.metrics.kvstoremesh.enabled }}
- --prometheus-serve-addr=:{{ .Values.clustermesh.apiserver.metrics.kvstoremesh.port }}
- --controller-group-metrics=all
{{- end }}
- --enable-heartbeat={{ eq "true" (include "identityAllocationCRD" .) | ternary "false" "true" }}
{{- include "clustermesh.kvstoremesh.args.extra" . | nindent 8 }}
{{- with .Values.clustermesh.apiserver.kvstoremesh.extraArgs }}
{{- toYaml . | trim | nindent 8 }}
{{- end }}
@@ -505,7 +509,7 @@ spec:
{{- end }}
{{- if and .Values.clustermesh.config.enabled .Values.clustermesh.apiserver.kvstoremesh.enabled }}
hostAliases:
{{- range $cluster := .Values.clustermesh.config.clusters }}
{{- range $_, $cluster := (include "clustermesh-clusters" . | fromJson) }}
{{- range $ip := $cluster.ips }}
- ip: {{ $ip }}
hostnames: [ "{{ $cluster.name }}.{{ $.Values.clustermesh.config.domain }}" ]

View File

@@ -1,4 +1,4 @@
{{- if and .Values.clustermesh.useAPIServer (eq .Values.clustermesh.apiserver.kvstoremesh.kvstoreMode "internal") }}
{{- if and .Values.clustermesh.useAPIServer (eq .Values.clustermesh.apiserver.kvstoremesh.kvstoreMode "internal") (not .Values.clustermesh.apiserver.service.externallyCreated) }}
apiVersion: v1
kind: Service
metadata:

View File

@@ -9,10 +9,18 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
securityContext:
seccompProfile:
type: RuntimeDefault
containers:
- name: certgen
image: {{ include "cilium.image" .Values.certgen.image | quote }}
imagePullPolicy: {{ .Values.certgen.image.pullPolicy }}
securityContext:
capabilities:
drop:
- ALL
allowPrivilegeEscalation: false
{{- with .Values.certgen.resources }}
resources:
{{- toYaml . | nindent 12 }}
@@ -84,7 +92,7 @@ spec:
volumeMounts:
{{- toYaml . | nindent 10 }}
{{- end }}
hostNetwork: true
hostNetwork: false
{{- with .Values.certgen.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
@@ -96,7 +104,6 @@ spec:
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccount: {{ .Values.serviceAccounts.clustermeshcertgen.name | quote }}
serviceAccountName: {{ .Values.serviceAccounts.clustermeshcertgen.name | quote }}
automountServiceAccountToken: {{ .Values.serviceAccounts.clustermeshcertgen.automount }}
{{- with .Values.imagePullSecrets }}
@@ -108,9 +115,11 @@ spec:
volumes:
{{- toYaml . | nindent 6 }}
{{- end }}
affinity:
{{- with .Values.certgen.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
ttlSecondsAfterFinished: {{ .Values.certgen.ttlSecondsAfterFinished }}
{{- with .Values.certgen.ttlSecondsAfterFinished }}
ttlSecondsAfterFinished: {{ . }}
{{- end }}
{{- end }}

View File

@@ -16,6 +16,8 @@ metadata:
{{- end }}
spec:
schedule: {{ .Values.clustermesh.apiserver.tls.auto.schedule | quote }}
successfulJobsHistoryLimit: {{ .Values.certgen.cronJob.successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ .Values.certgen.cronJob.failedJobsHistoryLimit }}
concurrencyPolicy: Forbid
jobTemplate:
{{- include "clustermesh-apiserver-generate-certs.job.spec" . | nindent 4 }}

View File

@@ -1,9 +1,18 @@
{{- if and (and .Values.clustermesh.useAPIServer (eq .Values.clustermesh.apiserver.kvstoremesh.kvstoreMode "internal")) .Values.clustermesh.apiserver.tls.auto.enabled (eq .Values.clustermesh.apiserver.tls.auto.method "cronJob") }}
{{/*
Because Kubernetes job specs are immutable, Helm will fail patch this job if
the spec changes between releases. To avoid breaking the upgrade path, we
generate a name for the job here which is based on the checksum of the spec.
This will cause the name of the job to change if its content changes,
and in turn cause Helm to do delete the old job and replace it with a new one.
*/}}
{{- $jobSpec := include "clustermesh-apiserver-generate-certs.job.spec" . -}}
{{- $checkSum := $jobSpec | sha256sum | trunc 10 -}}
---
apiVersion: batch/v1
kind: Job
metadata:
name: clustermesh-apiserver-generate-certs
name: clustermesh-apiserver-generate-certs-{{$checkSum}}
namespace: {{ include "cilium.namespace" . }}
labels:
k8s-app: clustermesh-apiserver-generate-certs
@@ -11,13 +20,14 @@ metadata:
{{- toYaml . | nindent 4 }}
{{- end }}
app.kubernetes.io/part-of: cilium
{{- if or .Values.certgen.annotations.job .Values.clustermesh.annotations }}
annotations:
"helm.sh/hook": post-install,post-upgrade
{{- with .Values.certgen.annotations.job }}
{{- toYaml . | nindent 4 }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{ include "clustermesh-apiserver-generate-certs.job.spec" . }}
{{- end }}
{{ $jobSpec }}
{{- end }}

View File

@@ -38,7 +38,6 @@ rules:
- clustermesh-apiserver-admin-cert
- clustermesh-apiserver-remote-cert
- clustermesh-apiserver-local-cert
- clustermesh-apiserver-client-cert
verbs:
- update
{{- end }}

View File

@@ -8,12 +8,16 @@ kind: Secret
metadata:
name: clustermesh-apiserver-admin-cert
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
cilium.io/helm-template-non-idempotent: "true"
annotations:
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -8,12 +8,16 @@ kind: Secret
metadata:
name: clustermesh-apiserver-local-cert
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
cilium.io/helm-template-non-idempotent: "true"
annotations:
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -8,12 +8,16 @@ kind: Secret
metadata:
name: clustermesh-apiserver-remote-cert
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
cilium.io/helm-template-non-idempotent: "true"
annotations:
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -10,12 +10,16 @@ kind: Secret
metadata:
name: clustermesh-apiserver-server-cert
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
cilium.io/helm-template-non-idempotent: "true"
annotations:
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -1,5 +1,5 @@
{{- if and
(and .Values.clustermesh.useAPIServer (eq .Values.clustermesh.apiserver.kvstoremesh.kvstoreMode "internal") (eq "true" (include "identityAllocationCRD" .)))
(and .Values.clustermesh.useAPIServer .Values.clustermesh.config.enabled (eq .Values.clustermesh.apiserver.kvstoremesh.kvstoreMode "internal") (eq "true" (include "identityAllocationCRD" .)))
(ne .Values.clustermesh.apiserver.tls.authMode "legacy")
}}
---
@@ -21,7 +21,7 @@ metadata:
data:
users.yaml: |
users:
{{- range .Values.clustermesh.config.clusters }}
{{- range (include "clustermesh-clusters" . | fromJson) }}
- name: remote-{{ .name }}
role: remote
{{- end }}

View File

@@ -43,3 +43,26 @@ key-file: /var/lib/cilium/clustermesh/{{ $prefix }}etcd-client.key
cert-file: /var/lib/cilium/clustermesh/{{ $prefix }}etcd-client.crt
{{- end }}
{{- end }}
{{- define "clustermesh-clusters" }}
{{- $clusters := dict }}
{{- if kindIs "map" .Values.clustermesh.config.clusters }}
{{- range $name, $cluster := deepCopy .Values.clustermesh.config.clusters }}
{{- if ne $cluster.enabled false }}
{{- $_ := unset $cluster "enabled" }}
{{- $_ = set $cluster "name" $name }}
{{- $_ = set $clusters $name $cluster }}
{{- end }}
{{- end }}
{{- else if kindIs "slice" .Values.clustermesh.config.clusters }}
{{- range $cluster := deepCopy .Values.clustermesh.config.clusters }}
{{- if ne $cluster.enabled false }}
{{- $_ := unset $cluster "enabled" }}
{{- $_ := set $clusters $cluster.name $cluster }}
{{- end }}
{{- end }}
{{- else }}
{{- fail (printf "unknown type %s for clustermesh.config.clusters" (kindOf .Values.clustermesh.config.clusters)) }}
{{- end }}
{{- toJson $clusters }}
{{- end }}

View File

@@ -18,7 +18,7 @@ data:
{{- $kvstoremesh := and .Values.clustermesh.useAPIServer .Values.clustermesh.apiserver.kvstoremesh.enabled }}
{{- $override := ternary (printf "https://clustermesh-apiserver.%s.svc:2379" (include "cilium.namespace" .)) "" $kvstoremesh }}
{{- $local_etcd := and $kvstoremesh (eq .Values.clustermesh.apiserver.kvstoremesh.kvstoreMode "external") }}
{{- range .Values.clustermesh.config.clusters }}
{{- range (include "clustermesh-clusters" . | fromJson) }}
{{ .name }}: {{ include "clustermesh-config-generate-etcd-cfg" (list . $.Values.clustermesh.config.domain $override $local_etcd $.Values.etcd ) | b64enc }}
{{- /* The parenthesis around .tls are required, since it can be null: https://stackoverflow.com/a/68807258 */}}
{{- if and (eq $override "") (.tls).cert (.tls).key }}

View File

@@ -15,7 +15,7 @@ metadata:
{{- toYaml . | nindent 4 }}
{{- end }}
data:
{{- range .Values.clustermesh.config.clusters }}
{{- range (include "clustermesh-clusters" . | fromJson) }}
{{ .name }}: {{ include "clustermesh-config-generate-etcd-cfg" (list . $.Values.clustermesh.config.domain "" false $.Values.etcd ) | b64enc }}
{{- /* The parenthesis around .tls are required, since it can be null: https://stackoverflow.com/a/68807258 */}}
{{- if and (.tls).cert (.tls).key }}

View File

@@ -0,0 +1,29 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: coredns-mcsapi
labels:
app.kubernetes.io/part-of: cilium
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
annotations:
{{/*
We have to leave CoreDNS RBAC to be able to read MCS-API resources
as we would leave a broken CoreDNS installation otherwise
*/}}
helm.sh/resource-policy: keep
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
rules:
- apiGroups:
- multicluster.x-k8s.io
resources:
- serviceimports
verbs:
- list
- watch
{{- end }}

View File

@@ -0,0 +1,28 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: coredns-mcsapi
labels:
app.kubernetes.io/part-of: cilium
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
annotations:
{{/*
We have to leave CoreDNS RBAC to be able to read MCS-API resources
as we would leave a broken CoreDNS installation otherwise
*/}}
helm.sh/resource-policy: keep
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: coredns-mcsapi
subjects:
- kind: ServiceAccount
name: {{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.serviceAccountName | quote }}
namespace: {{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.namespace | quote }}
{{- end }}

View File

@@ -0,0 +1,22 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cilium-coredns-mcsapi-autoconfig
{{- with .Values.commonLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
rules:
# note: namespaces permission are needed to initialize and verify that the kubernetes client works.
- apiGroups:
- ""
resources:
- "namespaces"
verbs:
- "get"
{{- end }}

View File

@@ -0,0 +1,22 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cilium-coredns-mcsapi-autoconfig
{{- with .Values.commonLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cilium-coredns-mcsapi-autoconfig
subjects:
- kind: ServiceAccount
name: {{ .Values.serviceAccounts.corednsMCSAPI.name | quote }}
namespace: {{ include "cilium.namespace" . }}
{{- end }}

View File

@@ -0,0 +1,36 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cilium-coredns-mcsapi-autoconfig
namespace: {{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.namespace }}
{{- with .Values.commonLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
rules:
- apiGroups:
- ""
resources:
- "configmaps"
verbs:
- "update"
- "patch"
- "get"
resourceNames:
- "{{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.configMapName }}"
- apiGroups:
- "apps"
resources:
- "deployments"
verbs:
- "patch"
- "update"
- "get"
resourceNames:
- "{{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.deploymentName }}"
{{- end }}

View File

@@ -0,0 +1,23 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cilium-coredns-mcsapi-autoconfig
namespace: {{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.namespace }}
{{- with .Values.commonLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cilium-coredns-mcsapi-autoconfig
subjects:
- kind: ServiceAccount
name: {{ .Values.serviceAccounts.corednsMCSAPI.name | quote }}
namespace: {{ include "cilium.namespace" . }}
{{- end }}

View File

@@ -0,0 +1,20 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled .Values.serviceAccounts.corednsMCSAPI.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Values.serviceAccounts.corednsMCSAPI.name | quote }}
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- if or .Values.serviceAccounts.corednsMCSAPI.annotations .Values.clustermesh.annotations }}
annotations:
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.serviceAccounts.corednsMCSAPI.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,82 @@
{{- if and (or .Values.clustermesh.mcsapi.enabled .Values.clustermesh.enableMCSAPISupport) .Values.clustermesh.mcsapi.corednsAutoConfigure.enabled }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: cilium-coredns-mcsapi-autoconfig
namespace: {{ include "cilium.namespace" . }}
labels:
k8s-app: cilium-coredns-mcsapi-autoconfig
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
app.kubernetes.io/part-of: cilium
annotations:
"helm.sh/hook": post-install,post-upgrade
{{- with .Values.clustermesh.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
template:
metadata:
labels:
k8s-app: cilium-coredns-mcsapi-autoconfig
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
containers:
- name: autoconfig
image: {{ include "cilium.image" .Values.clustermesh.apiserver.image | quote }}
imagePullPolicy: {{ .Values.clustermesh.apiserver.image.pullPolicy }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.resources }}
resources:
{{- toYaml . | nindent 10 }}
{{- end }}
command:
- /usr/bin/clustermesh-apiserver
args:
- mcsapi-coredns-cfg
- --coredns-deployment-name={{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.deploymentName }}
- --coredns-configmap-name={{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.configMapName }}
- --coredns-namespace={{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.namespace }}
- --coredns-cluster-domain={{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.clusterDomain }}
- --coredns-clusterset-domain={{ .Values.clustermesh.mcsapi.corednsAutoConfigure.coredns.clustersetDomain }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.extraArgs }}
{{- toYaml . | trim | nindent 12 }}
{{- end }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.extraVolumeMounts }}
volumeMounts:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- if .Values.clustermesh.mcsapi.corednsAutoConfigure.priorityClassName }}
priorityClassName: {{ .Values.clustermesh.mcsapi.corednsAutoConfigure.priorityClassName }}
{{- end }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ .Values.serviceAccounts.corednsMCSAPI.name | quote }}
automountServiceAccountToken: true
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
restartPolicy: OnFailure
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.extraVolumes }}
volumes:
{{- toYaml . | nindent 6 }}
{{- end }}
{{- with .Values.clustermesh.mcsapi.corednsAutoConfigure.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
ttlSecondsAfterFinished: {{ .Values.clustermesh.mcsapi.corednsAutoConfigure.ttlSecondsAfterFinished }}
{{- end }}

View File

@@ -29,6 +29,8 @@ data:
pprof: {{ .Values.hubble.relay.pprof.enabled | quote }}
pprof-address: {{ .Values.hubble.relay.pprof.address | quote }}
pprof-port: {{ .Values.hubble.relay.pprof.port | quote }}
pprof-mutex-profile-fraction: {{ .Values.hubble.relay.pprof.mutexProfileFraction | quote }}
pprof-block-profile-rate: {{ .Values.hubble.relay.pprof.blockProfileRate | quote }}
{{- end }}
{{- if .Values.hubble.relay.prometheus.enabled }}
metrics-listen-address: ":{{ .Values.hubble.relay.prometheus.port }}"
@@ -44,4 +46,10 @@ data:
disable-client-tls: true
{{- end }}
{{- include "hubble-relay.config.tls" . | nindent 4 }}
{{- if .Values.hubble.relay.logOptions.format }}
log-format: {{ .Values.hubble.relay.logOptions.format }}
{{- end }}
{{- if .Values.hubble.relay.logOptions.level }}
log-level: {{ .Values.hubble.relay.logOptions.level }}
{{- end }}
{{- end }}

View File

@@ -14,14 +14,6 @@ metadata:
{{- end }}
rules:
- apiGroups:
- networking.k8s.io
resources:
- networkpolicies
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
@@ -43,12 +35,4 @@ rules:
- get
- list
- watch
- apiGroups:
- cilium.io
resources:
- "*"
verbs:
- get
- list
- watch
{{- end }}

View File

@@ -74,11 +74,11 @@ spec:
livenessProbe:
httpGet:
path: /healthz
port: 8081
port: http
readinessProbe:
httpGet:
path: /
port: 8081
port: http
{{- with .Values.hubble.ui.frontend.resources }}
resources:
{{- toYaml . | trim | nindent 10 }}
@@ -184,8 +184,12 @@ spec:
defaultMode: 420
name: hubble-ui-nginx
name: hubble-ui-nginx-conf
- emptyDir: {}
name: tmp-dir
- name: tmp-dir
{{- if .Values.hubble.ui.tmpVolume }}
{{- toYaml .Values.hubble.ui.tmpVolume | nindent 8 }}
{{- else }}
emptyDir: {}
{{- end }}
{{- if .Values.hubble.relay.tls.server.enabled }}
- name: hubble-ui-client-certs
{{- if .Values.hubble.ui.standalone.enabled }}

View File

@@ -137,7 +137,6 @@ spec:
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccount: {{ .Values.serviceAccounts.hubblecertgen.name | quote }}
serviceAccountName: {{ .Values.serviceAccounts.hubblecertgen.name | quote }}
automountServiceAccountToken: {{ .Values.serviceAccounts.hubblecertgen.automount }}
{{- with .Values.imagePullSecrets }}
@@ -149,9 +148,11 @@ spec:
volumes:
{{- toYaml . | nindent 6 }}
{{- end }}
affinity:
{{- with .Values.certgen.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
ttlSecondsAfterFinished: {{ .Values.certgen.ttlSecondsAfterFinished }}
{{- with .Values.certgen.ttlSecondsAfterFinished }}
ttlSecondsAfterFinished: {{ . }}
{{- end }}
{{- end }}

View File

@@ -23,6 +23,8 @@ metadata:
{{- end }}
spec:
schedule: {{ .Values.hubble.tls.auto.schedule | quote }}
successfulJobsHistoryLimit: {{ .Values.certgen.cronJob.successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ .Values.certgen.cronJob.failedJobsHistoryLimit }}
concurrencyPolicy: Forbid
jobTemplate:
{{- include "hubble-generate-certs.job.spec" . | nindent 4 }}

View File

@@ -1,9 +1,18 @@
{{- if and .Values.hubble.enabled .Values.hubble.tls.enabled .Values.hubble.tls.auto.enabled (eq .Values.hubble.tls.auto.method "cronJob") }}
{{/*
Because Kubernetes job specs are immutable, Helm will fail patch this job if
the spec changes between releases. To avoid breaking the upgrade path, we
generate a name for the job here which is based on the checksum of the spec.
This will cause the name of the job to change if its content changes,
and in turn cause Helm to do delete the old job and replace it with a new one.
*/}}
{{- $jobSpec := include "hubble-generate-certs.job.spec" . -}}
{{- $checkSum := $jobSpec | sha256sum | trunc 10 -}}
---
apiVersion: batch/v1
kind: Job
metadata:
name: hubble-generate-certs
name: hubble-generate-certs-{{$checkSum}}
namespace: {{ include "cilium.namespace" . }}
labels:
k8s-app: hubble-generate-certs
@@ -12,13 +21,14 @@ metadata:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- if or .Values.certgen.annotations.job .Values.hubble.annotations }}
annotations:
"helm.sh/hook": post-install,post-upgrade
{{- with .Values.certgen.annotations.job }}
{{- toYaml . | nindent 4 }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.hubble.annotations }}
{{- toYaml . | nindent 4 }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{ include "hubble-generate-certs.job.spec" . }}
{{- end }}
{{ $jobSpec }}
{{- end }}

View File

@@ -10,13 +10,17 @@ kind: Secret
metadata:
name: hubble-metrics-server-certs
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
cilium.io/helm-template-non-idempotent: "true"
{{- with .Values.hubble.annotations }}
annotations:
{{- with .Values.hubble.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -17,13 +17,17 @@ kind: Secret
metadata:
name: hubble-relay-client-certs
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
cilium.io/helm-template-non-idempotent: "true"
{{- with .Values.hubble.annotations }}
annotations:
{{- with .Values.hubble.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -10,13 +10,17 @@ kind: Secret
metadata:
name: hubble-relay-server-certs
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
cilium.io/helm-template-non-idempotent: "true"
{{- with .Values.hubble.annotations }}
annotations:
{{- with .Values.hubble.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -18,13 +18,17 @@ kind: Secret
metadata:
name: hubble-server-certs
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
cilium.io/helm-template-non-idempotent: "true"
{{- with .Values.hubble.annotations }}
annotations:
{{- with .Values.hubble.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -10,13 +10,17 @@ metadata:
name: hubble-ui-client-certs
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
cilium.io/helm-template-non-idempotent: "true"
{{- with .Values.hubble.annotations }}
annotations:
{{- with .Values.hubble.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.nonIdempotentAnnotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
type: kubernetes.io/tls

View File

@@ -0,0 +1,28 @@
{{- if .Values.standaloneDnsProxy.enabled }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: standalone-dns-proxy-config
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.commonLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.standaloneDnsProxy.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
data:
# Use the same L7 proxy and DNS settings as the agent for consistency
enable-l7-proxy: {{ .Values.l7Proxy | quote }}
debug: {{ .Values.standaloneDnsProxy.debug | quote }}
enable-standalone-dns-proxy: {{ .Values.standaloneDnsProxy.enabled | quote }}
enable-ipv4: {{ .Values.ipv4.enabled | quote }}
enable-ipv6: {{ .Values.ipv6.enabled | quote }}
standalone-dns-proxy-server-port: {{ .Values.standaloneDnsProxy.serverPort | quote }}
# DNS proxy configuration inherited from agent settings
tofqdns-proxy-port: {{ .Values.dnsProxy.proxyPort | quote }}
tofqdns-enable-dns-compression: {{ .Values.dnsProxy.enableDnsCompression | quote }}
{{- end }}

View File

@@ -0,0 +1,80 @@
{{- if .Values.standaloneDnsProxy.enabled }}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: standalone-dns-proxy
namespace: {{ include "cilium.namespace" . }}
{{- with .Values.standaloneDnsProxy.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
labels:
k8s-app: standalone-dns-proxy
app.kubernetes.io/part-of: cilium
app.kubernetes.io/name: standalone-dns-proxy
name: standalone-dns-proxy
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
minReadySeconds: 5
{{- with .Values.standaloneDnsProxy.updateStrategy }}
updateStrategy:
{{- toYaml . | nindent 4 }}
{{- end }}
selector:
matchLabels:
k8s-app: standalone-dns-proxy
template:
metadata:
annotations:
{{- if .Values.standaloneDnsProxy.rollOutPods }}
# ensure pods roll when configmap updates
cilium.io/standalone-dns-proxy-configmap-checksum: {{ include (print $.Template.BasePath "/standalone-dns-proxy/configmap.yaml") . | sha256sum | quote }}
{{- end }}
container.apparmor.security.beta.kubernetes.io/standalone-dns-proxy: "unconfined"
labels:
k8s-app: standalone-dns-proxy
name: standalone-dns-proxy
app.kubernetes.io/name: standalone-dns-proxy
app.kubernetes.io/part-of: cilium
{{- with .Values.commonLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
hostNetwork: true
automountServiceAccountToken: {{ .Values.standaloneDnsProxy.automountServiceAccountToken }}
{{- with .Values.standaloneDnsProxy.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
tolerations:
- operator: Exists
{{- with .Values.standaloneDnsProxy.tolerations }}
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: standalone-dns-proxy
image: {{ include "cilium.image" .Values.standaloneDnsProxy.image | quote }}
args:
- --config-dir=/tmp/standalone-dns-proxy/config-map
imagePullPolicy: {{ .Values.standaloneDnsProxy.image.pullPolicy }}
volumeMounts:
- mountPath: /tmp/standalone-dns-proxy/config-map
name: standalone-dns-proxy-config-path
readOnly: true
- mountPath: /var/run/standalone-dns-proxy
name: runtime-dir
securityContext:
capabilities:
add: ["NET_ADMIN", "NET_RAW"]
drop: ["ALL"]
volumes:
- configMap:
defaultMode: 420
name: standalone-dns-proxy-config
name: standalone-dns-proxy-config-path
- emptyDir: {}
name: runtime-dir
{{- end }}

View File

@@ -220,3 +220,22 @@
{{- end }}
{{- end }}
{{- end }}
{{/* validate Standalone DNS Proxy */}}
{{- if .Values.standaloneDnsProxy.enabled }}
{{- if not .Values.dnsProxy.proxyPort }}
{{ fail "standaloneDnsProxy requires dnsProxy.proxyPort to be explicitly set (e.g., 10094)" }}
{{- end }}
{{- if eq (int .Values.dnsProxy.proxyPort) 0 }}
{{ fail "standaloneDnsProxy requires dnsProxy.proxyPort to be set to a non-zero value (e.g., 10094). The standalone DNS proxy uses the same DNS configuration as the agent." }}
{{- end }}
{{- end }}
{{/* validate we don't run tproxy with netkit - see GH issue 39892 */}}
{{- if hasKey .Values "bpf" }}
{{- if and (hasKey .Values.bpf "tproxy") (hasKey .Values.bpf "datapathMode") }}
{{- if and (.Values.bpf.tproxy) (list "netkit" "netkit-l2" | has .Values.bpf.datapathMode) }}
{{ fail ".Values.bpf.tproxy cannot be enabled with .Values.bpf.datapathMode=netkit or .Values.bpf.datapathMode=netkit-l2" }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -58,6 +58,27 @@
"properties": {
"enabled": {
"type": "boolean"
},
"nodeSpec": {
"properties": {
"securityGroupTags": {
"items": {},
"type": "array"
},
"securityGroups": {
"items": {},
"type": "array"
},
"vSwitchTags": {
"items": {},
"type": "array"
},
"vSwitches": {
"items": {},
"type": "array"
}
},
"type": "object"
}
},
"type": "object"
@@ -440,6 +461,14 @@
"properties": {
"enabled": {
"type": "boolean"
},
"nodeSpec": {
"properties": {
"azureInterfaceName": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
@@ -644,6 +673,14 @@
"monitorInterval": {
"type": "string"
},
"monitorTraceIPOption": {
"minimum": 0,
"maximum": 255,
"type": [
"null",
"integer"
]
},
"natMax": {
"type": [
"null",
@@ -668,6 +705,12 @@
"integer"
]
},
"policyMapPressureMetricsThreshold": {
"type": [
"null",
"number"
]
},
"policyStatsMapMax": {
"type": [
"null",
@@ -714,6 +757,17 @@
},
"type": "object"
},
"cronJob": {
"properties": {
"failedJobsHistoryLimit": {
"type": "integer"
},
"successfulJobsHistoryLimit": {
"type": "integer"
}
},
"type": "object"
},
"extraVolumeMounts": {
"items": {},
"type": "array"
@@ -768,7 +822,10 @@
"type": "array"
},
"ttlSecondsAfterFinished": {
"type": "integer"
"type": [
"null",
"integer"
]
}
},
"type": "object"
@@ -1299,6 +1356,9 @@
"Cluster"
]
},
"externallyCreated": {
"type": "boolean"
},
"internalTrafficPolicy": {
"enum": [
"Local",
@@ -1369,17 +1429,6 @@
},
"type": "object"
},
"client": {
"properties": {
"cert": {
"type": "string"
},
"key": {
"type": "string"
}
},
"type": "object"
},
"enableSecrets": {
"type": "boolean"
},
@@ -1452,11 +1501,17 @@
},
"type": "object"
},
"cacheTTL": {
"type": "string"
},
"config": {
"properties": {
"clusters": {
"items": {},
"type": "array"
"type": [
"object",
"array"
]
},
"domain": {
"type": "string"
@@ -1476,6 +1531,85 @@
"maxConnectedClusters": {
"type": "integer"
},
"mcsapi": {
"properties": {
"corednsAutoConfigure": {
"properties": {
"affinity": {
"type": "object"
},
"annotations": {
"type": "object"
},
"coredns": {
"properties": {
"clusterDomain": {
"type": "string"
},
"clustersetDomain": {
"type": "string"
},
"configMapName": {
"type": "string"
},
"deploymentName": {
"type": "string"
},
"namespace": {
"type": "string"
},
"serviceAccountName": {
"type": "string"
}
},
"type": "object"
},
"enabled": {
"type": "boolean"
},
"extraArgs": {
"items": {},
"type": "array"
},
"extraVolumeMounts": {
"items": {},
"type": "array"
},
"extraVolumes": {
"items": {},
"type": "array"
},
"nodeSelector": {
"type": "object"
},
"podLabels": {
"type": "object"
},
"priorityClassName": {
"type": "string"
},
"resources": {
"type": "object"
},
"tolerations": {
"items": {},
"type": "array"
},
"ttlSecondsAfterFinished": {
"type": "integer"
}
},
"type": "object"
},
"enabled": {
"type": "boolean"
},
"installCRDs": {
"type": "boolean"
}
},
"type": "object"
},
"policyDefaultLocalCluster": {
"type": "boolean"
},
@@ -1537,10 +1671,27 @@
},
"resources": {
"properties": {
"limits": {
"properties": {
"cpu": {
"type": [
"integer",
"string"
]
},
"memory": {
"type": "string"
}
},
"type": "object"
},
"requests": {
"properties": {
"cpu": {
"type": "string"
"type": [
"integer",
"string"
]
},
"memory": {
"type": "string"
@@ -1578,14 +1729,6 @@
"crdWaitTimeout": {
"type": "string"
},
"customCalls": {
"properties": {
"enabled": {
"type": "boolean"
}
},
"type": "object"
},
"daemon": {
"properties": {
"allowedConfigOverrides": {
@@ -1749,9 +1892,15 @@
"enableMasqueradeRouteSource": {
"type": "boolean"
},
"enableNoServiceEndpointsRoutable": {
"type": "boolean"
},
"enableNonDefaultDenyPolicies": {
"type": "boolean"
},
"enableTunnelBIGTCP": {
"type": "boolean"
},
"enableXTSocketFallback": {
"type": "boolean"
},
@@ -1797,8 +1946,30 @@
"cidr": {
"type": "string"
},
"egress": {
"properties": {
"allowRemoteNodeIdentities": {
"type": "boolean"
},
"cidr": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"type": "object"
},
"enabled": {
"type": "boolean"
},
"ingress": {
"properties": {
"enabled": {
"type": "boolean"
}
},
"type": "object"
}
},
"type": "object"
@@ -1869,6 +2040,49 @@
"items": {},
"type": "array"
},
"nodeSpec": {
"properties": {
"deleteOnTermination": {
"type": [
"null",
"boolean"
]
},
"disablePrefixDelegation": {
"type": "boolean"
},
"excludeInterfaceTags": {
"items": {},
"type": "array"
},
"firstInterfaceIndex": {
"type": [
"null",
"integer"
]
},
"securityGroupTags": {
"items": {},
"type": "array"
},
"securityGroups": {
"items": {},
"type": "array"
},
"subnetIDs": {
"items": {},
"type": "array"
},
"subnetTags": {
"items": {},
"type": "array"
},
"usePrimaryAddress": {
"type": "boolean"
}
},
"type": "object"
},
"subnetIDsFilter": {
"items": {},
"type": "array"
@@ -2011,6 +2225,12 @@
"string"
]
},
"clusterMaxConnections": {
"type": "integer"
},
"clusterMaxRequests": {
"type": "integer"
},
"connectTimeoutSeconds": {
"type": "integer"
},
@@ -2104,6 +2324,10 @@
},
"type": "object"
},
"initContainers": {
"items": {},
"type": "array"
},
"initialFetchTimeoutSeconds": {
"type": "integer"
},
@@ -2171,6 +2395,9 @@
"maxConnectionDurationSeconds": {
"type": "integer"
},
"maxGlobalDownstreamConnections": {
"type": "integer"
},
"maxRequestsPerConnection": {
"type": "integer"
},
@@ -2393,6 +2620,9 @@
},
"type": "object"
},
"useOriginalSourceAddress": {
"type": "boolean"
},
"xffNumTrustedHopsL7PolicyEgress": {
"type": "integer"
},
@@ -2614,10 +2844,17 @@
"anyOf": [
{
"properties": {
"aggregationInterval": {
"type": "string"
},
"excludeFilters": {
"items": {},
"type": "array"
},
"fieldAggregate": {
"items": {},
"type": "array"
},
"fieldMask": {
"items": {},
"type": "array"
@@ -2661,6 +2898,9 @@
},
"static": {
"properties": {
"aggregationInterval": {
"type": "string"
},
"allowList": {
"items": {},
"type": "array"
@@ -2672,6 +2912,10 @@
"enabled": {
"type": "boolean"
},
"fieldAggregate": {
"items": {},
"type": "array"
},
"fieldMask": {
"items": {},
"type": "array"
@@ -3037,6 +3281,23 @@
"listenPort": {
"type": "string"
},
"logOptions": {
"properties": {
"format": {
"type": [
"null",
"string"
]
},
"level": {
"type": [
"null",
"string"
]
}
},
"type": "object"
},
"nodeSelector": {
"properties": {
"kubernetes.io/os": {
@@ -3100,9 +3361,15 @@
"address": {
"type": "string"
},
"blockProfileRate": {
"type": "integer"
},
"enabled": {
"type": "boolean"
},
"mutexProfileFraction": {
"type": "integer"
},
"port": {
"type": "integer"
}
@@ -3680,6 +3947,9 @@
},
"type": "object"
},
"tmpVolume": {
"type": "object"
},
"tolerations": {
"items": {},
"type": "array"
@@ -3921,6 +4191,33 @@
"multiPoolPreAllocation": {
"type": "string"
},
"nodeSpec": {
"properties": {
"ipamMaxAllocate": {
"type": [
"null",
"integer"
]
},
"ipamMinAllocate": {
"type": [
"null",
"integer"
]
},
"ipamPreAllocate": {
"type": [
"null",
"integer"
]
},
"ipamStaticIPTags": {
"items": {},
"type": "array"
}
},
"type": "object"
},
"operator": {
"properties": {
"autoCreateCiliumPodIPPools": {
@@ -4278,9 +4575,6 @@
},
"enableHealthCheckLoadBalancerIP": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
}
},
"type": "object"
@@ -4394,7 +4688,10 @@
"requests": {
"properties": {
"cpu": {
"type": "string"
"type": [
"integer",
"string"
]
},
"memory": {
"type": "string"
@@ -4486,6 +4783,9 @@
}
},
"type": "object"
},
"waitForCloudInit": {
"type": "boolean"
}
},
"type": "object"
@@ -4694,9 +4994,15 @@
"address": {
"type": "string"
},
"blockProfileRate": {
"type": "integer"
},
"enabled": {
"type": "boolean"
},
"mutexProfileFraction": {
"type": "integer"
},
"port": {
"type": "integer"
}
@@ -4754,6 +5060,30 @@
}
},
"type": "object"
},
"tls": {
"properties": {
"enabled": {
"type": "boolean"
},
"server": {
"properties": {
"existingSecret": {
"type": "string"
},
"mtls": {
"properties": {
"enabled": {
"type": "boolean"
}
},
"type": "object"
}
},
"type": "object"
}
},
"type": "object"
}
},
"type": "object"
@@ -4866,6 +5196,12 @@
},
"restart": {
"type": "boolean"
},
"selector": {
"type": [
"null",
"string"
]
}
},
"type": "object"
@@ -4902,6 +5238,9 @@
"properties": {
"enabled": {
"type": "boolean"
},
"packetizationLayerPMTUDMode": {
"type": "string"
}
},
"type": "object"
@@ -4940,6 +5279,9 @@
"array"
]
},
"policyDenyResponse": {
"type": "string"
},
"policyEnforcementMode": {
"type": "string"
},
@@ -4948,9 +5290,15 @@
"address": {
"type": "string"
},
"blockProfileRate": {
"type": "integer"
},
"enabled": {
"type": "boolean"
},
"mutexProfileFraction": {
"type": "integer"
},
"port": {
"type": "integer"
}
@@ -5363,6 +5711,9 @@
"secretsNamespaceAnnotations": {
"type": "object"
},
"secretsNamespaceLabels": {
"type": "object"
},
"securityContext": {
"properties": {
"allowPrivilegeEscalation": {
@@ -5422,6 +5773,9 @@
{
"type": "string"
},
{
"type": "string"
},
{
"type": "string"
}
@@ -5537,6 +5891,23 @@
},
"type": "object"
},
"corednsMCSAPI": {
"properties": {
"annotations": {
"type": "object"
},
"automount": {
"type": "boolean"
},
"create": {
"type": "boolean"
},
"name": {
"type": "string"
}
},
"type": "object"
},
"envoy": {
"properties": {
"annotations": {
@@ -5676,6 +6047,86 @@
},
"type": "object"
},
"standaloneDnsProxy": {
"properties": {
"annotations": {
"type": "object"
},
"automountServiceAccountToken": {
"type": "boolean"
},
"debug": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
},
"image": {
"properties": {
"digest": {
"type": "string"
},
"override": {
"type": [
"null",
"string"
]
},
"pullPolicy": {
"type": "string"
},
"repository": {
"type": "string"
},
"tag": {
"type": "string"
},
"useDigest": {
"type": "boolean"
}
},
"type": "object"
},
"nodeSelector": {
"properties": {
"kubernetes.io/os": {
"type": "string"
}
},
"type": "object"
},
"rollOutPods": {
"type": "boolean"
},
"serverPort": {
"type": "integer"
},
"tolerations": {
"items": {},
"type": "array"
},
"updateStrategy": {
"properties": {
"rollingUpdate": {
"properties": {
"maxSurge": {
"type": "integer"
},
"maxUnavailable": {
"type": "integer"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"startupProbe": {
"properties": {
"failureThreshold": {
@@ -5687,9 +6138,6 @@
},
"type": "object"
},
"svcSourceRangeCheck": {
"type": "boolean"
},
"synchronizeK8sNodes": {
"type": "boolean"
},
@@ -5774,6 +6222,9 @@
},
"type": "object"
},
"tmpVolume": {
"type": "object"
},
"tolerations": {
"items": {
"anyOf": [

View File

@@ -6,7 +6,6 @@
# type: [null, string]
# @schema
# -- namespaceOverride allows to override the destination namespace for Cilium resources.
# This property allows to use Cilium as part of an Umbrella Chart with different targets.
namespaceOverride: ""
# @schema
# type: [null, object]
@@ -29,7 +28,7 @@ debug:
# @schema
# -- Configure verbosity levels for debug logging
# This option is used to enable debug messages for operations related to such
# sub-system such as (e.g. kvstore, envoy, datapath or policy), and flow is
# sub-system such as (e.g. kvstore, envoy, datapath, policy, or tagged), and flow is
# for enabling debug messages emitted per request, message and connection.
# Multiple values can be set via a space-separated string (e.g. "datapath envoy").
#
@@ -39,6 +38,7 @@ debug:
# - envoy
# - datapath
# - policy
# - tagged
verbose: ~
# -- Set the agent-internal metrics sampling frequency. This sets the
# frequency of the internal sampling of the agent metrics. These are
@@ -204,6 +204,12 @@ serviceAccounts:
name: hubble-generate-certs
automount: true
annotations: {}
# -- CorednsMCSAPI is used if clustermesh.mcsapi.corednsAutoConfigure.enabled=true
corednsMCSAPI:
create: true
name: cilium-coredns-mcsapi-autoconfig
automount: true
annotations: {}
# -- Configure termination grace period for cilium-agent DaemonSet.
terminationGracePeriodSeconds: 1
# -- Install the cilium agent resources.
@@ -219,10 +225,10 @@ image:
# @schema
override: ~
repository: "quay.io/cilium/cilium"
tag: "v1.18.6"
tag: "v1.19.1"
pullPolicy: "IfNotPresent"
# cilium-digest
digest: sha256:42ec562a5ff6c8a860c0639f5a7611685e253fd9eb2d2fcdade693724c9166a4
digest: sha256:41f1f74a0000de8656f1de4088ea00c8f2d49d6edea579034c73c5fd5fe01792
useDigest: true
# -- Scheduling configurations for cilium pods
scheduling:
@@ -363,6 +369,8 @@ securityContext:
- SETGID
# Allow to execute program that changes UID (e.g. required for package installation)
- SETUID
# Allow to read dmesg and get kernel pointers when kptr_restrict=1
- SYSLOG
# -- Capabilities for the `mount-cgroup` init container
mountCgroup:
# Only used for 'mount' cgroup
@@ -433,9 +441,16 @@ azure:
# clientID: 00000000-0000-0000-0000-000000000000
# clientSecret: 00000000-0000-0000-0000-000000000000
# userAssignedIdentityID: 00000000-0000-0000-0000-000000000000
nodeSpec:
azureInterfaceName: ""
alibabacloud:
# -- Enable AlibabaCloud ENI integration
enabled: false
nodeSpec:
vSwitches: []
vSwitchTags: []
securityGroups: []
securityGroupTags: []
# -- Enable bandwidth manager to optimize TCP and UDP workloads and allow
# for rate-limiting traffic from individual Pods with EDT (Earliest Departure
# Time) through the "kubernetes.io/egress-bandwidth" Pod annotation.
@@ -468,8 +483,7 @@ l2podAnnouncements:
interface: "eth0"
# -- A regular expression matching interfaces used for sending Gratuitous ARP pod announcements
# interfacePattern: ""
# -- This feature set enables virtual BGP routers to be created via
# CiliumBGPPeeringPolicy CRDs.
# -- This feature set enables virtual BGP routers to be created via BGP CRDs.
bgpControlPlane:
# -- Enables the BGP control plane.
enabled: false
@@ -479,9 +493,9 @@ bgpControlPlane:
create: false
# -- The name of the secret namespace to which Cilium agents are given read access
name: kube-system
# -- Status reporting settings (BGPv2 only)
# -- Status reporting settings
statusReport:
# -- Enable/Disable BGPv2 status reporting
# -- Enable/Disable BGP status reporting
# It is recommended to enable status reporting in general, but if you have any issue
# such as high API server load, you can disable it by setting this to false.
enabled: true
@@ -491,7 +505,7 @@ bgpControlPlane:
mode: "default"
# -- IP pool to allocate the BGP router-id from when the mode is ip-pool.
ipPool: ""
# -- Legacy BGP ORIGIN attribute settings (BGPv2 only)
# -- Legacy BGP ORIGIN attribute settings
legacyOriginAttribute:
# -- Enable/Disable advertising LoadBalancerIP routes with the legacy
# BGP ORIGIN attribute value INCOMPLETE (2) instead of the default IGP (0).
@@ -501,6 +515,11 @@ pmtuDiscovery:
# -- Enable path MTU discovery to send ICMP fragmentation-needed replies to
# the client.
enabled: false
# -- Enable kernel probing path MTU discovery for Pods which uses different message
# sizes to search for correct MTU value.
# Valid values are: always, blackhole, disabled and unset (or empty). If value
# is 'unset' or left empty then will not try to override setting.
packetizationLayerPMTUDMode: "blackhole"
bpf:
autoMount:
# -- Enable automatic mount of BPF filesystem
@@ -548,7 +567,7 @@ bpf:
# Helm configuration for BPF events map rate limiting is experimental and might change
# in upcoming releases.
events:
# -- Default settings for all types of events except dbg and pcap.
# -- Default settings for all types of events except dbg.
default:
# @schema
# type: [null, integer]
@@ -608,6 +627,12 @@ bpf:
# type: [null, integer]
# @schema
policyMapMax: 16384
# -- (float64) Configure threshold for emitting pressure metrics of policy maps.
# @schema
# type: [null, number]
# @schema
# @default -- `0.1`
policyMapPressureMetricsThreshold: ~
# -- Configure the maximum number of entries in global policy stats map.
# @schema
# type: [null, integer]
@@ -665,7 +690,8 @@ bpf:
# type: [null, boolean]
# @schema
# -- (bool) Configure the eBPF-based TPROXY (beta) to reduce reliance on iptables rules
# for implementing Layer 7 policy.
# for implementing Layer 7 policy. Note this is incompatible with netkit (`bpf.datapathMode=netkit`,
# `bpf.datapathMode=netkit-l2`).
# @default -- `false`
tproxy: ~
# @schema
@@ -675,6 +701,15 @@ bpf:
# [0] will allow all VLAN id's without any filtering.
# @default -- `[]`
vlanBypass: ~
# -- Configure the IP tracing option type.
# This option is used to specify the IP option type to use for tracing.
# The value must be an integer between 0 and 255.
# @schema
# type: [null, integer]
# minimum: 0
# maximum: 255
# @schema
monitorTraceIPOption: 0
# -- (bool) Disable ExternalIP mitigation (CVE-2020-8554)
# @default -- `false`
disableExternalIPMitigation: false
@@ -682,7 +717,8 @@ bpf:
# supported kernels.
# @default -- `true`
enableTCX: true
# -- (string) Mode for Pod devices for the core datapath (veth, netkit, netkit-l2)
# -- (string) Mode for Pod devices for the core datapath (veth, netkit, netkit-l2).
# Note netkit is incompatible with TPROXY (`bpf.tproxy`).
# @default -- `veth`
datapathMode: veth
# -- Enable BPF clock source probing for more efficient tick retrieval.
@@ -770,8 +806,17 @@ cni:
# -- Specifies the resources for the cni initContainer
resources:
requests:
# @schema
# type: [integer, string]
# @schema
cpu: 100m
memory: 10Mi
limits:
# @schema
# type: [integer, string]
# @schema
cpu: 1
memory: 1Gi
# -- Enable route MTU for pod netns when CNI chaining is used
enableRouteMTUForCNIChaining: false
# -- Enable the removal of iptables rules created by the AWS CNI VPC plugin.
@@ -796,10 +841,6 @@ conntrackGCMaxInterval: ""
# -- (string) Configure timeout in which Cilium will exit if CRDs are not available
# @default -- `"5m"`
crdWaitTimeout: ""
# -- Tail call hooks for custom eBPF programs.
customCalls:
# -- Enable tail call hooks for custom eBPF programs.
enabled: false
daemon:
# -- Configure where Cilium runtime state should be stored.
runPath: "/var/run/cilium"
@@ -842,6 +883,12 @@ daemon:
#
# By default, this functionality is enabled
enableSourceIPVerification: true
# -- Configure temporary volume for cilium-agent
tmpVolume: {}
# emptyDir:
# sizeLimit: "100Mi"
# medium: "Memory"
# -- Specify which network interfaces can run the eBPF datapath. This means
# that a packet sent from a pod to a destination outside the cluster will be
# masqueraded (to an output device IPv4 address), if the output device runs the
@@ -860,9 +907,6 @@ forceDeviceDetection: false
# -- Enable setting identity mark for local traffic.
# enableIdentityMark: true
# -- Enable Kubernetes EndpointSlice feature in Cilium if the cluster supports it.
# enableK8sEndpointSlice: true
# -- CiliumEndpointSlice configuration options.
ciliumEndpointSlice:
# -- Enable Cilium EndpointSlice feature.
@@ -1042,20 +1086,33 @@ enableXTSocketFallback: true
encryption:
# -- Enable transparent network encryption.
enabled: false
# -- Encryption method. Can be either ipsec or wireguard.
# -- Encryption method. Can be one of ipsec, wireguard or ztunnel.
type: ipsec
# -- Enable encryption for pure node to node traffic.
# This option is only effective when encryption.type is set to "wireguard".
nodeEncryption: false
# -- Configure the WireGuard Pod2Pod strict mode.
# -- Configure the Encryption Pod2Pod strict mode.
strictMode:
# -- Enable WireGuard Pod2Pod strict mode.
# -- Enable Encryption Pod2Pod strict mode. (deprecated: please use encryption.strictMode.egress.enabled)
enabled: false
# -- CIDR for the WireGuard Pod2Pod strict mode.
# -- CIDR for the Encryption Pod2Pod strict mode. (deprecated: please use encryption.strictMode.egress.cidr)
cidr: ""
# -- Allow dynamic lookup of remote node identities.
# -- Allow dynamic lookup of remote node identities. (deprecated: please use encryption.strictMode.egress.allowRemoteNodeIdentities)
# This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap.
allowRemoteNodeIdentities: false
egress:
# -- Enable strict egress encryption.
enabled: false
# -- CIDR for the Encryption Pod2Pod strict egress mode.
cidr: ""
# -- Allow dynamic lookup of remote node identities.
# This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap.
allowRemoteNodeIdentities: false
ingress:
# -- Enable strict ingress encryption.
# When enabled, all unencrypted overlay ingress traffic will be dropped.
# This option is only applicable when WireGuard and tunneling are enabled.
enabled: false
ipsec:
# -- Name of the key file inside the Kubernetes secret configured via secretName.
keyFile: keys
@@ -1127,6 +1184,32 @@ eni:
# -- Filter via AWS EC2 Instance tags (k=v) which will dictate which AWS EC2 Instances
# are going to be used to create new ENIs
instanceTagsFilter: []
# -- NodeSpec configuration for the ENI
nodeSpec:
# -- First interface index to use for IP allocation
# @schema
# type: [null, integer]
# @schema
firstInterfaceIndex: ~
# -- Subnet IDs to use for IP allocation
subnetIDs: []
# -- Subnet tags to use for IP allocation
subnetTags: []
# -- Security groups to use for IP allocation
securityGroups: []
# -- Security group tags to use for IP allocation
securityGroupTags: []
# -- Exclude interface tags to use for IP allocation
excludeInterfaceTags: []
# -- Use primary address for IP allocation
usePrimaryAddress: false
# -- Disable prefix delegation for IP allocation
disablePrefixDelegation: false
# -- Delete ENI on termination
# @schema
# type: [null, boolean]
# @schema
deleteOnTermination: ~
# fragmentTracking enables IPv4 fragment tracking support in the datapath.
# fragmentTracking: true
gke:
@@ -1142,6 +1225,8 @@ healthCheckICMPFailureThreshold: 3
hostFirewall:
# -- Enables the enforcement of host policies in the eBPF datapath.
enabled: false
# -- Enable routing to a service that has zero endpoints
enableNoServiceEndpointsRoutable: true
# -- Configure socket LB
socketLB:
# -- Enable socket LB
@@ -1165,12 +1250,15 @@ certgen:
# @schema
override: ~
repository: "quay.io/cilium/certgen"
tag: "v0.3.1"
digest: "sha256:2825dbfa6f89cbed882fd1d81e46a56c087e35885825139923aa29eb8aec47a9"
tag: "v0.3.2"
digest: "sha256:19921f48ee7e2295ea4dca955878a6cd8d70e6d4219d08f688e866ece9d95d4d"
useDigest: true
pullPolicy: "IfNotPresent"
# @schema
# type: [null, integer]
# @schema
# -- Seconds after which the completed job pod will be deleted
ttlSecondsAfterFinished: 1800
ttlSecondsAfterFinished: null
# -- Labels to be added to hubble-certgen pods
podLabels: {}
# -- Annotations to be added to the hubble-certgen initial Job and CronJob
@@ -1195,6 +1283,11 @@ certgen:
extraVolumeMounts: []
# -- Affinity for certgen
affinity: {}
cronJob:
# -- The number of successful finished jobs to keep
successfulJobsHistoryLimit: 3
# -- The number of failed finished jobs to keep
failedJobsHistoryLimit: 1
hubble:
# -- Enable Hubble (true by default).
enabled: true
@@ -1210,6 +1303,9 @@ hubble:
# 2047, 4095, 8191, 16383, 32767, 65535
# eventBufferCapacity: "4095"
# -- The interval at which Hubble will send out lost events from the Observer server, if any.
# lostEventSendInterval: 1s
# -- Hubble metrics configuration.
# See https://docs.cilium.io/en/stable/observability/metrics/#hubble-metrics
# for more comprehensive documentation about Hubble metrics.
@@ -1503,9 +1599,9 @@ hubble:
# @schema
override: ~
repository: "quay.io/cilium/hubble-relay"
tag: "v1.18.6"
tag: "v1.19.1"
# hubble-relay-digest
digest: sha256:fb6135e34c31e5f175cb5e75f86cea52ef2ff12b49bcefb7088ed93f5009eb8e
digest: sha256:d8c4e13bc36a56179292bb52bc6255379cb94cb873700d316ea3139b1bdb8165
useDigest: true
pullPolicy: "IfNotPresent"
# -- Specifies the resources for the hubble-relay pods
@@ -1716,6 +1812,24 @@ hubble:
address: localhost
# -- Configure pprof listen port for hubble-relay
port: 6062
# -- Enable mutex contention profiling for hubble-relay and set the fraction of sampled events (set to 1 to sample all events)
mutexProfileFraction: 0
# -- Enable goroutine blocking profiling for hubble-relay and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead])
blockProfileRate: 0
# -- Logging configuration for hubble-relay.
logOptions:
# @schema
# type: [null, string]
# @schema
# -- Log format for hubble-relay. Valid values are: text, text-ts, json, json-ts.
# @default -- text-ts
format: ~
# @schema
# type: [null, string]
# @schema
# -- Log level for hubble-relay. Valid values are: debug, info, warn, error.
# @default -- info
level: ~
ui:
# -- Whether to enable the Hubble UI.
enabled: false
@@ -1911,6 +2025,11 @@ hubble:
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
# -- Configure temporary volume for hubble-ui
tmpVolume: {}
# emptyDir:
# # sizeLimit: "100Mi"
# # medium: "Memory"
# -- Hubble flows export.
export:
# --- Static exporter configuration.
@@ -1923,6 +2042,14 @@ hubble:
# - source
# - destination
# - verdict
fieldAggregate: []
# - time
# - source
# - destination
# - verdict
# --- Defines the interval at which to aggregate before exporting Hubble flows.
# Aggregation feature is only enabled when fieldAggregate is specified and aggregationInterval > 0s.
aggregationInterval: "0s"
allowList: []
# - '{"verdict":["DROPPED","ERROR"]}'
denyList: []
@@ -1948,6 +2075,8 @@ hubble:
content:
- name: all
fieldMask: []
fieldAggregate: []
aggregationInterval: "0s"
includeFilters: []
excludeFilters: []
filePath: "/var/run/cilium/hubble/events.log"
@@ -2040,11 +2169,30 @@ ipam:
# refill the bucket up to the burst size capacity.
# @default -- `4.0`
externalAPILimitQPS: ~
# -- defaultLBServiceIPAM indicates the default LoadBalancer Service IPAM when
# no LoadBalancer class is set. Applicable values: lbipam, nodeipam, none
# -- NodeSpec configuration for the IPAM
nodeSpec:
# -- IPAM min allocate
# @schema
# type: [null, integer]
# @schema
ipamMinAllocate: ~
# -- IPAM pre allocate
# @schema
# type: [null, integer]
# @schema
ipamPreAllocate: ~
# -- IPAM max allocate
# @schema
# type: [null, integer]
# @schema
ipamMaxAllocate: ~
# -- IPAM static IP tags (currently only works with AWS and Azure)
ipamStaticIPTags: []
# @schema
# type: [string]
# @schema
# -- defaultLBServiceIPAM indicates the default LoadBalancer Service IPAM when
# no LoadBalancer class is set. Applicable values: lbipam, nodeipam, none
defaultLBServiceIPAM: lbipam
nodeIPAM:
# -- Configure Node IPAM
@@ -2155,7 +2303,7 @@ maglev: {}
# type: [null, boolean]
# @schema
# -- (bool) Enables masquerading of IPv4 traffic leaving the node from endpoints.
# @default -- `true` unless ipam eni mode is active
# @default -- `true` unless ipam eni mode is active
enableIPv4Masquerade: ~
# -- Enables masquerading of IPv6 traffic leaving the node from endpoints.
enableIPv6Masquerade: true
@@ -2165,6 +2313,8 @@ enableMasqueradeRouteSource: false
enableIPv4BIGTCP: false
# -- Enables IPv6 BIG TCP support which increases maximum IPv6 GSO/GRO limits for nodes and pods
enableIPv6BIGTCP: false
# -- Enable BIG TCP in tunneling mode and increase maximum GRO/GSO limits for VXLAN/GENEVE tunnels
enableTunnelBIGTCP: false
nat:
# -- Number of the top-k SNAT map connections to track in Cilium statedb.
mapStatsEntries: 32
@@ -2266,8 +2416,6 @@ loadBalancer:
algorithm: round_robin
# -- Configure N-S k8s service loadbalancing
nodePort:
# -- Enable the Cilium NodePort service implementation.
enabled: false
# -- Port range to use for NodePort services.
# range: "30000,32767"
@@ -2311,6 +2459,10 @@ pprof:
address: localhost
# -- Configure pprof listen port for cilium-agent
port: 6060
# -- Enable mutex contention profiling for cilium-agent and set the fraction of sampled events (set to 1 to sample all events)
mutexProfileFraction: 0
# -- Enable goroutine blocking profiling for cilium-agent and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead])
blockProfileRate: 0
# -- Configure prometheus metrics on the configured port at /metrics
prometheus:
metricsService: false
@@ -2435,6 +2587,12 @@ envoy:
initialFetchTimeoutSeconds: 30
# -- Maximum number of concurrent retries on Envoy clusters
maxConcurrentRetries: 128
# -- Maximum number of connections on Envoy clusters
clusterMaxConnections: 1024
# -- Maximum number of requests on Envoy clusters
clusterMaxRequests: 1024
# -- Maximum number of global downstream connections
maxGlobalDownstreamConnections: 50000
# -- Maximum number of retries for each HTTP request
httpRetryCount: 3
# -- ProxyMaxRequestsPerConnection specifies the max_requests_per_connection setting for Envoy
@@ -2451,6 +2609,9 @@ envoy:
xffNumTrustedHopsL7PolicyIngress: 0
# -- Number of trusted hops regarding the x-forwarded-for and related HTTP headers for the egress L7 policy enforcement Envoy listeners.
xffNumTrustedHopsL7PolicyEgress: 0
# -- For cases when CiliumEnvoyConfig is not used directly (Ingress, Gateway), configures Cilium BPF Metadata listener filter
# to use the original source address when extracting the metadata for a request.
useOriginalSourceAddress: true
# @schema
# type: [null, string]
# @schema
@@ -2465,10 +2626,12 @@ envoy:
# @schema
override: ~
repository: "quay.io/cilium/cilium-envoy"
tag: "v1.35.9-1767794330-db497dd19e346b39d81d7b5c0dedf6c812bcc5c9"
tag: "v1.35.9-1770979049-232ed4a26881e4ab4f766f251f258ed424fff663"
pullPolicy: "IfNotPresent"
digest: "sha256:81398e449f2d3d0a6a70527e4f641aaa685d3156bea0bb30712fae3fd8822b86"
digest: "sha256:8188114a2768b5f49d6ce58e168b20d765e0fbc64eee0d83241aa2b150ccd788"
useDigest: true
# -- Init containers added to the cilium Envoy DaemonSet.
initContainers: []
# -- Additional containers added to the cilium Envoy DaemonSet.
extraContainers: []
# -- Additional envoy container arguments.
@@ -2699,16 +2862,15 @@ resourceQuotas:
pods: "15"
# Need to document default
##################
#sessionAffinity: false
# -- Annotations to be added to all cilium-secret namespaces (resources under templates/cilium-secrets-namespace)
secretsNamespaceAnnotations: {}
# -- Labels to be added to all cilium-secret namespaces (resources under templates/cilium-secrets-namespace)
secretsNamespaceLabels: {}
# -- Do not run Cilium agent when running with clean mode. Useful to completely
# uninstall Cilium as it will stop Cilium from starting and create artifacts
# in the node.
sleepAfterInit: false
# -- Enable check of service source ranges (currently, only for LoadBalancer).
svcSourceRangeCheck: true
# -- Synchronize Kubernetes nodes to kvstore and perform CNP GC.
synchronizeK8sNodes: true
# -- Configure TLS configuration in the agent.
@@ -2791,6 +2953,9 @@ tls:
# @default -- `"vxlan"`
tunnelProtocol: ""
# -- IP family for the underlay.
# Possible values:
# - "ipv4"
# - "ipv6"
# @default -- `"ipv4"`
underlayProtocol: ""
# -- Enable native-routing mode or tunneling mode.
@@ -2811,6 +2976,11 @@ tunnelSourcePortRange: 0-0
# - reject (default)
# - drop
serviceNoBackendResponse: reject
# -- Configure what the response should be to pod egress traffic denied by network policy.
# Possible values:
# - none (default)
# - icmp
policyDenyResponse: none
# -- Configure the underlying network MTU to overwrite auto-detected MTU.
# This value doesn't change the host network interface MTU i.e. eth0 or ens0.
# It changes the MTU for cilium_net@cilium_host, cilium_host@cilium_net,
@@ -2841,15 +3011,15 @@ operator:
# @schema
override: ~
repository: "quay.io/cilium/operator"
tag: "v1.18.6"
tag: "v1.19.1"
# operator-generic-digest
genericDigest: sha256:34a827ce9ed021c8adf8f0feca131f53b3c54a3ef529053d871d0347ec4d69af
genericDigest: sha256:e7278d763e448bf6c184b0682cf98cdca078d58a27e1b2f3c906792670aa211a
# operator-azure-digest
azureDigest: sha256:a57aff47aeb32eccfedaa2a49d1af984d996d6d6de79609c232e0c4cf9ce97a1
azureDigest: sha256:82bce78603056e709d4c4e9f9ebb25c222c36d8a07f8c05381c2372d9078eca8
# operator-aws-digest
awsDigest: sha256:47dbc1a5bd483fec170dab7fb0bf2cca3585a4893675b0324d41d97bac8be5eb
awsDigest: sha256:18913d05a6c4d205f0b7126c4723bb9ccbd4dc24403da46ed0f9f4bf2a142804
# operator-alibabacloud-digest
alibabacloudDigest: sha256:212c4cbe27da3772bcb952b8f8cbaa0b0eef72488b52edf90ad2b32072a3ca4c
alibabacloudDigest: sha256:837b12f4239e88ea5b4b5708ab982c319a94ee05edaecaafe5fd0e5b1962f554
useDigest: true
pullPolicy: "IfNotPresent"
suffix: ""
@@ -2988,6 +3158,10 @@ operator:
address: localhost
# -- Configure pprof listen port for cilium-operator
port: 6061
# -- Enable mutex contention profiling for cilium-operator and set the fraction of sampled events (set to 1 to sample all events)
mutexProfileFraction: 0
# -- Enable goroutine blocking profiling for cilium-operator and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead])
blockProfileRate: 0
# -- Enable prometheus metrics for cilium-operator on the configured port at
# /metrics
prometheus:
@@ -3021,6 +3195,17 @@ operator:
# @schema
# -- Metrics relabeling configs for the ServiceMonitor cilium-operator
metricRelabelings: ~
# -- TLS configuration for Prometheus
tls:
enabled: false
server:
# -- Name of the Secret containing the certificate, key and CA files for the Prometheus server.
existingSecret: ""
mtls:
# When set to true enforces mutual TLS between Operator Prometheus server and its clients.
# False allow non-mutual TLS connections.
# This option has no effect when TLS is disabled.
enabled: false
# -- Grafana dashboards for cilium-operator
# grafana can import dashboards based on the label and value
# ref: https://github.com/grafana/helm-charts/tree/main/charts/grafana#sidecar-for-dashboards
@@ -3054,6 +3239,12 @@ operator:
# -- Interval, in seconds, to check if there are any pods that are not
# managed by Cilium.
intervalSeconds: 15
# -- Selector for pods that should be restarted when not managed by Cilium.
# If not set, defaults to built-in selector "k8s-app=kube-dns". Set to empty string to select all pods.
# @schema
# type: [null, string]
# @schema
selector: ~
nodeinit:
# -- Enable the node initialization DaemonSet
enabled: false
@@ -3064,8 +3255,8 @@ nodeinit:
# @schema
override: ~
repository: "quay.io/cilium/startup-script"
tag: "1755531540-60ee83e"
digest: "sha256:5bdca3c2dec2c79f58d45a7a560bf1098c2126350c901379fe850b7f78d3d757"
tag: "1763560095-8f36c34"
digest: "sha256:50b9cf9c280096b59b80d2fc8ee6638facef79ac18998a22f0cbc40d5d28c16f"
useDigest: true
pullPolicy: "IfNotPresent"
# -- The priority class to use for the nodeinit pod.
@@ -3108,6 +3299,9 @@ nodeinit:
# ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
resources:
requests:
# @schema
# type: [integer, string]
# @schema
cpu: 100m
memory: 100Mi
# -- Security context to be added to nodeinit pods.
@@ -3130,6 +3324,8 @@ nodeinit:
# -- bootstrapFile is the location of the file where the bootstrap timestamp is
# written by the node-init DaemonSet
bootstrapFile: "/tmp/cilium-bootstrap.d/cilium-bootstrap-time"
# -- wait for Cloud init to finish on the host and assume the node has cloud init installed
waitForCloudInit: false
# -- startup offers way to customize startup nodeinit script (pre and post position)
startup:
preScript: ""
@@ -3148,9 +3344,9 @@ preflight:
# @schema
override: ~
repository: "quay.io/cilium/cilium"
tag: "v1.18.6"
tag: "v1.19.1"
# cilium-digest
digest: sha256:42ec562a5ff6c8a860c0639f5a7611685e253fd9eb2d2fcdade693724c9166a4
digest: sha256:41f1f74a0000de8656f1de4088ea00c8f2d49d6edea579034c73c5fd5fe01792
useDigest: true
pullPolicy: "IfNotPresent"
envoy:
@@ -3161,9 +3357,9 @@ preflight:
# @schema
override: ~
repository: "quay.io/cilium/cilium-envoy"
tag: "v1.35.9-1767794330-db497dd19e346b39d81d7b5c0dedf6c812bcc5c9"
tag: "v1.35.9-1770979049-232ed4a26881e4ab4f766f251f258ed424fff663"
pullPolicy: "IfNotPresent"
digest: "sha256:81398e449f2d3d0a6a70527e4f641aaa685d3156bea0bb30712fae3fd8822b86"
digest: "sha256:8188114a2768b5f49d6ce58e168b20d765e0fbc64eee0d83241aa2b150ccd788"
useDigest: true
# -- The priority class to use for the preflight pod.
priorityClassName: ""
@@ -3263,7 +3459,9 @@ enableCriticalPriorityClass: true
# on AArch64 as the images do not currently ship a version of Envoy.
#disableEnvoyVersionCheck: false
clustermesh:
# -- Deploy clustermesh-apiserver for clustermesh
# -- Deploy clustermesh-apiserver for clustermesh. This option is typically
# used with ``clustermesh.config.enabled=true``. Refer to the
# ``clustermesh.config.enabled=true``documentation for more information.
useAPIServer: false
# -- The maximum number of clusters to support in a ClusterMesh. This value
# cannot be changed on running clusters, and all clusters in a ClusterMesh
@@ -3271,44 +3469,132 @@ clustermesh:
# maximum allocatable cluster-local identities.
# Supported values are 255 and 511.
maxConnectedClusters: 255
# -- The time to live for the cache of a remote cluster after connectivity is
# lost. If the connection is not re-established within this duration, the
# cached data is revoked to prevent stale state. If not specified or set to
# 0s, the cache is never revoked (default).
cacheTTL: "0s"
# -- Enable the synchronization of Kubernetes EndpointSlices corresponding to
# the remote endpoints of appropriately-annotated global services through ClusterMesh
enableEndpointSliceSynchronization: false
# -- Enable Multi-Cluster Services API support
# -- Enable Multi-Cluster Services API support (deprecated; use clustermesh.mcsapi.enabled)
enableMCSAPISupport: false
# -- Control whether policy rules assume by default the local cluster if not explicitly selected
policyDefaultLocalCluster: false
policyDefaultLocalCluster: true
# -- Annotations to be added to all top-level clustermesh objects (resources under templates/clustermesh-apiserver and templates/clustermesh-config)
annotations: {}
# -- Clustermesh explicit configuration.
config:
# -- Enable the Clustermesh explicit configuration.
# If set to false, you need to provide the following resources yourself:
# - (Secret) cilium-clustermesh (used by cilium-agent/cilium-operator to connect to
# the local etcd instance if KVStoreMesh is enabled or the remote clusters
# if KVStoreMesh is disabled)
# - (Secret) cilium-kvstoremesh (used by KVStoreMesh to connect to the remote clusters)
# - (ConfigMap) clustermesh-remote-users (used to create one etcd user per remote cluster
# if clustermesh-apiserver is used and `clustermesh.apiserver.tls.authMode` is not
# set to `legacy`)
enabled: false
# -- Default dns domain for the Clustermesh API servers
# This is used in the case cluster addresses are not provided
# and IPs are used.
domain: mesh.cilium.io
# -- List of clusters to be peered in the mesh.
# -- Clusters to be peered in the mesh.
# @schema
# type: [object, array]
# @schema
clusters: []
# You can use a dict of clusters (recommended):
# clusters:
# # -- Name of the cluster
# # -- Name of the cluster
# cluster1:
# # -- Whether to enable this cluster in the mesh. Optional, defaults to true.
# enabled: true
# # -- Address of the cluster, use this if you created DNS records for
# # the cluster Clustermesh API server.
# address: cluster1.mesh.cilium.io
# # -- Port of the cluster Clustermesh API server.
# port: 2379
# # -- IPs of the cluster Clustermesh API server, use multiple ones when
# # you have multiple IPs to access the Clustermesh API server.
# ips:
# - 172.18.255.201
# # -- (deprecated) base64 encoded PEM values for the cluster client certificate, private key and certificate authority.
# # These fields can (and should) be omitted in case the CA is shared across clusters. In that case, the
# # "remote" private key and certificate available in the local cluster are automatically used instead.
# tls:
# cert: ""
# key: ""
# caCert: ""
#
# Or alternatively you can use a list of clusters:
# clusters:
# # -- Name of the cluster
# - name: cluster1
# # -- Address of the cluster, use this if you created DNS records for
# # the cluster Clustermesh API server.
# # -- Address of the cluster, use this if you created DNS records for
# # the cluster Clustermesh API server.
# address: cluster1.mesh.cilium.io
# # -- Port of the cluster Clustermesh API server.
# # -- Port of the cluster Clustermesh API server.
# port: 2379
# # -- IPs of the cluster Clustermesh API server, use multiple ones when
# # you have multiple IPs to access the Clustermesh API server.
# # -- IPs of the cluster Clustermesh API server, use multiple ones when
# # you have multiple IPs to access the Clustermesh API server.
# ips:
# - 172.18.255.201
# # -- base64 encoded PEM values for the cluster client certificate, private key and certificate authority.
# # These fields can (and should) be omitted in case the CA is shared across clusters. In that case, the
# # "remote" private key and certificate available in the local cluster are automatically used instead.
# # -- (deprecated) base64 encoded PEM values for the cluster client certificate, private key and certificate authority.
# # These fields can (and should) be omitted in case the CA is shared across clusters. In that case, the
# # "remote" private key and certificate available in the local cluster are automatically used instead.
# tls:
# cert: ""
# key: ""
# caCert: ""
mcsapi:
# -- Enable Multi-Cluster Services API support
enabled: false
# -- Enabled MCS-API CRDs auto-installation
installCRDs: true
corednsAutoConfigure:
# -- Enable auto-configuration of CoreDNS for Multi-Cluster Services API.
# CoreDNS MUST be at least in version v1.12.2 to run this.
enabled: false
coredns:
# -- The Deployment for the cluster CoreDNS service
deploymentName: coredns
# -- The Service Account name for the cluster CoreDNS service
serviceAccountName: coredns
# -- The ConfigMap name for the cluster CoreDNS service
configMapName: coredns
# -- The namespace for the cluster CoreDNS service
namespace: kube-system
# -- The cluster domain for the cluster CoreDNS service
clusterDomain: cluster.local
# -- The clusterset domain for the cluster CoreDNS service
clustersetDomain: clusterset.local
# -- Additional arguments to `clustermesh-apiserver coredns-mcsapi-auto-configure`.
extraArgs: []
# -- Seconds after which the completed job pod will be deleted
ttlSecondsAfterFinished: 1800
# -- Labels to be added to coredns-mcsapi-autoconfig pods
podLabels: {}
# -- Annotations to be added to the coredns-mcsapi-autoconfig Job
annotations: {}
# -- Node selector for coredns-mcsapi-autoconfig
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector
nodeSelector: {}
# -- Priority class for coredns-mcsapi-autoconfig
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass
priorityClassName: ""
# -- Node tolerations for pod assignment on nodes with taints
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
tolerations: []
# -- Resource limits for coredns-mcsapi-autoconfig
# ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers
resources: {}
# -- Additional coredns-mcsapi-autoconfig volumes.
extraVolumes: []
# -- Additional coredns-mcsapi-autoconfig volumeMounts.
extraVolumeMounts: []
# -- Affinity for coredns-mcsapi-autoconfig
affinity: {}
apiserver:
# -- Clustermesh API server image.
image:
@@ -3317,9 +3603,9 @@ clustermesh:
# @schema
override: ~
repository: "quay.io/cilium/clustermesh-apiserver"
tag: "v1.18.6"
tag: "v1.19.1"
# clustermesh-apiserver-digest
digest: sha256:8ee142912a0e261850c0802d9256ddbe3729e1cd35c6bea2d93077f334c3cf3b
digest: sha256:56d6c3dc13b50126b80ecb571707a0ea97f6db694182b9d61efd386d04e5bb28
useDigest: true
pullPolicy: "IfNotPresent"
# -- TCP port for the clustermesh-apiserver health API.
@@ -3408,17 +3694,12 @@ clustermesh:
# - "external": ``clustermesh-apiserver`` will sync remote cluster information to the etcd used as kvstore. This can't be enabled with crd identity allocation mode.
kvstoreMode: "internal"
service:
# -- (bool) Set externallyCreated to true to create the clustermesh-apiserver service outside this helm chart.
# For example after external load balancer controllers are created.
externallyCreated: false
# -- The type of service used for apiserver access.
type: NodePort
# -- Optional port to use as the node port for apiserver access.
#
# WARNING: make sure to configure a different NodePort in each cluster if
# kube-proxy replacement is enabled, as Cilium is currently affected by a known
# bug (#24692) when NodePorts are handled by the KPR implementation. If a service
# with the same NodePort exists both in the local and the remote cluster, all
# traffic originating from inside the cluster and targeting the corresponding
# NodePort will be redirected to a local backend, regardless of whether the
# destination node belongs to the local or the remote cluster.
nodePort: 32379
# -- Annotations for the clustermesh-apiserver service.
# Example annotations to configure an internal load balancer on different cloud providers:
@@ -3587,13 +3868,15 @@ clustermesh:
# The "remote" certificate must be generated with CN=remote-<cluster-name>
# if provided manually. Cluster mode is meaningful only when the same
# CA is shared across all clusters part of the mesh.
authMode: legacy
# -- Allow users to provide their own certificates
authMode: migration
# -- (deprecated) Allow users to provide their own certificates
# Users may need to provide their certificates using
# a mechanism that requires they provide their own secrets.
# This setting does not apply to any of the auto-generated
# mechanisms below, it only restricts the creation of secrets
# via the `tls-provided` templates.
# This option is deprecated as secrets are expected to be created
# externally when 'auto' is not enabled.
enableSecrets: true
# -- Configure automatic TLS certificates generation.
# A Kubernetes CronJob is used the generate any
@@ -3602,7 +3885,14 @@ clustermesh:
auto:
# -- When set to true, automatically generate a CA and certificates to
# enable mTLS between clustermesh-apiserver and external workload instances.
# If set to false, the certs to be provided by setting appropriate values below.
#
# When set to false you need to pre-create the following secrets:
# - clustermesh-apiserver-server-cert
# - clustermesh-apiserver-admin-cert
# - clustermesh-apiserver-remote-cert
# - clustermesh-apiserver-local-cert
# The above secret should at least contains the keys `tls.crt` and `tls.key`
# and optionally `ca.crt` if a CA bundle is not configured.
enabled: true
# Sets the method to auto-generate certificates. Supported values:
# - helm: This method uses Helm to generate all certificates.
@@ -3637,7 +3927,9 @@ clustermesh:
# -- base64 encoded PEM values for the clustermesh-apiserver server certificate and private key.
# Used if 'auto' is not enabled.
server:
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
cert: ""
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
key: ""
# -- Extra DNS names added to certificate when it's auto generated
extraDnsNames: []
@@ -3646,17 +3938,16 @@ clustermesh:
# -- base64 encoded PEM values for the clustermesh-apiserver admin certificate and private key.
# Used if 'auto' is not enabled.
admin:
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
cert: ""
key: ""
# -- base64 encoded PEM values for the clustermesh-apiserver client certificate and private key.
# Used if 'auto' is not enabled.
client:
cert: ""
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
key: ""
# -- base64 encoded PEM values for the clustermesh-apiserver remote cluster certificate and private key.
# Used if 'auto' is not enabled.
remote:
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
cert: ""
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
key: ""
# clustermesh-apiserver Prometheus metrics configuration
metrics:
@@ -3811,7 +4102,7 @@ authentication:
# -- Enable authentication processing and garbage collection.
# Note that if disabled, policy enforcement will still block requests that require authentication.
# But the resulting authentication requests for these requests will not be processed, therefore the requests not be allowed.
enabled: true
enabled: false
# -- Buffer size of the channel Cilium uses to receive authentication events from the signal map.
queueSize: 1024
# -- Buffer size of the channel Cilium uses to receive certificate expiration events from auth handlers.
@@ -3849,7 +4140,7 @@ authentication:
override: ~
repository: "docker.io/library/busybox"
tag: "1.37.0"
digest: "sha256:2383baad1860bbe9d8a7a843775048fd07d8afe292b94bd876df64a69aae7cb1"
digest: "sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f"
useDigest: true
pullPolicy: "IfNotPresent"
# SPIRE agent configuration
@@ -3863,8 +4154,8 @@ authentication:
# @schema
override: ~
repository: "ghcr.io/spiffe/spire-agent"
tag: "1.12.4"
digest: "sha256:163970884fba18860cac93655dc32b6af85a5dcf2ebb7e3e119a10888eff8fcd"
tag: "1.9.6"
digest: "sha256:5106ac601272a88684db14daf7f54b9a45f31f77bb16a906bd5e87756ee7b97c"
useDigest: true
pullPolicy: "IfNotPresent"
# -- SPIRE agent service account
@@ -3918,8 +4209,8 @@ authentication:
# @schema
override: ~
repository: "ghcr.io/spiffe/spire-server"
tag: "1.12.4"
digest: "sha256:34147f27066ab2be5cc10ca1d4bfd361144196467155d46c45f3519f41596e49"
tag: "1.9.6"
digest: "sha256:59a0b92b39773515e25e68a46c40d3b931b9c1860bc445a79ceb45a805cab8b4"
useDigest: true
pullPolicy: "IfNotPresent"
# -- SPIRE server service account
@@ -4004,3 +4295,41 @@ authentication:
enableInternalTrafficPolicy: true
# -- Enable LoadBalancer IP Address Management
enableLBIPAM: true
# -- Standalone DNS Proxy Configuration
# Note: The standalone DNS proxy uses the agent's dnsProxy.* configuration
# for DNS settings (proxyPort, enableDnsCompression) to ensure consistency.
standaloneDnsProxy:
# -- Enable standalone DNS proxy (alpha feature)
enabled: false
# -- Roll out Standalone DNS proxy automatically when configmap is updated.
rollOutPods: false
# -- Standalone DNS proxy annotations
annotations: {}
# -- Standalone DNS proxy debug mode
debug: false
# -- Standalone DNS proxy server port
serverPort: 10095
# -- Standalone DNS proxy Node Selector
nodeSelector:
kubernetes.io/os: linux
# -- Standalone DNS proxy tolerations
tolerations: []
# -- Standalone DNS proxy auto mount service account token
automountServiceAccountToken: false
# -- Standalone DNS proxy update strategy
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
# -- Standalone DNS proxy image
image:
# @schema
# type: [null, string]
# @schema
override: ~
repository: ""
tag: ""
digest: ""
useDigest: true
pullPolicy: "IfNotPresent"

View File

@@ -3,7 +3,6 @@
# type: [null, string]
# @schema
# -- namespaceOverride allows to override the destination namespace for Cilium resources.
# This property allows to use Cilium as part of an Umbrella Chart with different targets.
namespaceOverride: ""
# @schema
# type: [null, object]
@@ -27,7 +26,7 @@ debug:
# @schema
# -- Configure verbosity levels for debug logging
# This option is used to enable debug messages for operations related to such
# sub-system such as (e.g. kvstore, envoy, datapath or policy), and flow is
# sub-system such as (e.g. kvstore, envoy, datapath, policy, or tagged), and flow is
# for enabling debug messages emitted per request, message and connection.
# Multiple values can be set via a space-separated string (e.g. "datapath envoy").
#
@@ -37,6 +36,7 @@ debug:
# - envoy
# - datapath
# - policy
# - tagged
verbose: ~
# -- Set the agent-internal metrics sampling frequency. This sets the
@@ -207,6 +207,12 @@ serviceAccounts:
name: hubble-generate-certs
automount: true
annotations: {}
# -- CorednsMCSAPI is used if clustermesh.mcsapi.corednsAutoConfigure.enabled=true
corednsMCSAPI:
create: true
name: cilium-coredns-mcsapi-autoconfig
automount: true
annotations: {}
# -- Configure termination grace period for cilium-agent DaemonSet.
terminationGracePeriodSeconds: 1
# -- Install the cilium agent resources.
@@ -368,6 +374,8 @@ securityContext:
- SETGID
# Allow to execute program that changes UID (e.g. required for package installation)
- SETUID
# Allow to read dmesg and get kernel pointers when kptr_restrict=1
- SYSLOG
# -- Capabilities for the `mount-cgroup` init container
mountCgroup:
# Only used for 'mount' cgroup
@@ -440,9 +448,16 @@ azure:
# clientID: 00000000-0000-0000-0000-000000000000
# clientSecret: 00000000-0000-0000-0000-000000000000
# userAssignedIdentityID: 00000000-0000-0000-0000-000000000000
nodeSpec:
azureInterfaceName: ""
alibabacloud:
# -- Enable AlibabaCloud ENI integration
enabled: false
nodeSpec:
vSwitches: []
vSwitchTags: []
securityGroups: []
securityGroupTags: []
# -- Enable bandwidth manager to optimize TCP and UDP workloads and allow
# for rate-limiting traffic from individual Pods with EDT (Earliest Departure
# Time) through the "kubernetes.io/egress-bandwidth" Pod annotation.
@@ -475,8 +490,7 @@ l2podAnnouncements:
interface: "eth0"
# -- A regular expression matching interfaces used for sending Gratuitous ARP pod announcements
# interfacePattern: ""
# -- This feature set enables virtual BGP routers to be created via
# CiliumBGPPeeringPolicy CRDs.
# -- This feature set enables virtual BGP routers to be created via BGP CRDs.
bgpControlPlane:
# -- Enables the BGP control plane.
enabled: false
@@ -486,9 +500,9 @@ bgpControlPlane:
create: false
# -- The name of the secret namespace to which Cilium agents are given read access
name: kube-system
# -- Status reporting settings (BGPv2 only)
# -- Status reporting settings
statusReport:
# -- Enable/Disable BGPv2 status reporting
# -- Enable/Disable BGP status reporting
# It is recommended to enable status reporting in general, but if you have any issue
# such as high API server load, you can disable it by setting this to false.
enabled: true
@@ -498,7 +512,7 @@ bgpControlPlane:
mode: "default"
# -- IP pool to allocate the BGP router-id from when the mode is ip-pool.
ipPool: ""
# -- Legacy BGP ORIGIN attribute settings (BGPv2 only)
# -- Legacy BGP ORIGIN attribute settings
legacyOriginAttribute:
# -- Enable/Disable advertising LoadBalancerIP routes with the legacy
# BGP ORIGIN attribute value INCOMPLETE (2) instead of the default IGP (0).
@@ -508,6 +522,11 @@ pmtuDiscovery:
# -- Enable path MTU discovery to send ICMP fragmentation-needed replies to
# the client.
enabled: false
# -- Enable kernel probing path MTU discovery for Pods which uses different message
# sizes to search for correct MTU value.
# Valid values are: always, blackhole, disabled and unset (or empty). If value
# is 'unset' or left empty then will not try to override setting.
packetizationLayerPMTUDMode: "blackhole"
bpf:
autoMount:
# -- Enable automatic mount of BPF filesystem
@@ -555,7 +574,7 @@ bpf:
# Helm configuration for BPF events map rate limiting is experimental and might change
# in upcoming releases.
events:
# -- Default settings for all types of events except dbg and pcap.
# -- Default settings for all types of events except dbg.
default:
# @schema
# type: [null, integer]
@@ -615,6 +634,12 @@ bpf:
# type: [null, integer]
# @schema
policyMapMax: 16384
# -- (float64) Configure threshold for emitting pressure metrics of policy maps.
# @schema
# type: [null, number]
# @schema
# @default -- `0.1`
policyMapPressureMetricsThreshold: ~
# -- Configure the maximum number of entries in global policy stats map.
# @schema
# type: [null, integer]
@@ -672,7 +697,8 @@ bpf:
# type: [null, boolean]
# @schema
# -- (bool) Configure the eBPF-based TPROXY (beta) to reduce reliance on iptables rules
# for implementing Layer 7 policy.
# for implementing Layer 7 policy. Note this is incompatible with netkit (`bpf.datapathMode=netkit`,
# `bpf.datapathMode=netkit-l2`).
# @default -- `false`
tproxy: ~
# @schema
@@ -682,6 +708,15 @@ bpf:
# [0] will allow all VLAN id's without any filtering.
# @default -- `[]`
vlanBypass: ~
# -- Configure the IP tracing option type.
# This option is used to specify the IP option type to use for tracing.
# The value must be an integer between 0 and 255.
# @schema
# type: [null, integer]
# minimum: 0
# maximum: 255
# @schema
monitorTraceIPOption: 0
# -- (bool) Disable ExternalIP mitigation (CVE-2020-8554)
# @default -- `false`
disableExternalIPMitigation: false
@@ -689,7 +724,8 @@ bpf:
# supported kernels.
# @default -- `true`
enableTCX: true
# -- (string) Mode for Pod devices for the core datapath (veth, netkit, netkit-l2)
# -- (string) Mode for Pod devices for the core datapath (veth, netkit, netkit-l2).
# Note netkit is incompatible with TPROXY (`bpf.tproxy`).
# @default -- `veth`
datapathMode: veth
# -- Enable BPF clock source probing for more efficient tick retrieval.
@@ -778,8 +814,17 @@ cni:
# -- Specifies the resources for the cni initContainer
resources:
requests:
# @schema
# type: [integer, string]
# @schema
cpu: 100m
memory: 10Mi
limits:
# @schema
# type: [integer, string]
# @schema
cpu: 1
memory: 1Gi
# -- Enable route MTU for pod netns when CNI chaining is used
enableRouteMTUForCNIChaining: false
# -- Enable the removal of iptables rules created by the AWS CNI VPC plugin.
@@ -804,10 +849,6 @@ conntrackGCMaxInterval: ""
# -- (string) Configure timeout in which Cilium will exit if CRDs are not available
# @default -- `"5m"`
crdWaitTimeout: ""
# -- Tail call hooks for custom eBPF programs.
customCalls:
# -- Enable tail call hooks for custom eBPF programs.
enabled: false
daemon:
# -- Configure where Cilium runtime state should be stored.
runPath: "/var/run/cilium"
@@ -850,6 +891,13 @@ daemon:
#
# By default, this functionality is enabled
enableSourceIPVerification: true
# -- Configure temporary volume for cilium-agent
tmpVolume: {}
# emptyDir:
# sizeLimit: "100Mi"
# medium: "Memory"
# -- Specify which network interfaces can run the eBPF datapath. This means
# that a packet sent from a pod to a destination outside the cluster will be
# masqueraded (to an output device IPv4 address), if the output device runs the
@@ -869,9 +917,6 @@ forceDeviceDetection: false
# -- Enable setting identity mark for local traffic.
# enableIdentityMark: true
# -- Enable Kubernetes EndpointSlice feature in Cilium if the cluster supports it.
# enableK8sEndpointSlice: true
# -- CiliumEndpointSlice configuration options.
ciliumEndpointSlice:
# -- Enable Cilium EndpointSlice feature.
@@ -1056,20 +1101,33 @@ enableXTSocketFallback: true
encryption:
# -- Enable transparent network encryption.
enabled: false
# -- Encryption method. Can be either ipsec or wireguard.
# -- Encryption method. Can be one of ipsec, wireguard or ztunnel.
type: ipsec
# -- Enable encryption for pure node to node traffic.
# This option is only effective when encryption.type is set to "wireguard".
nodeEncryption: false
# -- Configure the WireGuard Pod2Pod strict mode.
# -- Configure the Encryption Pod2Pod strict mode.
strictMode:
# -- Enable WireGuard Pod2Pod strict mode.
# -- Enable Encryption Pod2Pod strict mode. (deprecated: please use encryption.strictMode.egress.enabled)
enabled: false
# -- CIDR for the WireGuard Pod2Pod strict mode.
# -- CIDR for the Encryption Pod2Pod strict mode. (deprecated: please use encryption.strictMode.egress.cidr)
cidr: ""
# -- Allow dynamic lookup of remote node identities.
# -- Allow dynamic lookup of remote node identities. (deprecated: please use encryption.strictMode.egress.allowRemoteNodeIdentities)
# This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap.
allowRemoteNodeIdentities: false
egress:
# -- Enable strict egress encryption.
enabled: false
# -- CIDR for the Encryption Pod2Pod strict egress mode.
cidr: ""
# -- Allow dynamic lookup of remote node identities.
# This is required when tunneling is used or direct routing is used and the node CIDR and pod CIDR overlap.
allowRemoteNodeIdentities: false
ingress:
# -- Enable strict ingress encryption.
# When enabled, all unencrypted overlay ingress traffic will be dropped.
# This option is only applicable when WireGuard and tunneling are enabled.
enabled: false
ipsec:
# -- Name of the key file inside the Kubernetes secret configured via secretName.
keyFile: keys
@@ -1141,6 +1199,33 @@ eni:
# -- Filter via AWS EC2 Instance tags (k=v) which will dictate which AWS EC2 Instances
# are going to be used to create new ENIs
instanceTagsFilter: []
# -- NodeSpec configuration for the ENI
nodeSpec:
# -- First interface index to use for IP allocation
# @schema
# type: [null, integer]
# @schema
firstInterfaceIndex: ~
# -- Subnet IDs to use for IP allocation
subnetIDs: []
# -- Subnet tags to use for IP allocation
subnetTags: []
# -- Security groups to use for IP allocation
securityGroups: []
# -- Security group tags to use for IP allocation
securityGroupTags: []
# -- Exclude interface tags to use for IP allocation
excludeInterfaceTags: []
# -- Use primary address for IP allocation
usePrimaryAddress: false
# -- Disable prefix delegation for IP allocation
disablePrefixDelegation: false
# -- Delete ENI on termination
# @schema
# type: [null, boolean]
# @schema
deleteOnTermination: ~
# fragmentTracking enables IPv4 fragment tracking support in the datapath.
# fragmentTracking: true
gke:
@@ -1156,6 +1241,8 @@ healthCheckICMPFailureThreshold: 3
hostFirewall:
# -- Enables the enforcement of host policies in the eBPF datapath.
enabled: false
# -- Enable routing to a service that has zero endpoints
enableNoServiceEndpointsRoutable: true
# -- Configure socket LB
socketLB:
# -- Enable socket LB
@@ -1183,8 +1270,11 @@ certgen:
digest: "${CERTGEN_DIGEST}"
useDigest: true
pullPolicy: "${PULL_POLICY}"
# @schema
# type: [null, integer]
# @schema
# -- Seconds after which the completed job pod will be deleted
ttlSecondsAfterFinished: 1800
ttlSecondsAfterFinished: null
# -- Labels to be added to hubble-certgen pods
podLabels: {}
# -- Annotations to be added to the hubble-certgen initial Job and CronJob
@@ -1209,6 +1299,11 @@ certgen:
extraVolumeMounts: []
# -- Affinity for certgen
affinity: {}
cronJob:
# -- The number of successful finished jobs to keep
successfulJobsHistoryLimit: 3
# -- The number of failed finished jobs to keep
failedJobsHistoryLimit: 1
hubble:
# -- Enable Hubble (true by default).
enabled: true
@@ -1224,6 +1319,9 @@ hubble:
# 2047, 4095, 8191, 16383, 32767, 65535
# eventBufferCapacity: "4095"
# -- The interval at which Hubble will send out lost events from the Observer server, if any.
# lostEventSendInterval: 1s
# -- Hubble metrics configuration.
# See https://docs.cilium.io/en/stable/observability/metrics/#hubble-metrics
# for more comprehensive documentation about Hubble metrics.
@@ -1730,6 +1828,24 @@ hubble:
address: localhost
# -- Configure pprof listen port for hubble-relay
port: 6062
# -- Enable mutex contention profiling for hubble-relay and set the fraction of sampled events (set to 1 to sample all events)
mutexProfileFraction: 0
# -- Enable goroutine blocking profiling for hubble-relay and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead])
blockProfileRate: 0
# -- Logging configuration for hubble-relay.
logOptions:
# @schema
# type: [null, string]
# @schema
# -- Log format for hubble-relay. Valid values are: text, text-ts, json, json-ts.
# @default -- text-ts
format: ~
# @schema
# type: [null, string]
# @schema
# -- Log level for hubble-relay. Valid values are: debug, info, warn, error.
# @default -- info
level: ~
ui:
# -- Whether to enable the Hubble UI.
enabled: false
@@ -1925,6 +2041,13 @@ hubble:
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
# -- Configure temporary volume for hubble-ui
tmpVolume: {}
# emptyDir:
# # sizeLimit: "100Mi"
# # medium: "Memory"
# -- Hubble flows export.
export:
# --- Static exporter configuration.
@@ -1937,6 +2060,14 @@ hubble:
# - source
# - destination
# - verdict
fieldAggregate: []
# - time
# - source
# - destination
# - verdict
# --- Defines the interval at which to aggregate before exporting Hubble flows.
# Aggregation feature is only enabled when fieldAggregate is specified and aggregationInterval > 0s.
aggregationInterval: "0s"
allowList: []
# - '{"verdict":["DROPPED","ERROR"]}'
denyList: []
@@ -1962,6 +2093,8 @@ hubble:
content:
- name: all
fieldMask: []
fieldAggregate: []
aggregationInterval: "0s"
includeFilters: []
excludeFilters: []
filePath: "/var/run/cilium/hubble/events.log"
@@ -2056,11 +2189,30 @@ ipam:
# refill the bucket up to the burst size capacity.
# @default -- `4.0`
externalAPILimitQPS: ~
# -- defaultLBServiceIPAM indicates the default LoadBalancer Service IPAM when
# no LoadBalancer class is set. Applicable values: lbipam, nodeipam, none
# -- NodeSpec configuration for the IPAM
nodeSpec:
# -- IPAM min allocate
# @schema
# type: [null, integer]
# @schema
ipamMinAllocate: ~
# -- IPAM pre allocate
# @schema
# type: [null, integer]
# @schema
ipamPreAllocate: ~
# -- IPAM max allocate
# @schema
# type: [null, integer]
# @schema
ipamMaxAllocate: ~
# -- IPAM static IP tags (currently only works with AWS and Azure)
ipamStaticIPTags: []
# @schema
# type: [string]
# @schema
# -- defaultLBServiceIPAM indicates the default LoadBalancer Service IPAM when
# no LoadBalancer class is set. Applicable values: lbipam, nodeipam, none
defaultLBServiceIPAM: lbipam
nodeIPAM:
# -- Configure Node IPAM
@@ -2147,7 +2299,7 @@ localRedirectPolicy: false
localRedirectPolicies:
# -- Enable local redirect policies.
enabled: false
# -- Limit the allowed addresses in Address Matcher rule of
# Local Redirect Policies to the given CIDRs.
# @schema@
@@ -2177,7 +2329,7 @@ maglev: {}
# type: [null, boolean]
# @schema
# -- (bool) Enables masquerading of IPv4 traffic leaving the node from endpoints.
# @default -- `true` unless ipam eni mode is active
# @default -- `true` unless ipam eni mode is active
enableIPv4Masquerade: ~
# -- Enables masquerading of IPv6 traffic leaving the node from endpoints.
enableIPv6Masquerade: true
@@ -2187,6 +2339,8 @@ enableMasqueradeRouteSource: false
enableIPv4BIGTCP: false
# -- Enables IPv6 BIG TCP support which increases maximum IPv6 GSO/GRO limits for nodes and pods
enableIPv6BIGTCP: false
# -- Enable BIG TCP in tunneling mode and increase maximum GRO/GSO limits for VXLAN/GENEVE tunnels
enableTunnelBIGTCP: false
nat:
# -- Number of the top-k SNAT map connections to track in Cilium statedb.
@@ -2290,8 +2444,6 @@ loadBalancer:
algorithm: round_robin
# -- Configure N-S k8s service loadbalancing
nodePort:
# -- Enable the Cilium NodePort service implementation.
enabled: false
# -- Port range to use for NodePort services.
# range: "30000,32767"
@@ -2336,6 +2488,10 @@ pprof:
address: localhost
# -- Configure pprof listen port for cilium-agent
port: 6060
# -- Enable mutex contention profiling for cilium-agent and set the fraction of sampled events (set to 1 to sample all events)
mutexProfileFraction: 0
# -- Enable goroutine blocking profiling for cilium-agent and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead])
blockProfileRate: 0
# -- Configure prometheus metrics on the configured port at /metrics
prometheus:
metricsService: false
@@ -2460,6 +2616,12 @@ envoy:
initialFetchTimeoutSeconds: 30
# -- Maximum number of concurrent retries on Envoy clusters
maxConcurrentRetries: 128
# -- Maximum number of connections on Envoy clusters
clusterMaxConnections: 1024
# -- Maximum number of requests on Envoy clusters
clusterMaxRequests: 1024
# -- Maximum number of global downstream connections
maxGlobalDownstreamConnections: 50000
# -- Maximum number of retries for each HTTP request
httpRetryCount: 3
# -- ProxyMaxRequestsPerConnection specifies the max_requests_per_connection setting for Envoy
@@ -2476,6 +2638,9 @@ envoy:
xffNumTrustedHopsL7PolicyIngress: 0
# -- Number of trusted hops regarding the x-forwarded-for and related HTTP headers for the egress L7 policy enforcement Envoy listeners.
xffNumTrustedHopsL7PolicyEgress: 0
# -- For cases when CiliumEnvoyConfig is not used directly (Ingress, Gateway), configures Cilium BPF Metadata listener filter
# to use the original source address when extracting the metadata for a request.
useOriginalSourceAddress: true
# @schema
# type: [null, string]
# @schema
@@ -2494,6 +2659,8 @@ envoy:
pullPolicy: "${PULL_POLICY}"
digest: "${CILIUM_ENVOY_DIGEST}"
useDigest: true
# -- Init containers added to the cilium Envoy DaemonSet.
initContainers: []
# -- Additional containers added to the cilium Envoy DaemonSet.
extraContainers: []
# -- Additional envoy container arguments.
@@ -2726,17 +2893,16 @@ resourceQuotas:
pods: "15"
# Need to document default
##################
#sessionAffinity: false
# -- Annotations to be added to all cilium-secret namespaces (resources under templates/cilium-secrets-namespace)
secretsNamespaceAnnotations: {}
# -- Labels to be added to all cilium-secret namespaces (resources under templates/cilium-secrets-namespace)
secretsNamespaceLabels: {}
# -- Do not run Cilium agent when running with clean mode. Useful to completely
# uninstall Cilium as it will stop Cilium from starting and create artifacts
# in the node.
sleepAfterInit: false
# -- Enable check of service source ranges (currently, only for LoadBalancer).
svcSourceRangeCheck: true
# -- Synchronize Kubernetes nodes to kvstore and perform CNP GC.
synchronizeK8sNodes: true
# -- Configure TLS configuration in the agent.
@@ -2819,6 +2985,9 @@ tls:
# @default -- `"vxlan"`
tunnelProtocol: ""
# -- IP family for the underlay.
# Possible values:
# - "ipv4"
# - "ipv6"
# @default -- `"ipv4"`
underlayProtocol: ""
# -- Enable native-routing mode or tunneling mode.
@@ -2839,6 +3008,11 @@ tunnelSourcePortRange: 0-0
# - reject (default)
# - drop
serviceNoBackendResponse: reject
# -- Configure what the response should be to pod egress traffic denied by network policy.
# Possible values:
# - none (default)
# - icmp
policyDenyResponse: none
# -- Configure the underlying network MTU to overwrite auto-detected MTU.
# This value doesn't change the host network interface MTU i.e. eth0 or ens0.
# It changes the MTU for cilium_net@cilium_host, cilium_host@cilium_net,
@@ -2924,7 +3098,7 @@ operator:
# @schema
# type: [null, array]
# @schema
tolerations:
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: Exists
- key: "node-role.kubernetes.io/master" #deprecated
@@ -3016,6 +3190,10 @@ operator:
address: localhost
# -- Configure pprof listen port for cilium-operator
port: 6061
# -- Enable mutex contention profiling for cilium-operator and set the fraction of sampled events (set to 1 to sample all events)
mutexProfileFraction: 0
# -- Enable goroutine blocking profiling for cilium-operator and set the rate of sampled events in nanoseconds (set to 1 to sample all events [warning: performance overhead])
blockProfileRate: 0
# -- Enable prometheus metrics for cilium-operator on the configured port at
# /metrics
prometheus:
@@ -3049,6 +3227,17 @@ operator:
# @schema
# -- Metrics relabeling configs for the ServiceMonitor cilium-operator
metricRelabelings: ~
# -- TLS configuration for Prometheus
tls:
enabled: false
server:
# -- Name of the Secret containing the certificate, key and CA files for the Prometheus server.
existingSecret: ""
mtls:
# When set to true enforces mutual TLS between Operator Prometheus server and its clients.
# False allow non-mutual TLS connections.
# This option has no effect when TLS is disabled.
enabled: false
# -- Grafana dashboards for cilium-operator
# grafana can import dashboards based on the label and value
# ref: https://github.com/grafana/helm-charts/tree/main/charts/grafana#sidecar-for-dashboards
@@ -3082,6 +3271,12 @@ operator:
# -- Interval, in seconds, to check if there are any pods that are not
# managed by Cilium.
intervalSeconds: 15
# -- Selector for pods that should be restarted when not managed by Cilium.
# If not set, defaults to built-in selector "k8s-app=kube-dns". Set to empty string to select all pods.
# @schema
# type: [null, string]
# @schema
selector: ~
nodeinit:
# -- Enable the node initialization DaemonSet
enabled: false
@@ -3136,6 +3331,9 @@ nodeinit:
# ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
resources:
requests:
# @schema
# type: [integer, string]
# @schema
cpu: 100m
memory: 100Mi
# -- Security context to be added to nodeinit pods.
@@ -3160,6 +3358,8 @@ nodeinit:
# -- bootstrapFile is the location of the file where the bootstrap timestamp is
# written by the node-init DaemonSet
bootstrapFile: "/tmp/cilium-bootstrap.d/cilium-bootstrap-time"
# -- wait for Cloud init to finish on the host and assume the node has cloud init installed
waitForCloudInit: false
# -- startup offers way to customize startup nodeinit script (pre and post position)
startup:
preScript: ""
@@ -3293,7 +3493,9 @@ enableCriticalPriorityClass: true
# on AArch64 as the images do not currently ship a version of Envoy.
#disableEnvoyVersionCheck: false
clustermesh:
# -- Deploy clustermesh-apiserver for clustermesh
# -- Deploy clustermesh-apiserver for clustermesh. This option is typically
# used with ``clustermesh.config.enabled=true``. Refer to the
# ``clustermesh.config.enabled=true``documentation for more information.
useAPIServer: false
# -- The maximum number of clusters to support in a ClusterMesh. This value
# cannot be changed on running clusters, and all clusters in a ClusterMesh
@@ -3301,45 +3503,133 @@ clustermesh:
# maximum allocatable cluster-local identities.
# Supported values are 255 and 511.
maxConnectedClusters: 255
# -- The time to live for the cache of a remote cluster after connectivity is
# lost. If the connection is not re-established within this duration, the
# cached data is revoked to prevent stale state. If not specified or set to
# 0s, the cache is never revoked (default).
cacheTTL: "0s"
# -- Enable the synchronization of Kubernetes EndpointSlices corresponding to
# the remote endpoints of appropriately-annotated global services through ClusterMesh
enableEndpointSliceSynchronization: false
# -- Enable Multi-Cluster Services API support
# -- Enable Multi-Cluster Services API support (deprecated; use clustermesh.mcsapi.enabled)
enableMCSAPISupport: false
# -- Control whether policy rules assume by default the local cluster if not explicitly selected
policyDefaultLocalCluster: false
policyDefaultLocalCluster: true
# -- Annotations to be added to all top-level clustermesh objects (resources under templates/clustermesh-apiserver and templates/clustermesh-config)
annotations: {}
# -- Clustermesh explicit configuration.
config:
# -- Enable the Clustermesh explicit configuration.
# If set to false, you need to provide the following resources yourself:
# - (Secret) cilium-clustermesh (used by cilium-agent/cilium-operator to connect to
# the local etcd instance if KVStoreMesh is enabled or the remote clusters
# if KVStoreMesh is disabled)
# - (Secret) cilium-kvstoremesh (used by KVStoreMesh to connect to the remote clusters)
# - (ConfigMap) clustermesh-remote-users (used to create one etcd user per remote cluster
# if clustermesh-apiserver is used and `clustermesh.apiserver.tls.authMode` is not
# set to `legacy`)
enabled: false
# -- Default dns domain for the Clustermesh API servers
# This is used in the case cluster addresses are not provided
# and IPs are used.
domain: mesh.cilium.io
# -- List of clusters to be peered in the mesh.
# -- Clusters to be peered in the mesh.
# @schema
# type: [object, array]
# @schema
clusters: []
# You can use a dict of clusters (recommended):
# clusters:
# # -- Name of the cluster
# # -- Name of the cluster
# cluster1:
# # -- Whether to enable this cluster in the mesh. Optional, defaults to true.
# enabled: true
# # -- Address of the cluster, use this if you created DNS records for
# # the cluster Clustermesh API server.
# address: cluster1.mesh.cilium.io
# # -- Port of the cluster Clustermesh API server.
# port: 2379
# # -- IPs of the cluster Clustermesh API server, use multiple ones when
# # you have multiple IPs to access the Clustermesh API server.
# ips:
# - 172.18.255.201
# # -- (deprecated) base64 encoded PEM values for the cluster client certificate, private key and certificate authority.
# # These fields can (and should) be omitted in case the CA is shared across clusters. In that case, the
# # "remote" private key and certificate available in the local cluster are automatically used instead.
# tls:
# cert: ""
# key: ""
# caCert: ""
#
# Or alternatively you can use a list of clusters:
# clusters:
# # -- Name of the cluster
# - name: cluster1
# # -- Address of the cluster, use this if you created DNS records for
# # the cluster Clustermesh API server.
# # -- Address of the cluster, use this if you created DNS records for
# # the cluster Clustermesh API server.
# address: cluster1.mesh.cilium.io
# # -- Port of the cluster Clustermesh API server.
# # -- Port of the cluster Clustermesh API server.
# port: 2379
# # -- IPs of the cluster Clustermesh API server, use multiple ones when
# # you have multiple IPs to access the Clustermesh API server.
# # -- IPs of the cluster Clustermesh API server, use multiple ones when
# # you have multiple IPs to access the Clustermesh API server.
# ips:
# - 172.18.255.201
# # -- base64 encoded PEM values for the cluster client certificate, private key and certificate authority.
# # These fields can (and should) be omitted in case the CA is shared across clusters. In that case, the
# # "remote" private key and certificate available in the local cluster are automatically used instead.
# # -- (deprecated) base64 encoded PEM values for the cluster client certificate, private key and certificate authority.
# # These fields can (and should) be omitted in case the CA is shared across clusters. In that case, the
# # "remote" private key and certificate available in the local cluster are automatically used instead.
# tls:
# cert: ""
# key: ""
# caCert: ""
mcsapi:
# -- Enable Multi-Cluster Services API support
enabled: false
# -- Enabled MCS-API CRDs auto-installation
installCRDs: true
corednsAutoConfigure:
# -- Enable auto-configuration of CoreDNS for Multi-Cluster Services API.
# CoreDNS MUST be at least in version v1.12.2 to run this.
enabled: false
coredns:
# -- The Deployment for the cluster CoreDNS service
deploymentName: coredns
# -- The Service Account name for the cluster CoreDNS service
serviceAccountName: coredns
# -- The ConfigMap name for the cluster CoreDNS service
configMapName: coredns
# -- The namespace for the cluster CoreDNS service
namespace: kube-system
# -- The cluster domain for the cluster CoreDNS service
clusterDomain: cluster.local
# -- The clusterset domain for the cluster CoreDNS service
clustersetDomain: clusterset.local
# -- Additional arguments to `clustermesh-apiserver coredns-mcsapi-auto-configure`.
extraArgs: []
# -- Seconds after which the completed job pod will be deleted
ttlSecondsAfterFinished: 1800
# -- Labels to be added to coredns-mcsapi-autoconfig pods
podLabels: {}
# -- Annotations to be added to the coredns-mcsapi-autoconfig Job
annotations: {}
# -- Node selector for coredns-mcsapi-autoconfig
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector
nodeSelector: {}
# -- Priority class for coredns-mcsapi-autoconfig
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass
priorityClassName: ""
# -- Node tolerations for pod assignment on nodes with taints
# ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
tolerations: []
# -- Resource limits for coredns-mcsapi-autoconfig
# ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers
resources: {}
# -- Additional coredns-mcsapi-autoconfig volumes.
extraVolumes: []
# -- Additional coredns-mcsapi-autoconfig volumeMounts.
extraVolumeMounts: []
# -- Affinity for coredns-mcsapi-autoconfig
affinity: {}
apiserver:
# -- Clustermesh API server image.
image:
@@ -3445,17 +3735,12 @@ clustermesh:
# - "external": ``clustermesh-apiserver`` will sync remote cluster information to the etcd used as kvstore. This can't be enabled with crd identity allocation mode.
kvstoreMode: "internal"
service:
# -- (bool) Set externallyCreated to true to create the clustermesh-apiserver service outside this helm chart.
# For example after external load balancer controllers are created.
externallyCreated: false
# -- The type of service used for apiserver access.
type: NodePort
# -- Optional port to use as the node port for apiserver access.
#
# WARNING: make sure to configure a different NodePort in each cluster if
# kube-proxy replacement is enabled, as Cilium is currently affected by a known
# bug (#24692) when NodePorts are handled by the KPR implementation. If a service
# with the same NodePort exists both in the local and the remote cluster, all
# traffic originating from inside the cluster and targeting the corresponding
# NodePort will be redirected to a local backend, regardless of whether the
# destination node belongs to the local or the remote cluster.
nodePort: 32379
# -- Annotations for the clustermesh-apiserver service.
# Example annotations to configure an internal load balancer on different cloud providers:
@@ -3624,13 +3909,15 @@ clustermesh:
# The "remote" certificate must be generated with CN=remote-<cluster-name>
# if provided manually. Cluster mode is meaningful only when the same
# CA is shared across all clusters part of the mesh.
authMode: legacy
# -- Allow users to provide their own certificates
authMode: migration
# -- (deprecated) Allow users to provide their own certificates
# Users may need to provide their certificates using
# a mechanism that requires they provide their own secrets.
# This setting does not apply to any of the auto-generated
# mechanisms below, it only restricts the creation of secrets
# via the `tls-provided` templates.
# This option is deprecated as secrets are expected to be created
# externally when 'auto' is not enabled.
enableSecrets: true
# -- Configure automatic TLS certificates generation.
# A Kubernetes CronJob is used the generate any
@@ -3639,7 +3926,14 @@ clustermesh:
auto:
# -- When set to true, automatically generate a CA and certificates to
# enable mTLS between clustermesh-apiserver and external workload instances.
# If set to false, the certs to be provided by setting appropriate values below.
#
# When set to false you need to pre-create the following secrets:
# - clustermesh-apiserver-server-cert
# - clustermesh-apiserver-admin-cert
# - clustermesh-apiserver-remote-cert
# - clustermesh-apiserver-local-cert
# The above secret should at least contains the keys `tls.crt` and `tls.key`
# and optionally `ca.crt` if a CA bundle is not configured.
enabled: true
# Sets the method to auto-generate certificates. Supported values:
# - helm: This method uses Helm to generate all certificates.
@@ -3671,10 +3965,13 @@ clustermesh:
# name: ca-issuer
# -- certmanager issuer used when clustermesh.apiserver.tls.auto.method=certmanager.
certManagerIssuerRef: {}
# -- base64 encoded PEM values for the clustermesh-apiserver server certificate and private key.
# Used if 'auto' is not enabled.
server:
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
cert: ""
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
key: ""
# -- Extra DNS names added to certificate when it's auto generated
extraDnsNames: []
@@ -3683,17 +3980,16 @@ clustermesh:
# -- base64 encoded PEM values for the clustermesh-apiserver admin certificate and private key.
# Used if 'auto' is not enabled.
admin:
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
cert: ""
key: ""
# -- base64 encoded PEM values for the clustermesh-apiserver client certificate and private key.
# Used if 'auto' is not enabled.
client:
cert: ""
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
key: ""
# -- base64 encoded PEM values for the clustermesh-apiserver remote cluster certificate and private key.
# Used if 'auto' is not enabled.
remote:
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
cert: ""
# -- Deprecated, as secrets will always need to be created externally if `auto` is disabled.
key: ""
# clustermesh-apiserver Prometheus metrics configuration
metrics:
@@ -3848,7 +4144,7 @@ authentication:
# -- Enable authentication processing and garbage collection.
# Note that if disabled, policy enforcement will still block requests that require authentication.
# But the resulting authentication requests for these requests will not be processed, therefore the requests not be allowed.
enabled: true
enabled: false
# -- Buffer size of the channel Cilium uses to receive authentication events from the signal map.
queueSize: 1024
# -- Buffer size of the channel Cilium uses to receive certificate expiration events from auth handlers.
@@ -4041,4 +4337,41 @@ authentication:
enableInternalTrafficPolicy: true
# -- Enable LoadBalancer IP Address Management
enableLBIPAM: true
# -- Standalone DNS Proxy Configuration
# Note: The standalone DNS proxy uses the agent's dnsProxy.* configuration
# for DNS settings (proxyPort, enableDnsCompression) to ensure consistency.
standaloneDnsProxy:
# -- Enable standalone DNS proxy (alpha feature)
enabled: false
# -- Roll out Standalone DNS proxy automatically when configmap is updated.
rollOutPods: false
# -- Standalone DNS proxy annotations
annotations: {}
# -- Standalone DNS proxy debug mode
debug: false
# -- Standalone DNS proxy server port
serverPort: 10095
# -- Standalone DNS proxy Node Selector
nodeSelector:
kubernetes.io/os: linux
# -- Standalone DNS proxy tolerations
tolerations: []
# -- Standalone DNS proxy auto mount service account token
automountServiceAccountToken: false
# -- Standalone DNS proxy update strategy
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
# -- Standalone DNS proxy image
image:
# @schema
# type: [null, string]
# @schema
override: ~
repository: "${STANDALONE_DNS_PROXY_REPO}"
tag: "${STANDALONE_DNS_PROXY_VERSION}"
digest: "${STANDALONE_DNS_PROXY_DIGEST}"
useDigest: ${USE_DIGESTS}
pullPolicy: "${PULL_POLICY}"

View File

@@ -1,2 +1,2 @@
ARG VERSION=v1.18.6
ARG VERSION=v1.19.1
FROM quay.io/cilium/cilium:${VERSION}

View File

@@ -15,8 +15,8 @@ cilium:
mode: "kubernetes"
image:
repository: ghcr.io/cozystack/cozystack/cilium
tag: 1.18.6
digest: "sha256:4f4585f8adc3b8becd15d3999f3900a4d3d650f2ab7f85ca8c661f3807113d01"
tag: 1.19.1
digest: "sha256:ab3acf270821df4614a8456348a4e0d3098aed72a4b2016a0edfa30d91428c3d"
envoy:
enabled: false
rollOutCiliumPods: true

View File

@@ -157,30 +157,29 @@ annotations:
- apiVersion: v1.edp.epam.com/v1
kind: KeycloakRealmIdentityProvider
metadata:
name: instagram-test
name: github-test
spec:
realm: d2-id-k8s-realm-name
alias: instagram
alias: github
authenticateByDefault: false
enabled: true
firstBrokerLoginFlowAlias: "first broker login"
providerId: "instagram"
providerId: "github"
config:
clientId: "foo"
clientSecret: "bar"
hideOnLoginPage: "true"
syncMode: "IMPORT"
useJwksUrl: "true"
mappers:
- name: "test3212"
identityProviderMapper: "oidc-hardcoded-role-idp-mapper"
identityProviderAlias: "instagram"
identityProviderAlias: "github"
config:
role: "role-tr"
syncMode: "INHERIT"
- name: "test-33221"
identityProviderMapper: "hardcoded-attribute-idp-mapper"
identityProviderAlias: "instagram"
identityProviderAlias: "github"
config:
attribute: "foo"
"attribute.value": "bar"
@@ -272,8 +271,8 @@ annotations:
secret: secret-name-in-operator-ns
url: https://keycloak.example.com
artifacthub.io/images: |
- name: keycloak-operator:1.25.0
image: epamedp/keycloak-operator:1.25.0
- name: keycloak-operator:1.32.0
image: epamedp/keycloak-operator:1.32.0
artifacthub.io/license: Apache-2.0
artifacthub.io/links: |
- name: KubeRocketCI Documentation
@@ -283,7 +282,7 @@ annotations:
artifacthub.io/operator: "true"
artifacthub.io/operatorCapabilities: Deep Insights
apiVersion: v2
appVersion: 1.25.0
appVersion: 1.32.0
description: A Helm chart for KubeRocketCI Keycloak Operator
home: https://docs.kuberocketci.io/
icon: https://docs.kuberocketci.io/img/logo.svg
@@ -308,4 +307,4 @@ name: keycloak-operator
sources:
- https://github.com/epam/edp-keycloak-operator
type: application
version: 1.25.0
version: 1.32.0

View File

@@ -1,6 +1,6 @@
# keycloak-operator
![Version: 1.25.0](https://img.shields.io/badge/Version-1.25.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.25.0](https://img.shields.io/badge/AppVersion-1.25.0-informational?style=flat-square)
![Version: 1.32.0](https://img.shields.io/badge/Version-1.32.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.32.0](https://img.shields.io/badge/AppVersion-1.32.0-informational?style=flat-square)
A Helm chart for KubeRocketCI Keycloak Operator
@@ -16,6 +16,7 @@ _**NOTE:** Operator is platform-independent, which is why there is a unified ins
1. Linux machine or Windows Subsystem for Linux instance with [Helm 3](https://helm.sh/docs/intro/install/) installed;
2. Cluster admin access to the cluster;
3. [cert-manager](https://cert-manager.io/docs/installation/) installed in the cluster (required for webhook functionality, can be disabled via `enableWebhooks: false`);
## Installation Using Helm Chart
@@ -32,7 +33,7 @@ To install the Keycloak Operator, follow the steps below:
```bash
helm search repo epamedp/keycloak-operator -l
NAME CHART VERSION APP VERSION DESCRIPTION
epamedp/keycloak-operator 1.24.0 1.24.0 A Helm chart for KRCI Keycloak Operator
epamedp/keycloak-operator 1.31.0 1.31.0 A Helm chart for KRCI Keycloak Operator
```
_**NOTE:** It is highly recommended to use the latest stable version._
@@ -129,14 +130,21 @@ Development versions are also available from the [snapshot helm chart repository
|-----|------|---------|-------------|
| affinity | object | `{}` | Affinity for pod assignment |
| annotations | object | `{}` | Annotations to be added to the Deployment |
| clusterDomain | string | `"cluster.local"` | Cluster domain for constructing service DNS names |
| clusterReconciliationEnabled | bool | `false` | If clusterReconciliationEnabled is true, the operator reconciles all Keycloak instances in the cluster; otherwise, it only reconciles instances in the same namespace by default, and cluster-scoped resources are ignored. |
| containerSecurityContext | object | `{"allowPrivilegeEscalation":false}` | Container Security Context Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
| enableOwnerRef | bool | `true` | If set to true, the operator will set the owner reference for all resources that have Keycloak or KeycloakRealm as reference. This is legacy behavior and not recommended for use. In the future, this will be set to false by default. |
| enableWebhooks | bool | `true` | If set to true, enables webhook resources (ValidatingWebhookConfiguration, Service, and Certificate). Webhooks require cert-manager to be installed in the cluster. |
| extraVolumeMounts | list | `[]` | Additional volumeMounts to be added to the container |
| extraVolumes | list | `[]` | Additional volumes to be added to the pod |
| image.registry | string | `""` | KubeRocketCI keycloak-operator Docker image registry. |
| image.repository | string | `"epamedp/keycloak-operator"` | KubeRocketCI keycloak-operator Docker image name. The released image can be found on [Dockerhub](https://hub.docker.com/r/epamedp/keycloak-operator) |
| image.tag | string | `nil` | KubeRocketCI keycloak-operator Docker image tag. The released image can be found on [Dockerhub](https://hub.docker.com/r/epamedp/keycloak-operator/tags) |
| imagePullPolicy | string | `"IfNotPresent"` | If defined, a imagePullPolicy applied to the deployment |
| imagePullSecrets | list | `[]` | If defined, imagePullSecrets are applied to deployment |
| name | string | `"keycloak-operator"` | Application name string |
| nodeSelector | object | `{}` | Node labels for pod assignment |
| podLabels | object | `{}` | Labels to be added to the pod |
| resources | object | `{"limits":{"memory":"192Mi"},"requests":{"cpu":"50m","memory":"64Mi"}}` | Resource limits and requests for the pod |
| securityContext | object | `{"runAsNonRoot":true}` | Deployment Security Context Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
| tolerations | list | `[]` | Node tolerations for server scheduling to nodes with taints |

View File

@@ -17,6 +17,7 @@ _**NOTE:** Operator is platform-independent, which is why there is a unified ins
1. Linux machine or Windows Subsystem for Linux instance with [Helm 3](https://helm.sh/docs/intro/install/) installed;
2. Cluster admin access to the cluster;
3. [cert-manager](https://cert-manager.io/docs/installation/) installed in the cluster (required for webhook functionality, can be disabled via `enableWebhooks: false`);
## Installation Using Helm Chart
@@ -33,7 +34,7 @@ To install the Keycloak Operator, follow the steps below:
```bash
helm search repo epamedp/keycloak-operator -l
NAME CHART VERSION APP VERSION DESCRIPTION
epamedp/keycloak-operator 1.24.0 1.24.0 A Helm chart for KRCI Keycloak Operator
epamedp/keycloak-operator 1.31.0 1.31.0 A Helm chart for KRCI Keycloak Operator
```
_**NOTE:** It is highly recommended to use the latest stable version._

View File

@@ -7,3 +7,25 @@ spec:
realmName: realm-sample1234
authenticationFlows:
browserFlow: browserFlow-sample
login:
userRegistration: true
forgotPassword: true
rememberMe: true
emailAsUsername: false
loginWithEmail: true
duplicateEmails: false
verifyEmail: true
editUsername: false
sessions:
ssoLoginSettings:
accessCodeLifespanLogin: 1800 # 30 minutes
accessCodeLifespanUserAction: 300 # 5 minutes
ssoSessionSettings:
idleTimeout: 1800 # 30 minutes
idleTimeoutRememberMe: 604800 # 7 days
maxLifespan: 36000 # 10 hours
maxLifespanRememberMe: 2592000 # 30 days
ssoOfflineSessionSettings:
idleTimeout: 2592000 # 30 days
maxLifespan: 5184000 # 60 days
maxLifespanEnabled: true

View File

@@ -14,11 +14,16 @@ spec:
webUrl: https://argocd.example.com
adminUrl: https://admin.example.com
homeUrl: /home/
defaultClientScopes:
- groups
redirectUris:
- /url1/*
- /url2/*
clientRolesV2:
- name: roleA
description: "Role A"
associatedClientRoles:
- roleB
- name: roleB
description: "Role B"
---

View File

@@ -8,6 +8,7 @@ spec:
name: keycloakrealm-sample
kind: KeycloakRealm
description: "Group Membership"
type: default
protocol: openid-connect
protocolMappers:
- name: groups

View File

@@ -0,0 +1,45 @@
# Organization with identity provider configuration
apiVersion: v1.edp.epam.com/v1alpha1
kind: KeycloakOrganization
metadata:
name: test-keycloak-organization
namespace: default
spec:
name: "Test Organization"
alias: "test-org"
domains:
- "example.com"
- "test.com"
redirectUrl: "https://example.com/redirect"
description: "Test organization"
attributes:
department:
- "engineering"
- "qa"
location:
- "us-east"
identityProviders:
- alias: "test-org-idp"
realmRef:
kind: KeycloakRealm
name: test-org-realm
---
apiVersion: v1.edp.epam.com/v1
kind: KeycloakRealmIdentityProvider
metadata:
name: test-org-idp
namespace: default
spec:
alias: "test-org-idp"
enabled: true
providerId: "github"
realmRef:
kind: KeycloakRealm
name: test-org-realm
config:
clientId: "test-org-client-id"
clientSecret: "test-org-client-secret"
kc.org.domain: "example.com"
kc.org.broker.redirect.mode.email-matches: "true"

View File

@@ -3,7 +3,6 @@ kind: KeycloakRealm
metadata:
name: keycloakrealm-sample
spec:
id: bfebeff6-ac63-4b46-a1f3-37df5099a9c4
realmName: realm-sample
keycloakRef:
name: keycloak-sample
@@ -16,6 +15,7 @@ spec:
realmEventConfig:
adminEventsDetailsEnabled: false
adminEventsEnabled: true
adminEventsExpiration: 544
enabledEventTypes:
- UPDATE_CONSENT_ERROR
- CLIENT_LOGIN
@@ -32,6 +32,15 @@ spec:
refreshTokenMaxReuse: 300
revokeRefreshToken: true
defaultSignatureAlgorithm: RS256
login:
userRegistration: true
forgotPassword: true
rememberMe: true
emailAsUsername: true
loginWithEmail: true
duplicateEmails: false
verifyEmail: true
editUsername: true
userProfileConfig:
unmanagedAttributePolicy: "ENABLED"
attributes:
@@ -94,3 +103,16 @@ spec:
key: "password"
username:
value: "username"
sessions:
ssoLoginSettings:
accessCodeLifespanLogin: 1800 # 30 minutes
accessCodeLifespanUserAction: 300 # 5 minutes
ssoSessionSettings:
idleTimeout: 1800 # 30 minutes
idleTimeoutRememberMe: 604800 # 7 days
maxLifespan: 36000 # 10 hours
maxLifespanRememberMe: 2592000 # 30 days
ssoOfflineSessionSettings:
idleTimeout: 2592000 # 30 days
maxLifespan: 5184000 # 60 days
maxLifespanEnabled: true

View File

@@ -7,3 +7,29 @@ spec:
name: keycloakrealm-sample
kind: KeycloakRealm
name: ArgoCDAdmins
---
# Example of a child group using parentGroup
apiVersion: v1.edp.epam.com/v1
kind: KeycloakRealmGroup
metadata:
name: keycloakrealmgroup-child-sample
spec:
realmRef:
name: keycloakrealm-sample
kind: KeycloakRealm
name: ArgoCDDevelopers
parentGroup:
name: keycloakrealmgroup-sample
---
apiVersion: v1.edp.epam.com/v1
kind: KeycloakRealmGroup
metadata:
name: keycloakrealmgroup-child-sample2
spec:
realmRef:
name: keycloakrealm-sample
kind: KeycloakRealm
name: ArgoCDGoDevs
parentGroup:
name: keycloakrealmgroup-child-sample

View File

@@ -5,23 +5,33 @@ metadata:
spec:
realmRef:
kind: KeycloakRealm
name: realm
alias: instagram
name: keycloakrealm-sample
alias: github
authenticateByDefault: false
enabled: true
firstBrokerLoginFlowAlias: "first broker login"
providerId: "instagram"
postBrokerLoginFlowAlias: "browser"
providerId: "github"
config:
clientId: "foo"
clientSecret: "$secretName:secretKey"
hideOnLoginPage: "true"
clientSecret: "$test-idp-secret:secret"
syncMode: "IMPORT"
useJwksUrl: "true"
mappers:
- name: "test-33221"
identityProviderMapper: "hardcoded-attribute-idp-mapper"
identityProviderAlias: "instagram"
identityProviderAlias: "github"
config:
attribute: "foo"
"attribute.value": "bar"
syncMode: "IMPORT"
---
apiVersion: v1
kind: Secret
metadata:
name: test-idp-secret
type: Opaque
data:
secret: "c2VjcmV0" # base64 encoded value of "secret"

View File

@@ -13,8 +13,21 @@ spec:
enabled: true
emailVerified: true
keepResource: true
passwordSecret:
key: password
name: keycloakrealmuser-sample-password
temporary: true
requiredUserActions:
- UPDATE_PASSWORD
attributes:
foo: "bar"
baz: "jazz"
- UPDATE_PROFILE
attributesV2:
department: ["IT"]
location: ["Winterfell"]
---
apiVersion: v1
kind: Secret
metadata:
name: keycloakrealmuser-sample-password
type: Opaque
data:
password: "U29tZVBhc3N3b3JkMTIzIQ==" # SomePassword123!

View File

@@ -19,3 +19,5 @@ spec:
passwordSecret:
name: existing-k8s-secret
key: key-which-contains-password
identityProviders:
- provider-alias

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: clusterkeycloakrealms.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -97,6 +97,57 @@ spec:
nullable: true
type: boolean
type: object
login:
description: Login settings for the realm.
nullable: true
properties:
duplicateEmails:
default: false
description: DuplicateEmails allows multiple users to have the
same email address.
type: boolean
editUsername:
default: false
description: EditUsername allows to edit username.
type: boolean
emailAsUsername:
default: false
description: EmailAsUsername allows users to set email as username.
type: boolean
forgotPassword:
default: false
description: ForgotPassword shows a link on the login page for
users who have forgotten their credentials.
type: boolean
loginWithEmail:
default: true
description: LoginWithEmail allows users to log in with their
email address.
type: boolean
rememberMe:
default: false
description: RememberMe shows checkbox on the login page to allow
the user to remain logged in between browser restarts until
the session expires.
type: boolean
userRegistration:
default: false
description: UserRegistration enables/disables the registration
page. A link for registration will show on the login page too.
type: boolean
verifyEmail:
default: false
description: VerifyEmail requires user to verify their email address
after initial login or after address changes are submitted.
type: boolean
type: object
organizationsEnabled:
default: false
description: |-
OrganizationsEnabled enables Keycloak Organizations feature for this realm.
When enabled, this realm can support Organization resources for multi-tenant scenarios,
identity provider groupings, and domain-based user routing.
type: boolean
passwordPolicy:
description: PasswordPolicies is a list of password policies to apply
to the realm.
@@ -153,6 +204,80 @@ spec:
realmName:
description: RealmName specifies the name of the realm.
type: string
sessions:
description: Sessions defines the session settings for the realm.
properties:
ssoLoginSettings:
description: SSOLoginSettings defines the SSO login settings for
the realm.
properties:
accessCodeLifespanLogin:
default: 1800
description: AccessCodeLifespanLogin represents the max time
a user has to complete a login. This is recommended to be
relatively long, such as 30 minutes or more.
type: integer
accessCodeLifespanUserAction:
default: 300
description: AccessCodeLifespanUserAction represents the max
time a user has to complete login related actions like update
password or configure totp. This is recommended to be relatively
long, such as 5 minutes or more.
type: integer
type: object
ssoOfflineSessionSettings:
description: SSOOfflineSessionSettings defines the SSO offline
session settings for the realm.
properties:
idleTimeout:
default: 2592000
description: |-
IdleTimeout represents the time an offline session is allowed to be idle before it expires.
You need to use offline token to refresh at least once within this period; otherwise offline session will expire.
type: integer
maxLifespan:
default: 5184000
description: MaxLifespan represents the max time before an
offline session is expired regardless of activity.
type: integer
maxLifespanEnabled:
default: false
description: MaxLifespanEnabled enables the offline session
maximum lifetime.
type: boolean
type: object
ssoSessionSettings:
description: SSOSessionSettings defines the SSO session settings
for the realm.
properties:
idleTimeout:
default: 1800
description: |-
IdleTimeout represents the time a session is allowed to be idle before it expires.
Tokens and browser sessions are invalidated when a session is expired.
type: integer
idleTimeoutRememberMe:
default: 0
description: |-
IdleTimeoutRememberMe represents the time a session is allowed to be idle before it expires.
Tokens and browser sessions are invalidated when a session is expired.
If not set it uses the standard ssoSessionIdle value.
type: integer
maxLifespan:
default: 36000
description: |-
MaxLifespan represents the max time before a session is expired.
Tokens and browser sessions are invalidated when a session is expired.
type: integer
maxLifespanRememberMe:
default: 0
description: |-
MaxLifespanRememberMe represents the max time before a session is expired when a user has set the remember me option.
Tokens and browser sessions are invalidated when a session is expired.
If not set it uses the standard ssoSessionMax value.
type: integer
type: object
type: object
smtp:
description: Smtp is the configuration for email in the realm.
nullable: true
@@ -174,10 +299,13 @@ spec:
description: The key to select.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -190,10 +318,13 @@ spec:
description: The key of the secret to select from.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -210,10 +341,13 @@ spec:
description: The key to select.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -226,10 +360,13 @@ spec:
description: The key of the secret to select from.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: clusterkeycloaks.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -66,10 +66,13 @@ spec:
description: The key to select.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -82,10 +85,13 @@ spec:
description: The key of the secret to select from.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakauthflows.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -109,15 +109,11 @@ spec:
description: ProviderID for root auth flow and provider for child
auth flows.
type: string
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -126,6 +122,8 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
topLevel:
description: TopLevel is true if this is root auth flow.
@@ -134,6 +132,7 @@ spec:
- alias
- builtIn
- providerId
- realmRef
- topLevel
type: object
status:

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakclients.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -45,8 +45,10 @@ spec:
description: KeycloakClientSpec defines the desired state of KeycloakClient.
properties:
adminFineGrainedPermissionsEnabled:
description: AdminFineGrainedPermissionsEnabled enable/disable fine-grained
admin permissions for a client.
description: |-
AdminFineGrainedPermissionsEnabled enable/disable fine-grained admin permissions for a client.
Feature flag admin-fine-grained-authz:v1 should be enabled in Keycloak server.
Important: FGAP:V1 Keycloak feature remains in preview and may be deprecated and removed in a future releases.
type: boolean
adminUrl:
description: |-
@@ -222,6 +224,8 @@ spec:
within an access token or ID token representing the identity asking permissions.
If not defined, user's groups are obtained from your realm configuration.
type: string
required:
- groups
type: object
logic:
default: POSITIVE
@@ -419,12 +423,36 @@ spec:
URI and tokens.
type: string
clientRoles:
description: ClientRoles is a list of client roles names assigned
to client.
description: |-
ClientRoles is a list of client roles names assigned to client.
Deprecated: Use ClientRolesV2 instead.
items:
type: string
nullable: true
type: array
clientRolesV2:
description: ClientRolesV2 is a list of client roles assigned to client.
items:
properties:
associatedClientRoles:
description: |-
AssociatedClientRoles is a list of client roles names associated with the current role.
These roles won't be created automatically, user should specify them separately in clientRolesV2.
items:
type: string
nullable: true
type: array
description:
description: Description is a client role description.
type: string
name:
description: Name is a client role name.
type: string
required:
- name
type: object
nullable: true
type: array
consentRequired:
description: ConsentRequired is a flag to enable consent.
type: boolean
@@ -524,6 +552,7 @@ spec:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -532,6 +561,8 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
realmRoles:
description: RealmRoles is a list of realm roles assigned to client.
@@ -582,7 +613,19 @@ spec:
attributes:
additionalProperties:
type: string
description: Attributes is a map of service account attributes.
description: |-
Attributes is a map of service account attributes.
Deprecated: Use AttributesV2 instead.
nullable: true
type: object
attributesV2:
additionalProperties:
items:
type: string
type: array
description: |-
AttributesV2 is a map of service account attributes.
Each attribute can have multiple values.
nullable: true
type: object
clientRoles:
@@ -595,7 +638,7 @@ spec:
type: string
roles:
description: Roles is a list of client roles names assigned
to service account.
to user.
items:
type: string
nullable: true
@@ -608,6 +651,12 @@ spec:
enabled:
description: Enabled is a flag to enable service account.
type: boolean
groups:
description: Groups is a list of groups assigned to service account
items:
type: string
nullable: true
type: array
realmRoles:
description: RealmRoles is a list of realm roles assigned to service
account.
@@ -623,13 +672,6 @@ spec:
surrogateAuthRequired:
description: SurrogateAuthRequired is a flag to enable surrogate auth.
type: boolean
targetRealm:
description: |-
Deprecated: use RealmRef instead.
TargetRealm is a realm name where client will be created.
It has higher priority than RealmRef for backward compatibility.
If both TargetRealm and RealmRef are specified, TargetRealm will be used for client creation.
type: string
webOrigins:
description: |-
WebOrigins is a list of allowed CORS origins.
@@ -647,12 +689,72 @@ spec:
type: string
required:
- clientId
- realmRef
type: object
status:
description: KeycloakClientStatus defines the observed state of KeycloakClient.
properties:
clientId:
type: string
conditions:
description: Conditions represent the latest available observations
of an object's state.
items:
description: Condition contains details for one aspect of the current
state of this API Resource.
properties:
lastTransitionTime:
description: |-
lastTransitionTime is the last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: |-
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength: 32768
type: string
observedGeneration:
description: |-
observedGeneration represents the .metadata.generation that the condition was set based upon.
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
with respect to the current state of the instance.
format: int64
minimum: 0
type: integer
reason:
description: |-
reason contains a programmatic identifier indicating the reason for the condition's last transition.
Producers of specific condition types may define expected values and meanings for this field,
and whether the values are considered a guaranteed API.
The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False, Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: type of condition in CamelCase or in foo.example.com/CamelCase.
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
nullable: true
type: array
failureCount:
format: int64
type: integer

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakclientscopes.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -52,7 +52,9 @@ spec:
nullable: true
type: object
default:
description: Default is a flag to set client scope as default.
description: |-
Default is a flag to set client scope as default.
Deprecated: Use Type: default instead.
type: boolean
description:
description: Description is a description of client scope.
@@ -87,15 +89,11 @@ spec:
type: object
nullable: true
type: array
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -104,10 +102,25 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
type:
default: none
description: |-
Type of the client scope.
If set to "default", the client scope is assigned to all clients by default.
If set to "optional", the client scope can be assigned to clients on demand.
If set to "none", the client scope is not assigned to any clients by default.
enum:
- default
- optional
- none
type: string
required:
- name
- protocol
- realmRef
type: object
status:
description: KeycloakClientScopeStatus defines the observed state of KeycloakClientScope.

View File

@@ -0,0 +1,149 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakorganizations.v1.edp.epam.com
spec:
group: v1.edp.epam.com
names:
kind: KeycloakOrganization
listKind: KeycloakOrganizationList
plural: keycloakorganizations
singular: keycloakorganization
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
- description: Keycloak organization ID
jsonPath: .status.organizationId
name: Organization ID
type: string
- description: Keycloak realm name
jsonPath: .spec.realmName
name: Realm
type: string
- description: Keycloak instance name
jsonPath: .spec.keycloakRef.name
name: Keycloak
type: string
name: v1alpha1
schema:
openAPIV3Schema:
description: KeycloakOrganization is the Schema for the organizations API.
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: KeycloakOrganizationSpec defines the desired state of Organization.
properties:
alias:
description: |-
Alias is the unique alias for the organization.
The alias should be unique across Organizations.
type: string
attributes:
additionalProperties:
items:
type: string
type: array
description: Attributes is a map of custom attributes for the organization.
nullable: true
type: object
description:
description: Description is an optional description of the organization.
type: string
domains:
description: |-
Domains is a list of email domains associated with the organization.
Each domain should be unique across Organizations.
items:
type: string
minItems: 1
type: array
identityProviders:
description: |-
IdentityProviders is a list of identity providers associated with the organization.
One identity provider can't be assigned to multiple organizations.
items:
description: OrgIdentityProvider defines an identity provider for
an organization.
properties:
alias:
description: Alias is the unique identifier for the identity
provider within the organization.
type: string
required:
- alias
type: object
nullable: true
type: array
name:
description: |-
Name is the unique name of the organization.
The name should be unique across Organizations.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
- ClusterKeycloakRealm
type: string
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
redirectUrl:
description: RedirectURL is the optional redirect URL for the organization.
type: string
required:
- alias
- domains
- name
- realmRef
type: object
status:
description: KeycloakOrganizationStatus defines the observed state of
Organization.
properties:
error:
description: Error is the error message if the reconciliation failed.
type: string
organizationId:
description: OrganizationID is the unique identifier of the organization
in Keycloak.
type: string
value:
description: Value contains the current reconciliation status.
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakrealmcomponents.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -90,15 +90,11 @@ spec:
providerType:
description: ProviderType is a provider type of component.
type: string
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -107,11 +103,14 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
required:
- name
- providerId
- providerType
- realmRef
type: object
status:
description: KeycloakComponentStatus defines the observed state of KeycloakRealmComponent.

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakrealmgroups.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -67,7 +67,7 @@ spec:
type: string
roles:
description: Roles is a list of client roles names assigned
to service account.
to user.
items:
type: string
nullable: true
@@ -80,18 +80,28 @@ spec:
name:
description: Name of keycloak group.
type: string
parentGroup:
description: |-
ParentGroup is a reference to a parent KeycloakRealmGroup custom resource.
If specified, this group will be created as a child group of the referenced parent.
The parent KeycloakRealmGroup must exist in the same namespace.
nullable: true
properties:
name:
description: Name specifies the name of the KeycloakRealmGroup
custom resource.
type: string
required:
- name
type: object
path:
description: Path is a group path.
type: string
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -100,6 +110,8 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
realmRoles:
description: RealmRoles is a list of realm roles assigned to group.
@@ -108,13 +120,16 @@ spec:
nullable: true
type: array
subGroups:
description: SubGroups is a list of subgroups assigned to group.
description: |-
SubGroups is a list of subgroups assigned to group.
Deprecated: This filed doesn't allow to fully support child groups. Use ParentGroup approach instead.
items:
type: string
nullable: true
type: array
required:
- name
- realmRef
type: object
status:
description: KeycloakRealmGroupStatus defines the observed state of KeycloakRealmGroup.

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakrealmidentityproviders.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -50,6 +50,12 @@ spec:
description: AddReadTokenRoleOnCreate is a flag to add read token
role on create.
type: boolean
adminFineGrainedPermissionsEnabled:
description: |-
AdminFineGrainedPermissionsEnabled enable/disable fine-grained admin permissions for an identity provider.
Feature flag admin-fine-grained-authz:v1 should be enabled in Keycloak server.
Important: FGAP:V1 Keycloak feature remains in preview and may be deprecated and removed in a future releases.
type: boolean
alias:
description: Alias is a alias of identity provider.
type: string
@@ -102,18 +108,38 @@ spec:
type: object
nullable: true
type: array
permission:
description: Permission is a identity provider permissions configuration
nullable: true
properties:
scopePermissions:
description: ScopePermissions mapping of scope and the policies
attached
items:
properties:
name:
type: string
policies:
items:
type: string
type: array
required:
- name
type: object
type: array
type: object
postBrokerLoginFlowAlias:
description: PostBrokerLoginFlowAlias is a post broker login flow
alias.
type: string
providerId:
description: ProviderID is a provider ID of identity provider.
type: string
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -122,6 +148,8 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
storeToken:
description: StoreToken is a flag to store token.
@@ -134,6 +162,7 @@ spec:
- config
- enabled
- providerId
- realmRef
type: object
status:
description: KeycloakRealmIdentityProviderStatus defines the observed

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakrealmrolebatches.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -44,15 +44,11 @@ spec:
spec:
description: KeycloakRealmRoleBatchSpec defines the desired state of KeycloakRealmRoleBatch.
properties:
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -61,6 +57,8 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
roles:
description: Roles is a list of roles to be created.
@@ -104,6 +102,7 @@ spec:
type: object
type: array
required:
- realmRef
- roles
type: object
status:

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakrealmroles.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -15,7 +15,7 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -98,15 +98,11 @@ spec:
name:
description: Name of keycloak role.
type: string
realm:
description: |-
Deprecated: use RealmRef instead.
Realm is name of KeycloakRealm custom resource.
type: string
realmRef:
description: RealmRef is reference to Realm custom resource.
properties:
kind:
default: KeycloakRealm
description: Kind specifies the kind of the Keycloak resource.
enum:
- KeycloakRealm
@@ -115,9 +111,12 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
required:
- name
- realmRef
type: object
status:
description: KeycloakRealmRoleStatus defines the observed state of KeycloakRealmRole.

View File

@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.18.0
name: keycloakrealms.v1.edp.epam.com
spec:
group: v1.edp.epam.com
@@ -19,7 +19,7 @@ spec:
jsonPath: .status.available
name: Available
type: boolean
- description: Reconcilation status
- description: Reconciliation status
jsonPath: .status.value
name: Status
type: string
@@ -83,16 +83,11 @@ spec:
description: ID is the ID of the realm.
nullable: true
type: string
keycloakOwner:
description: |-
Deprecated: use KeycloakRef instead.
KeycloakOwner specifies the name of the Keycloak instance that owns the realm.
nullable: true
type: string
keycloakRef:
description: KeycloakRef is reference to Keycloak custom resource.
properties:
kind:
default: Keycloak
description: Kind specifies the kind of the Keycloak resource.
enum:
- Keycloak
@@ -101,7 +96,60 @@ spec:
name:
description: Name specifies the name of the Keycloak resource.
type: string
required:
- name
type: object
login:
description: Login settings for the realm.
nullable: true
properties:
duplicateEmails:
default: false
description: DuplicateEmails allows multiple users to have the
same email address.
type: boolean
editUsername:
default: false
description: EditUsername allows to edit username.
type: boolean
emailAsUsername:
default: false
description: EmailAsUsername allows users to set email as username.
type: boolean
forgotPassword:
default: false
description: ForgotPassword shows a link on the login page for
users who have forgotten their credentials.
type: boolean
loginWithEmail:
default: true
description: LoginWithEmail allows users to log in with their
email address.
type: boolean
rememberMe:
default: false
description: RememberMe shows checkbox on the login page to allow
the user to remain logged in between browser restarts until
the session expires.
type: boolean
userRegistration:
default: false
description: UserRegistration enables/disables the registration
page. A link for registration will show on the login page too.
type: boolean
verifyEmail:
default: false
description: VerifyEmail requires user to verify their email address
after initial login or after address changes are submitted.
type: boolean
type: object
organizationsEnabled:
default: false
description: |-
OrganizationsEnabled enables Keycloak Organizations feature for this realm.
When enabled, this realm can support Organization resources for multi-tenant scenarios,
identity provider groupings, and domain-based user routing.
type: boolean
passwordPolicy:
description: PasswordPolicies is a list of password policies to apply
to the realm.
@@ -158,6 +206,83 @@ spec:
realmName:
description: RealmName specifies the name of the realm.
type: string
x-kubernetes-validations:
- message: Value is immutable
rule: self == oldSelf
sessions:
description: Sessions defines the session settings for the realm.
properties:
ssoLoginSettings:
description: SSOLoginSettings defines the SSO login settings for
the realm.
properties:
accessCodeLifespanLogin:
default: 1800
description: AccessCodeLifespanLogin represents the max time
a user has to complete a login. This is recommended to be
relatively long, such as 30 minutes or more.
type: integer
accessCodeLifespanUserAction:
default: 300
description: AccessCodeLifespanUserAction represents the max
time a user has to complete login related actions like update
password or configure totp. This is recommended to be relatively
long, such as 5 minutes or more.
type: integer
type: object
ssoOfflineSessionSettings:
description: SSOOfflineSessionSettings defines the SSO offline
session settings for the realm.
properties:
idleTimeout:
default: 2592000
description: |-
IdleTimeout represents the time an offline session is allowed to be idle before it expires.
You need to use offline token to refresh at least once within this period; otherwise offline session will expire.
type: integer
maxLifespan:
default: 5184000
description: MaxLifespan represents the max time before an
offline session is expired regardless of activity.
type: integer
maxLifespanEnabled:
default: false
description: MaxLifespanEnabled enables the offline session
maximum lifetime.
type: boolean
type: object
ssoSessionSettings:
description: SSOSessionSettings defines the SSO session settings
for the realm.
properties:
idleTimeout:
default: 1800
description: |-
IdleTimeout represents the time a session is allowed to be idle before it expires.
Tokens and browser sessions are invalidated when a session is expired.
type: integer
idleTimeoutRememberMe:
default: 0
description: |-
IdleTimeoutRememberMe represents the time a session is allowed to be idle before it expires.
Tokens and browser sessions are invalidated when a session is expired.
If not set it uses the standard ssoSessionIdle value.
type: integer
maxLifespan:
default: 36000
description: |-
MaxLifespan represents the max time before a session is expired.
Tokens and browser sessions are invalidated when a session is expired.
type: integer
maxLifespanRememberMe:
default: 0
description: |-
MaxLifespanRememberMe represents the max time before a session is expired when a user has set the remember me option.
Tokens and browser sessions are invalidated when a session is expired.
If not set it uses the standard ssoSessionMax value.
type: integer
type: object
type: object
smtp:
description: Smtp is the configuration for email in the realm.
nullable: true
@@ -179,10 +304,13 @@ spec:
description: The key to select.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -195,10 +323,13 @@ spec:
description: The key of the secret to select from.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -215,10 +346,13 @@ spec:
description: The key to select.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -231,10 +365,13 @@ spec:
description: The key of the secret to select from.
type: string
name:
default: ""
description: |-
Name of the referent.
This field is effectively required, but due to backwards compatibility is
allowed to be empty. Instances of this type with an empty value here are
almost certainly wrong.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?
type: string
required:
- key
@@ -550,6 +687,7 @@ spec:
nullable: true
type: array
required:
- keycloakRef
- realmName
type: object
status:

Some files were not shown because too many files have changed in this diff Show More