Suite au succès de l’article sur le Kubernetes managé de Clever Cloud, une demande, que je garderai totalement anonyme, m’a été faite :
Pourquoi ne pas regarder l’intégration de Cilium dans le Kube managé d’OVH ?
Mais oui quelle bonne idée !

Installation de MKS#
Qu’est-ce que la MKS ?#
MKS est tout simplement l’acronyme de Managed Kubernetes Service. C’est le Kubernetes managé par le cloud provider français OVH cloud.
C’est la seconde fois que je touche à OVH. La première c’était vers 2009. J’avais créé un petit blog hébergé Wordpress qui a disparu. Donc on peut dire que je ne connais pas du tout OVH.

Comment créer un cluster ?#
Pré-requis pour avoir ce Kubernetes :
- un compte OVH
- une carte bancaire valide
- la cli ovhcloud
Pour être honnête, j’ai voulu installer de la même manière que pour Clever Cloud le MKS : en ligne de commande. J’ai réussi à installer la version “free” de MKS et je suis tombé sur un Kubernetes avec comme CNI Calico… J’ai eu limite un ITT. J’ai ensuite compris que c’est uniquement la version standard (c’est à dire payante) de MKS qui utilise Cilium, il faut ainsi également installer une gateway ce qui complique encore la tâche. J’ai fini par laisser tomber la cli et utiliser l’interface web.
Création du cluster avec Cilium#
Pré-requis#
Pour créer un Kubernetes avec Cilium, il faut déjà :
- Créer un réseau privé dans une région qui permet d’avoir un Kubernetes avec plan standard (J’ai choisi
EU-WEST-PAR, Paris quoi) - Créer une gateway qui est attaché à ce réseau (qui est payante)
- Créer un sous réseau
L’interface web permet de le faire facilement.


Installation du cluster Kubernetes#
Une fois cela fait, on peut enfin créer son cluster Kubernetes


J’ai également créer un Nodepool de deux nœuds workers qui sont rattachés au control plane. Pas besoin de plus pour les tests.
Récupération du Kubeconfig#
Configuration de l’ovh cli#
Pour récupérer le Kubeconfig, on peut le faire via l’interface graphique. Mais vu que j’avais déjà configuré la cli ovh cloud, je l’ai fait en cli.
Comme pour toute cli de cloud provider, Il faut déjà configurer son authentification :
ovhcloud loginOn tombe sur :
EU selected. Please visit https://www.ovh.com/auth/api/createToken?POST=*&GET=*&PUT=*&DELETE=* to create credentials.
Application key
aaaaaaaaaaaaaaaa
Application secret
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Consumer key
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Press enter to validate ->En cliquant sur le lien, on tombe sur la création d’une clé api :

Cela permet ainsi de récupérer Application key, Application secret et Consumer key.
Maintenant que la ligne de commande ovhcloud est configurée. On va pouvoir récupérer le Kubeconfig.
ovhcloud cloud kube list┌──────────────────────────────────────┬────────┬─────────────┬──────────┬──────────┬────────┐
│ id │ name │ region │ plan │ version │ status │
├──────────────────────────────────────┼────────┼─────────────┼──────────┼──────────┼────────┤
│ 019e552e-b548-713d-8eed-0a9df45c9daa │ cilium │ EU-WEST-PAR │ standard │ 1.35.2-3 │ READY │
└──────────────────────────────────────┴────────┴─────────────┴──────────┴──────────┴────────┘
💡 Use option -o json or -o yaml to get the raw output with all informationYouhou on va pouvoir enfin utiliser Kube !!! C’est l’avant-dernière version de Kubernetes.
Récupérons le kubeconfig :
ovhcloud cloud kube kubeconfig generate 019e552e-b548-713d-8eed-0a9df45c9daa > ~/.kube/configTestons :
kubectl get nodeOn voit alors :
NAME STATUS ROLES AGE VERSION
cilium-8qxgd-jdbw7 NotReady <none> 53s v1.35.2
cilium-8qxgd-ngnmk NotReady <none> 51s v1.35.2Ah mince le cluster n’est pas encore prêt ! Je paie pour rien là !
Regardons où en est l’installation de cilium :
kubectl get pod -ANo resources foundAh oui, ça n’a pas commencé…
En attendant, vous pouvez regarder cette vidéo :
Bon après 5 minutes, ça va être forcément installé :
kubectl get pod -ANAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cilium-75frl 0/1 Running 0 4m48s
kube-system cilium-envoy-4l8v5 1/1 Running 0 4m48s
kube-system cilium-envoy-h5hcq 1/1 Running 0 4m48s
kube-system cilium-k5qqm 0/1 Running 0 4m48s
kube-system cilium-operator-86bf684c97-sft8f 0/1 Pending 0 4m48s
kube-system coredns-5979fb97db-2q96m 0/1 Pending 0 4m48s
kube-system hubble-generate-certs-66jb9 0/1 Pending 0 4m48s
kube-system hubble-relay-9685586c6-lnt69 0/1 Pending 0 4m48s
kube-system hubble-ui-b95dbc5fd-46g6z 0/2 Pending 0 4m48s
kube-system kube-dns-autoscaler-988cb7bd5-pp547 0/1 Pending 0 4m48s
kube-system metrics-server-7587489986-mhrbd 0/1 Pending 0 4m45s
kube-system openstack-cinder-csi-nodeplugin-nkt8j 3/3 Running 0 4m48s
kube-system openstack-cinder-csi-nodeplugin-r2fgl 3/3 Running 0 4m48s
kube-system ovhcloud-apiserver-proxy-njhct 1/1 Running 0 4m48s
kube-system ovhcloud-apiserver-proxy-w648j 1/1 Running 0 4m48sJe commence à faire une attaque de panique : j’ai dû me planter quelque part ! Je suis trop nul !
Comment supprimer le cluster ? La patience est la vertu des forts !
Après plus de 10 minutes, je peux enfin utiliser mon cluster Kube :
kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cilium-75frl 1/1 Running 1 (4m52s ago) 10m
kube-system cilium-envoy-4l8v5 1/1 Running 0 10m
kube-system cilium-envoy-h5hcq 1/1 Running 0 10m
kube-system cilium-k5qqm 1/1 Running 1 (4m59s ago) 10m
kube-system cilium-operator-86bf684c97-sft8f 1/1 Running 0 10m
kube-system coredns-5979fb97db-2q96m 1/1 Running 0 10m
kube-system coredns-5979fb97db-zv8dx 1/1 Running 0 2m13s
kube-system hubble-generate-certs-kthrt 0/1 Completed 0 20s
kube-system hubble-relay-9685586c6-lnt69 1/1 Running 1 (47s ago) 10m
kube-system hubble-ui-b95dbc5fd-46g6z 2/2 Running 0 10m
kube-system konnectivity-agent-8lgbh 1/1 Running 0 2m33s
kube-system konnectivity-agent-bxcfh 1/1 Running 0 2m33s
kube-system kube-dns-autoscaler-988cb7bd5-pp547 1/1 Running 0 10m
kube-system metrics-server-7587489986-mhrbd 1/1 Running 0 10m
kube-system openstack-cinder-csi-nodeplugin-nkt8j 3/3 Running 0 10m
kube-system openstack-cinder-csi-nodeplugin-r2fgl 3/3 Running 0 10m
kube-system ovhcloud-apiserver-proxy-njhct 1/1 Running 0 10m
kube-system ovhcloud-apiserver-proxy-w648j 1/1 Running 0 10mOn peut voir un soucis au moment de l’installation de Cilium qui est redémarré. Pas sûr que j’ai envie de renouveler l’expérience de créer 511 clusters Kubernetes sur OVH.
Bon… L’essentiel c’est que ça fonctionne mais ça serait sympa de prévenir 😉
Observation du Cilium par OVH Cloud#
Les Pods#
Tout comme Clever Cloud, kube-proxy n’est pas installé donc Cilium est en mode kube-proxy replacement.
Par contre les pods cilium envoy sont présents, on peut donc supposer que les cilium network policies de niveau 7 fonctionnent.
Dernière chose : Hubble est installé. Regardons comment accéder à Hubble UI. On va faire un port-forward :
kubectl port-forward -n kube-system svc/hubble-ui 12000:80On va pouvoir se connecter sur le navigateur à cette adresse : http://localhost:12000

Les CRD#
Regardons maintenant les CRDs :
kubectl get crd
NAME CREATED AT
ciliumcidrgroups.cilium.io 2026-05-23T14:29:59Z
ciliumclusterwidenetworkpolicies.cilium.io 2026-05-23T14:29:58Z
ciliumendpoints.cilium.io 2026-05-23T14:29:55Z
ciliumidentities.cilium.io 2026-05-23T14:29:53Z
ciliuml2announcementpolicies.cilium.io 2026-05-23T14:30:02Z
ciliumloadbalancerippools.cilium.io 2026-05-23T14:30:01Z
ciliumlocalredirectpolicies.cilium.io 2026-05-23T14:30:00Z
ciliumnetworkpolicies.cilium.io 2026-05-23T14:29:57Z
ciliumnodeconfigs.cilium.io 2026-05-23T14:30:03Z
ciliumnodes.cilium.io 2026-05-23T14:29:52Z
ciliumpodippools.cilium.io 2026-05-23T14:29:54Z
nodepools.kube.cloud.ovh.com 2026-05-23T14:21:44Z
volumesnapshotclasses.snapshot.storage.k8s.io 2026-05-23T14:21:44Z
volumesnapshotcontents.snapshot.storage.k8s.io 2026-05-23T14:21:44Z
volumesnapshots.snapshot.storage.k8s.io 2026-05-23T14:21:44ZRien à signaler. Il y a bien des cilium network policies et des cilium cluster wide network policies.
La configuration#
On peut voir la configuration avec la commande suivante :
kubectl get cm -n kube-system cilium-config -o yamlSortie standard complète
apiVersion: v1
data:
agent-not-ready-taint-key: node.cilium.io/agent-not-ready
auto-direct-node-routes: "false"
bpf-distributed-lru: "false"
bpf-events-drop-enabled: "true"
bpf-events-policy-verdict-enabled: "true"
bpf-events-trace-enabled: "true"
bpf-lb-acceleration: disabled
bpf-lb-algorithm-annotation: "false"
bpf-lb-external-clusterip: "false"
bpf-lb-map-max: "65536"
bpf-lb-mode-annotation: "false"
bpf-lb-sock: "false"
bpf-lb-source-range-all-types: "false"
bpf-map-dynamic-size-ratio: "0.0025"
bpf-policy-map-max: "16384"
bpf-policy-stats-map-max: "65536"
bpf-root: /sys/fs/bpf
cgroup-root: /run/cilium/cgroupv2
cilium-endpoint-gc-interval: 5m0s
cluster-id: "0"
cluster-name: 019e552eb548713d8eed0a9df45c9daa
clustermesh-enable-endpoint-sync: "false"
clustermesh-enable-mcs-api: "false"
cni-exclusive: "true"
cni-log-file: /var/run/cilium/cilium-cni.log
controller-group-metrics: write-cni-file sync-host-ips sync-lb-maps-with-k8s-services
custom-cni-conf: "false"
datapath-mode: veth
debug: "false"
default-lb-service-ipam: lbipam
direct-routing-skip-unreachable: "false"
dnsproxy-enable-transparent-mode: "true"
dnsproxy-socket-linger-timeout: "10"
egress-gateway-reconciliation-trigger-interval: 1s
enable-auto-protect-node-port-range: "true"
enable-bpf-clock-probe: "false"
enable-endpoint-health-checking: "true"
enable-endpoint-lockdown-on-policy-overflow: "false"
enable-health-check-loadbalancer-ip: "false"
enable-health-check-nodeport: "true"
enable-health-checking: "true"
enable-hubble: "true"
enable-internal-traffic-policy: "true"
enable-ipv4: "true"
enable-ipv4-big-tcp: "false"
enable-ipv4-masquerade: "true"
enable-ipv6: "false"
enable-ipv6-big-tcp: "false"
enable-ipv6-masquerade: "true"
enable-k8s-networkpolicy: "true"
enable-l2-neigh-discovery: "false"
enable-l7-proxy: "true"
enable-lb-ipam: "true"
enable-local-redirect-policy: "true"
enable-masquerade-to-route-source: "false"
enable-metrics: "true"
enable-node-selector-labels: "false"
enable-non-default-deny-policies: "true"
enable-policy: default
enable-policy-secrets-sync: "true"
enable-sctp: "false"
enable-service-topology: "true"
enable-source-ip-verification: "true"
enable-svc-source-range-check: "true"
enable-tcx: "true"
enable-vtep: "false"
enable-well-known-identities: "false"
enable-xt-socket-fallback: "true"
envoy-access-log-buffer-size: "4096"
envoy-base-id: "0"
envoy-keep-cap-netbindservice: "false"
external-envoy-proxy: "true"
health-check-icmp-failure-threshold: "3"
http-retry-count: "3"
http-stream-idle-timeout: "300"
hubble-disable-tls: "false"
hubble-listen-address: :4244
hubble-network-policy-correlation-enabled: "true"
hubble-socket-path: /var/run/cilium/hubble.sock
hubble-tls-cert-file: /var/lib/cilium/tls/hubble/server.crt
hubble-tls-client-ca-files: /var/lib/cilium/tls/hubble/client-ca.crt
hubble-tls-key-file: /var/lib/cilium/tls/hubble/server.key
identity-allocation-mode: crd
identity-gc-interval: 15m0s
identity-heartbeat-timeout: 30m0s
identity-management-mode: agent
install-no-conntrack-iptables-rules: "false"
ipam: kubernetes
ipam-cilium-node-update-rate: 15s
iptables-random-fully: "false"
k8s-require-ipv4-pod-cidr: "false"
k8s-require-ipv6-pod-cidr: "false"
kube-proxy-replacement: "true"
kube-proxy-replacement-healthz-bind-address: ""
max-connected-clusters: "255"
mesh-auth-enabled: "true"
mesh-auth-gc-interval: 5m0s
mesh-auth-queue-size: "1024"
mesh-auth-rotated-identities-queue-size: "1024"
metrics-sampling-interval: 5m
monitor-aggregation: medium
monitor-aggregation-flags: all
monitor-aggregation-interval: 5s
nat-map-stats-entries: "32"
nat-map-stats-interval: 30s
node-port-bind-protection: "true"
nodes-gc-interval: 5m0s
operator-api-serve-addr: 127.0.0.1:9234
operator-prometheus-serve-addr: :9963
policy-default-local-cluster: "false"
policy-secrets-namespace: cilium-secrets
policy-secrets-only-from-secrets-namespace: "true"
preallocate-bpf-maps: "false"
procfs: /host/proc
prometheus-serve-addr: :9962
proxy-connect-timeout: "2"
proxy-idle-timeout-seconds: "60"
proxy-initial-fetch-timeout: "30"
proxy-max-concurrent-retries: "128"
proxy-max-connection-duration-seconds: "0"
proxy-max-requests-per-connection: "0"
proxy-xff-num-trusted-hops-egress: "0"
proxy-xff-num-trusted-hops-ingress: "0"
remove-cilium-node-taints: "true"
routing-mode: tunnel
service-no-backend-response: reject
set-cilium-is-up-condition: "true"
set-cilium-node-taints: "true"
synchronize-k8s-nodes: "true"
tofqdns-dns-reject-response-code: refused
tofqdns-enable-dns-compression: "true"
tofqdns-endpoint-max-ip-per-hostname: "1000"
tofqdns-idle-connection-grace-period: 0s
tofqdns-max-deferred-connection-deletes: "10000"
tofqdns-preallocate-identities: "true"
tofqdns-proxy-response-max-delay: 100ms
tunnel-protocol: vxlan
tunnel-source-port-range: 0-0
unmanaged-pod-watcher-interval: "15"
vtep-cidr: ""
vtep-endpoint: ""
vtep-mac: ""
vtep-mask: ""
write-cni-conf-when-ready: /host/etc/cni/net.d/05-cilium.conflist
kind: ConfigMap
metadata:
annotations:
argocd.argoproj.io/tracking-id: mylnvjyk_mks-customer-019e552e-b548-713d-8eed-0a9df45c9daa:/ConfigMap:kube-system/cilium-config
creationTimestamp: "2026-05-23T14:21:44Z"
labels:
argocd.argoproj.io/instance: mylnvjyk_mks-customer-019e552e-b548-713d-8eed-0a9df45c9daa
name: cilium-config
namespace: kube-system
resourceVersion: "818"
uid: b1e21425-83b2-4293-8e3a-3d41beb6ff53Sortie standard simplifié
kind: ConfigMap
apiVersion: v1
metadata:
name: cilium-config
namespace: kube-system
labels:
argocd.argoproj.io/instance: mylnvjyk_mks-customer-019e552e-b548-713d-8eed-0a9df45c9daa
data:
routing-mode: tunnel
tunnel-protocol: vxlan
datapath-mode: veth
kube-proxy-replacement: "true"
enable-ipv4: "true"
enable-ipv4-big-tcp: "false"
enable-ipv4-masquerade: "true"
enable-ipv6: "false"
enable-ipv6-big-tcp: "false"
enable-ipv6-masquerade: "true"
ipam: kubernetes
default-lb-service-ipam: lbipam
enable-lb-ipam: "true"
enable-policy: default
enable-k8s-networkpolicy: "true"
enable-l7-proxy: "true"
identity-allocation-mode: crd
enable-hubble: "true"
hubble-disable-tls: "false"
hubble-listen-address: :4244
cluster-id: "0"
cluster-name: 019e552eb548713d8eed0a9df45c9daa
max-connected-clusters: "255"
enable-metrics: "true"On retrouve déjà pas mal de chose qu’on a vu précédemment.
On voit également que Cilium a été installé avec ArgoCD (qui est masqué par OVH) :
labels:
argocd.argoproj.io/instance: mylnvjyk_mks-customer-019e552e-b548-713d-8eed-0a9df45c9daaÇa vient probablement de là le restart. On peut aussi supposer que si on modifie cette conf, argoCD remettrait automatiquement l’ancienne configuration.
La configMap est beaucoup plus fourni sur ovh que sur Clever Cloud. Il y a donc plus de tuning par défaut.
Contrairement à Clever, je vois l’option ipam à kubernetes : c’est donc le cluster Kubernetes qui s’occupe de la gestion des IPs pour les pods.
Cette option est “importante” car on ne peut pas la modifier après l’installation de Cilium (voir la documentation).
Pour les experts Cilium qui me lisent, je vous montre la sortie standard de cette commande :
kubectl exec -it ds/cilium -n kube-system -c cilium-agent -- cilium status --verboseSortie standard complète
KVStore: Disabled
Kubernetes: Ok 1.35 (v1.35.2) [linux/amd64]
Kubernetes APIs: ["EndpointSliceOrEndpoint", "cilium/v2::CiliumCIDRGroup", "cilium/v2::CiliumClusterwideNetworkPolicy", "cilium/v2::CiliumEndpoint", "cilium/v2::CiliumNetworkPolicy", "cilium/v2::CiliumNode", "core/v1::Pods", "networking.k8s.io/v1::NetworkPolicy"]
KubeProxyReplacement: True [ens3 10.1.2.226 fe80::f816:3eff:fe38:a6d3 (Direct Routing)]
Host firewall: Disabled
SRv6: Disabled
CNI Chaining: none
CNI Config file: successfully wrote CNI configuration file to /host/etc/cni/net.d/05-cilium.conflist
Cilium: Ok 1.18.4 (v1.18.4-afda2aa9)
NodeMonitor: Listening for events on 2 CPUs with 64x4096 of shared memory
Cilium health daemon: Ok
IPAM: IPv4: 8/254 allocated from 10.240.0.0/24,
Allocated addresses:
10.240.0.107 (kube-system/konnectivity-agent-8lgbh)
10.240.0.140 (health)
10.240.0.166 (kube-system/hubble-ui-b95dbc5fd-46g6z)
10.240.0.169 (router)
10.240.0.198 (kube-system/kube-dns-autoscaler-988cb7bd5-pp547)
10.240.0.202 (kube-system/hubble-relay-9685586c6-lnt69)
10.240.0.69 (kube-system/metrics-server-7587489986-mhrbd)
10.240.0.71 (kube-system/coredns-5979fb97db-2q96m)
IPv4 BIG TCP: Disabled
IPv6 BIG TCP: Disabled
BandwidthManager: Disabled
Routing: Network: Tunnel [vxlan] Host: Legacy
Attach Mode: TCX
Device Mode: veth
Masquerading: IPTables [IPv4: Enabled, IPv6: Disabled]
Clock Source for BPF: ktime
Controller Status: 46/46 healthy
Name Last success Last error Count Message
cilium-health-ep 33s ago never 0 no error
ct-map-pressure 34s ago never 0 no error
daemon-validate-config 26s ago never 0 no error
endpoint-2870-regeneration-recovery never never 0 no error
endpoint-2971-regeneration-recovery never never 0 no error
endpoint-3115-regeneration-recovery never never 0 no error
endpoint-3340-regeneration-recovery never never 0 no error
endpoint-3856-regeneration-recovery never never 0 no error
endpoint-436-regeneration-recovery never never 0 no error
endpoint-869-regeneration-recovery never never 0 no error
endpoint-892-regeneration-recovery never never 0 no error
endpoint-gc 3m35s ago never 0 no error
endpoint-periodic-regeneration 35s ago never 0 no error
ipcache-inject-labels 34s ago never 0 no error
k8s-heartbeat 5s ago never 0 no error
proxy-ports-checkpoint 8m34s ago never 0 no error
resolve-identity-2870 3m34s ago never 0 no error
resolve-identity-2971 3m34s ago never 0 no error
resolve-identity-3115 3m34s ago never 0 no error
resolve-identity-3340 3m33s ago never 0 no error
resolve-identity-3856 3m34s ago never 0 no error
resolve-identity-436 3m34s ago never 0 no error
resolve-identity-869 3m18s ago never 0 no error
resolve-identity-892 3m34s ago never 0 no error
resolve-labels-kube-system/coredns-5979fb97db-2q96m 8m34s ago never 0 no error
resolve-labels-kube-system/hubble-relay-9685586c6-lnt69 8m18s ago never 0 no error
resolve-labels-kube-system/hubble-ui-b95dbc5fd-46g6z 8m34s ago never 0 no error
resolve-labels-kube-system/konnectivity-agent-8lgbh 8m34s ago never 0 no error
resolve-labels-kube-system/kube-dns-autoscaler-988cb7bd5-pp547 8m34s ago never 0 no error
resolve-labels-kube-system/metrics-server-7587489986-mhrbd 8m34s ago never 0 no error
sync-policymap-2870 8m31s ago never 0 no error
sync-policymap-2971 8m31s ago never 0 no error
sync-policymap-3115 8m32s ago never 0 no error
sync-policymap-3340 8m31s ago never 0 no error
sync-policymap-3856 8m31s ago never 0 no error
sync-policymap-436 8m31s ago never 0 no error
sync-policymap-869 8m18s ago never 0 no error
sync-policymap-892 8m31s ago never 0 no error
sync-to-k8s-ciliumendpoint (2870) 14s ago never 0 no error
sync-to-k8s-ciliumendpoint (2971) 14s ago never 0 no error
sync-to-k8s-ciliumendpoint (3856) 14s ago never 0 no error
sync-to-k8s-ciliumendpoint (436) 14s ago never 0 no error
sync-to-k8s-ciliumendpoint (869) 8s ago never 0 no error
sync-to-k8s-ciliumendpoint (892) 14s ago never 0 no error
sync-utime 34s ago never 0 no error
write-cni-file
Modules Health: agent
├── controlplane
│ ├── auth
│ │ ├── observer-job-auth-gc-identity-events [OK] OK (2.73µs) [8] (8m18s, x1)
│ │ ├── observer-job-auth-request-authentication [OK] Primed (8m34s, x1)
│ │ └── timer-job-auth-gc-cleanup [OK] OK (10.04µs) (3m34s, x1)
│ ├── bgp-control-plane
│ │ ├── job-diffstore-events [OK] Running (8m35s, x2)
│ │ ├── observer-job-default-gateway-route-change-tracker [OK] OK (520ns) [71] (8m18s, x1)
│ │ └── observer-job-device-change-device-change-tracker [OK] OK (900ns) [39] (8m18s, x1)
│ ├── cilium-agent-dynamic-config
│ │ └── job-k8s-reflector-cilium-configs-cm-cilium-config-kube-system [OK] 144 upserted, 0 deleted, 144 total objects (8m34s, x1)
│ ├── ciliumenvoyconfig
│ │ ├── job-reconcile [OK] OK, 0 object(s) (8m34s, x3)
│ │ ├── job-refresh [OK] Next refresh in 30m0s (8m34s, x1)
│ │ └── observer-job-node-labels [OK] Primed (8m34s, x1)
│ ├── config-drift-checker
│ │ └── job-drift-checker [OK] Running (8m34s, x1)
│ ├── daemon
│ │ ├── [OK] daemon-validate-config (26s, x9)
│ │ └── job-sync-hostips [OK] Synchronized (34s, x10)
│ ├── dynamic-lifecycle-manager
│ │ ├── job-reconcile [OK] OK, 0 object(s) (8m34s, x3)
│ │ └── job-refresh [OK] Next refresh in 30m0s (8m34s, x1)
│ ├── enabled-features
│ │ └── job-update-config-metric [STOPPED] Waiting for agent config (8m34s, x1)
│ ├── endpoint-api
│ │ ├── job-cni-deletion-queue [STOPPED] Running (8m35s, x1)
│ │ └── job-unlock-lockfile [STOPPED] Running (8m34s, x1)
│ ├── endpoint-manager
│ │ ├── cilium-endpoint-2870 (kube-system/coredns-5979fb97db-2q96m)
│ │ │ ├── cep-k8s-sync [OK] sync-to-k8s-ciliumendpoint (2870) (4s, x53)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x6)
│ │ │ └── policymap-sync [OK] sync-policymap-2870 (8m31s, x1)
│ │ ├── cilium-endpoint-2971 (kube-system/kube-dns-autoscaler-988cb7bd5-pp547)
│ │ │ ├── cep-k8s-sync [OK] sync-to-k8s-ciliumendpoint (2971) (4s, x53)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x6)
│ │ │ └── policymap-sync [OK] sync-policymap-2971 (8m31s, x1)
│ │ ├── cilium-endpoint-3115 (/)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x7)
│ │ │ └── policymap-sync [OK] sync-policymap-3115 (8m32s, x1)
│ │ ├── cilium-endpoint-3340 (/)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x6)
│ │ │ └── policymap-sync [OK] sync-policymap-3340 (8m31s, x1)
│ │ ├── cilium-endpoint-3856 (kube-system/konnectivity-agent-8lgbh)
│ │ │ ├── cep-k8s-sync [OK] sync-to-k8s-ciliumendpoint (3856) (4s, x53)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x6)
│ │ │ └── policymap-sync [OK] sync-policymap-3856 (8m31s, x1)
│ │ ├── cilium-endpoint-436 (kube-system/hubble-ui-b95dbc5fd-46g6z)
│ │ │ ├── cep-k8s-sync [OK] sync-to-k8s-ciliumendpoint (436) (4s, x53)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x6)
│ │ │ └── policymap-sync [OK] sync-policymap-436 (8m31s, x1)
│ │ ├── cilium-endpoint-869 (kube-system/hubble-relay-9685586c6-lnt69)
│ │ │ ├── cep-k8s-sync [OK] sync-to-k8s-ciliumendpoint (869) (8s, x51)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x5)
│ │ │ └── policymap-sync [OK] sync-policymap-869 (8m18s, x1)
│ │ ├── cilium-endpoint-892 (kube-system/metrics-server-7587489986-mhrbd)
│ │ │ ├── cep-k8s-sync [OK] sync-to-k8s-ciliumendpoint (892) (4s, x53)
│ │ │ ├── datapath-regenerate [OK] Endpoint regeneration successful (35s, x7)
│ │ │ └── policymap-sync [OK] sync-policymap-892 (8m31s, x1)
│ │ ├── endpoint-gc [OK] endpoint-gc (3m35s, x2)
│ │ └── job-namespace-updater [OK] Running (8m34s, x1)
│ ├── envoy-proxy
│ │ ├── observer-job-k8s-secrets-resource-events-cilium-secrets [OK] Primed (8m34s, x1)
│ │ └── timer-job-version-check [OK] OK (1.659904ms) (34s, x1)
│ ├── ep-bpf-prog-watchdog
│ │ └── timer-job-ep-bpf-prog-watchdog [OK] OK (787.387µs) (4s, x1)
│ ├── fqdn
│ │ ├── dns-proxy
│ │ │ └── job-proxy-bootstrapper [STOPPED] DNS proxy successfully initialized on port 42401 (8m34s, x1)
│ │ └── namemanager
│ │ ├── job-remove-restored-prefixes [STOPPED] Running (8m35s, x1)
│ │ ├── observer-job-preallocate [OK] Primed (8m35s, x1)
│ │ └── timer-job-dns-garbage-collector-job [OK] OK (20.43µs) (35s, x1)
│ ├── hubble
│ │ ├── job-certloader-server-tls [STOPPED] Running (8m34s, x1)
│ │ └── job-hubble [STOPPED] Running (8m34s, x1)
│ ├── k8s-tables
│ │ ├── job-k8s-reflector-k8s-namespaces-daemon-k8s [OK] 5 upserted, 0 deleted, 5 total objects (8m35s, x1)
│ │ └── job-k8s-reflector-k8s-pods-daemon-k8s [OK] 1 upserted, 0 deleted, 11 total objects (6m27s, x3)
│ ├── l2-announcer
│ │ └── job-l2-announcer-lease-gc [STOPPED] Running (8m34s, x1)
│ ├── loadbalancer-healthserver
│ │ └── job-control-loop [OK] 0 health servers running (6m26s, x23)
│ ├── loadbalancer-maps
│ │ └── timer-job-pressure-metrics-reporter [OK] OK (413.981µs) (3m34s, x1)
│ ├── loadbalancer-reconciler
│ │ ├── job-reconcile [OK] OK, 8 object(s) (6m26s, x21)
│ │ ├── job-refresh [OK] Next refresh in 30m0s (8m34s, x1)
│ │ ├── job-start-reconciler [STOPPED] Started (8m34s, x1)
│ │ └── socket-termination
│ │ └── job-socket-termination [OK] Running (8m34s, x1)
│ ├── loadbalancer-reflectors
│ │ └── k8s-reflector
│ │ ├── job-reflect-pods [OK] Running (8m34s, x1)
│ │ └── job-reflect-services-endpoints [OK] Running (8m34s, x1)
│ ├── loadbalancer-writer
│ │ ├── job-node-addr-reconciler [OK] Running (8m34s, x1)
│ │ └── job-zone-watcher [OK] Running (8m34s, x1)
│ ├── local-redirect-policies
│ │ ├── job-controller [OK] Running (8m34s, x1)
│ │ ├── job-k8s-reflector-localredirectpolicies-lrps [OK] 0 upserted, 0 deleted, 0 total objects (8m34s, x1)
│ │ ├── job-reconcile [OK] OK, 6 object(s) (8m18s, x2)
│ │ └── job-refresh [OK] Next refresh in 30m0s (8m34s, x1)
│ ├── nat-stats
│ │ └── timer-job-nat-stats [OK] OK (292.511µs) (4s, x1)
│ ├── node-manager
│ │ ├── job-backgroundSync [OK] Node validation successful (59s, x7)
│ │ ├── node-checkpoint-writer [OK] node checkpoint written (7m34s, x2)
│ │ └── nodes-add [OK] Node adds successful (8m34s, x2)
│ ├── policy
│ │ ├── observer-job-policy-importer [OK] Primed (8m35s, x1)
│ │ └── timer-job-id-alloc-update-policy-maps [OK] OK (1.470756ms) (8m18s, x1)
│ ├── stale-endpoint-cleanup
│ │ └── job-endpoint-cleanup [STOPPED] Running (8m34s, x1)
│ └── status
│ └── job-probes [OK] Running (8m34s, x1)
├── datapath
│ ├── agent-liveness-updater
│ │ └── timer-job-agent-liveness-updater [OK] OK (34.449µs) (0s, x1)
│ ├── iptables
│ │ ├── ipset
│ │ │ ├── job-ipset-init-finalizer [STOPPED] Running (8m35s, x1)
│ │ │ ├── job-reconcile [OK] OK, 0 object(s) (8m35s, x2)
│ │ │ └── job-refresh [OK] Next refresh in 30m0s (8m35s, x1)
│ │ └── job-iptables-reconciliation-loop [OK] iptables rules full reconciliation completed (8m34s, x1)
│ ├── l2-responder
│ │ └── job-l2-responder-reconciler [OK] Running (8m34s, x1)
│ ├── link-cache
│ │ └── timer-job-sync [OK] OK (267.392µs) (4s, x1)
│ ├── maps
│ │ └── bwmap
│ │ └── timer-job-pressure-metric-throttle [OK] OK (1.85µs) (4s, x1)
│ ├── mtu
│ │ ├── job-endpoint-mtu-updater [OK] Endpoint MTU updated (8m34s, x1)
│ │ └── job-mtu-updater [OK] MTU updated (1500) (8m35s, x1)
│ ├── node-address
│ │ └── job-node-address-update [OK] 10.240.0.169 (primary), fe80::504a:5cff:feef:b7d (primary) (8m34s, x1)
│ ├── orchestrator
│ │ └── job-reinitialize [OK] OK (8m27s, x2)
│ └── sysctl
│ ├── job-reconcile [OK] OK, 20 object(s) (8m31s, x11)
│ └── job-refresh [OK] Next refresh in 2m31.804297164s (67s, x1)
└── infra
├── agent-healthz
│ └── job-agent-healthz-server-ipv4 [OK] Running (8m34s, x1)
├── k8s-synced-crdsync
│ └── job-sync-crds [STOPPED] Running (11m, x1)
├── metrics
│ ├── job-collect [OK] Sampled 24 metrics in 1.694474ms, next collection at 2026-05-23 14:40:04.840469924 +0000 UTC m=+752.908964505 (3m34s, x1)
│ └── timer-job-cleanup [OK] Primed (8m34s, x1)
├── service-resolver
│ └── job-service-reloader-initializer [OK] Running (8m35s, x1)
└── shell
└── job-listener [OK] Listening on /var/run/cilium/shell.sock (8m34s, x1)```Sortie standard simplifié
KVStore: Disabled
Kubernetes: Ok 1.35 (v1.35.2) [linux/amd64]
Kubernetes APIs: ["EndpointSliceOrEndpoint", "cilium/v2::CiliumCIDRGroup", "cilium/v2::CiliumClusterwideNetworkPolicy", "cilium/v2::CiliumEndpoint", "cilium/v2::CiliumNetworkPolicy", "cilium/v2::CiliumNode", "core/v1::Pods", "networking.k8s.io/v1::NetworkPolicy"]
KubeProxyReplacement: True [ens3 10.1.2.226 fe80::f816:3eff:fe38:a6d3 (Direct Routing)]
Host firewall: Disabled
SRv6: Disabled
CNI Chaining: none
CNI Config file: successfully wrote CNI configuration file to /host/etc/cni/net.d/05-cilium.conflist
Cilium: Ok 1.18.4 (v1.18.4-afda2aa9)
NodeMonitor: Listening for events on 2 CPUs with 64x4096 of shared memory
Cilium health daemon: Ok
IPAM: IPv4: 8/254 allocated from 10.240.0.0/24,
Allocated addresses:
10.240.0.107 (kube-system/konnectivity-agent-8lgbh)
10.240.0.140 (health)
10.240.0.166 (kube-system/hubble-ui-b95dbc5fd-46g6z)
10.240.0.169 (router)
10.240.0.198 (kube-system/kube-dns-autoscaler-988cb7bd5-pp547)
10.240.0.202 (kube-system/hubble-relay-9685586c6-lnt69)
10.240.0.69 (kube-system/metrics-server-7587489986-mhrbd)
10.240.0.71 (kube-system/coredns-5979fb97db-2q96m)
IPv4 BIG TCP: Disabled
IPv6 BIG TCP: Disabled
BandwidthManager: Disabled
Routing: Network: Tunnel [vxlan] Host: Legacy
Attach Mode: TCX
Device Mode: veth
Masquerading: IPTables [IPv4: Enabled, IPv6: Disabled]
Clock Source for BPF: ktime
Controller Status: 46/46 healthy
On voit par exemple qu’on a la version 1.18.4 de Cilium (la dernière version est la 1.19.4).
Modification de la configuration de Cilium#
Comme on l’a vu dans la partie précédente, Cilium est géré par ArgoCD, il n’est donc pas possible de changer la configMap cilium-config. Alors comment on fait ?
En overridant les valeurs de la configMap !
CiliumNodeConfig#
CiliumNodeConfig est une CRD créée par Cilium qui a exactement ce but :

Comme son nom l’indique on peut overrider pour certains nœuds en particulier. Mais pour 95% des cas (estimation au doigt mouillé), on sélectionne tous les nœuds.
Activer Wireguard#
Wireguard est un VPN qui permet de chiffrer les connexions entre les nœuds et les pods. Pour des contraintes de sécurité, il peut être intéressant de configurer cela. Voyons comme faire cela. On peut commencer par lire la documentation. Et particulièrement cette ligne :
WireGuard may also be enabled manually by setting the
enable-wireguard: trueoption in the CiliumConfigMapand restarting each Cilium agent instance.
Ainsi il suffit de rajouter l’option enable-wireguard: true. Dans CiliumNodeConfig :
apiVersion: cilium.io/v2
kind: CiliumNodeConfig
metadata:
namespace: kube-system
name: enable-wireguard
spec:
nodeSelector: {}
defaults:
enable-wireguard: "true"kubectl apply -f wireguard.yamlIl faut ensuite redémarrer les agents cilium pour que la configuration puisse être pris en compte :
kubectl -n kube-system rollout restart daemonset ciliumVérifions que c’est bien installé :
kubectl exec -it ds/cilium -n kube-system -c cilium-agent -- cilium status 1KVStore: Disabled
2Kubernetes: Ok 1.35 (v1.35.2) [linux/amd64]
3Kubernetes APIs: ["EndpointSliceOrEndpoint", "cilium/v2::CiliumCIDRGroup", "cilium/v2::CiliumClusterwideNetworkPolicy", "cilium/v2::CiliumEndpoint", "cilium/v2::CiliumNetworkPolicy", "cilium/v2::CiliumN
4ode", "core/v1::Pods", "networking.k8s.io/v1::NetworkPolicy"]
5KubeProxyReplacement: True [ens3 10.1.2.226 fe80::f816:3eff:fe38:a6d3 (Direct Routing)]
6Host firewall: Disabled
7SRv6: Disabled
8CNI Chaining: none
9CNI Config file: successfully wrote CNI configuration file to /host/etc/cni/net.d/05-cilium.conflist
10Cilium: Ok 1.18.4 (v1.18.4-afda2aa9)
11NodeMonitor: Listening for events on 2 CPUs with 64x4096 of shared memory
12Cilium health daemon: Ok
13IPAM: IPv4: 8/254 allocated from 10.240.0.0/24,
14IPv4 BIG TCP: Disabled
15IPv6 BIG TCP: Disabled
16BandwidthManager: Disabled
17Routing: Network: Tunnel [vxlan] Host: Legacy
18Attach Mode: TCX
19Device Mode: veth
20Masquerading: IPTables [IPv4: Enabled, IPv6: Disabled]
21Controller Status: 53/53 healthy
22Proxy Status: OK, ip 10.240.0.169, 0 redirects active on ports 10000-20000, Envoy: external
23Global Identity Range: min 256, max 65535
24Hubble: Ok Current/Max Flows: 3601/4095 (87.94%), Flows/s: 32.53 Metrics: Disabled
25Encryption: Wireguard [NodeEncryption: Disabled, cilium_wg0 (Pubkey: g18YQcBTUOCgKv4T1NtFxTdgcoTcrYWOA2e9NYiFGxk=, Port: 51871, Peers: 1)]
26Cluster health: 2/2 reachable (2026-05-23T15:27:19Z) (Probe interval: 1m36.566274746s)
27Name IP Node Endpoints
28Modules Health: Stopped(12) Degraded(0) OK(87)Pour en savoir plus, n’hésitez pas à aller voir dans la documentation officielle.
J’espère que ce petit voyage dans le Cilium d’OVH vous a plu !
Est-ce qu’il y a un autre Kubernetes managé dont vous voudriez voir son intégration avec Cilium ?
Vais-je écrire le livre 50 nuances de Cilium managé ? Suspense…




