{"record":{"id":"d35a5fa3a0408c22","repo":"cilium/cilium","slug":"ciliumnode-for-own-node-is-not-available","errorCode":null,"errorMessage":"CiliumNode for own node is not available","messagePattern":"CiliumNode for own node is not available","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/ipam/crd.go","lineNumber":555,"sourceCode":"\t_, err = n.clientset.CiliumV2().CiliumNodes().UpdateStatus(context.TODO(), node, metav1.UpdateOptions{})\n\n\treturn err\n}\n\n// addAllocator adds a new CRD allocator to the node store\nfunc (n *nodeStore) addAllocator(allocator *crdAllocator) {\n\tn.mutex.Lock()\n\tn.allocators = append(n.allocators, allocator)\n\tn.mutex.Unlock()\n}\n\n// allocate checks if a particular IP can be allocated or return an error\nfunc (n *nodeStore) allocate(addr netip.Addr) (*ipamTypes.AllocationIP, error) {\n\tn.mutex.RLock()\n\tdefer n.mutex.RUnlock()\n\n\tif n.ownNode == nil {\n\t\treturn nil, fmt.Errorf(\"CiliumNode for own node is not available\")\n\t}\n\n\tif n.ownNode.Spec.IPAM.Pool == nil {\n\t\treturn nil, fmt.Errorf(\"No IPs available\")\n\t}\n\n\tif n.isIPInReleaseHandshake(addr.String()) {\n\t\treturn nil, fmt.Errorf(\"IP not available, marked or ready for release\")\n\t}\n\n\tipInfo, ok := n.ownNode.Spec.IPAM.Pool[addr.String()]\n\tif !ok {\n\t\treturn nil, NewIPNotAvailableInPoolError(addr)\n\t}\n\n\treturn &ipInfo, nil\n}\n","sourceCodeStart":537,"sourceCodeEnd":573,"githubUrl":"https://github.com/cilium/cilium/blob/ac7b90affa4baf0642e6685319d56907b3a73a6d/pkg/ipam/crd.go#L537-L573","documentation":"In CRD-backed IPAM modes (crd, aws-crd, azure-crd, alibabacloud-crd), the nodeStore keeps the node's own CiliumNode custom resource in n.ownNode. IP allocation requests are answered from that resource; if the local CiliumNode object has not been fetched/populated yet, allocate() cannot validate the requested IP and returns this error. It is a startup/propagation condition, not a data problem with the IP itself.","triggerScenarios":"Any call path reaching nodeStore.allocate (e.g. ipam.Allocate / endpoint restore) before the CiliumNode CR for this node has been listed/watched from the Kubernetes API, leaving n.ownNode nil.","commonSituations":"Cilium agent just started and CRD informer cache is not synced yet; the CiliumNode CR for the node does not exist (operator disabled or RBAC blocks reading CiliumNode resources); CRD custom-resource discovery fails so the store never populates.","solutions":["Retry the allocation once the agent finishes startup; the error is typically transient until the CiliumNode is cached.","Verify a CiliumNode resource exists for this node: kubectl get ciliumnode <node-name> -n kube-system.","Check cilium-operator logs/RBAC: it must have permission to create and update CiliumNode resources.","Confirm the CRD 'ciliumnodes.cilium.io' is registered in the cluster (kubectl get crd | grep ciliumnode)."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// check the CiliumNode exists before issuing allocations\n_, err := ciliumClientset.CiliumV2().CiliumNodes().Get(ctx, nodeName, metav1.GetOptions{})\nif apierrors.IsNotFound(err) {\n    return fmt.Errorf(\"CiliumNode %s missing; allocations will fail until created\", nodeName)\n}","typeGuard":"func ownNodeReady(s *nodeStore) bool {\n    s.mutex.RLock()\n    defer s.mutex.RUnlock()\n    return s.ownNode != nil\n}","tryCatchPattern":"alloc, err := ipam.Allocate(ip, owner)\nif err != nil && strings.Contains(err.Error(), \"CiliumNode for own node is not available\") {\n    // transient during startup: backoff and retry after CRD cache sync\n    return retryAfterSync(err)\n}","preventionTips":["Ensure cilium-operator is running and has RBAC for CiliumNode resources.","Verify the ciliumnodes CRD is installed before rolling out agents.","Delay workload scheduling until Cilium reports its local CiliumNode as ready."],"tags":["ipam","kubernetes","crd","cilium"],"backgroundTag":"ciliumnode-not-available","analyzedSha":"ac7b90affa4baf0642e6685319d56907b3a73a6d","analyzedAt":"2026-08-31T18:27:15.868Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}