Skip to content

Issue: Panic Due to Invalid Memory Address or Nil Pointer Dereference in OpenstackMachine Reconciliation #2676

@Mehdouch777

Description

@Mehdouch777

/kind bug

What steps did you take and what happened:
Creating the below K0smotron cluster with Openstack CAPO infrastructure provider

# k0smotron-cluster-with-capo.yaml
apiVersion: v1
data:
  clouds.yaml: <secret_base64_encoded>
kind: Secret
metadata:
  labels:
    clusterctl.cluster.x-k8s.io/move: "true"
  name: cluster-openstack-cloud-config
  namespace: k0smotron-test-ns
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: database-credentials
  namespace: k0smotron-test-ns
type: Opaque
data:
  K0SMOTRON_KINE_DATASOURCE_URL: <secret_base64_encoded>
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
  name: cluster-openstack
  namespace: k0smotron-test-ns
spec:
  clusterNetwork:
    serviceDomain: cluster.local
  controlPlaneRef:
    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    kind: K0smotronControlPlane # This tells that k0smotron should create the controlplane
    name: cluster-openstack
  infrastructureRef:
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: OpenStackCluster  # This tells that CAPO should create the the worker
    name: cluster-openstack
---
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: K0smotronControlPlane # This is the config for the controlplane
metadata:
  name: cluster-openstack
  namespace: k0smotron-test-ns
spec:
  replicas: 1
  version: v1.33.3-k0s.0
  persistence:
    type: empty
      #persistentVolumeClaim:
      #apiVersion: v1
      #kind: PersistentVolumeClaim
      #metadata:
      #  name: cluster-openstack-pvc
      #spec:
      #  accessModes:
      #    - ReadWriteOnce
      #  volumeMode: Filesystem
      #  resources:
      #    requests:
      #      storage: 10Gi
  service:
    type: NodePort
  kineDataSourceSecretName: database-credentials
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: OpenStackCluster
metadata:
  name: cluster-openstack
  namespace: k0smotron-test-ns
  annotations:
    cluster.x-k8s.io/managed-by: k0smotron # This marks the base infra to be self managed. The value of the annotation is irrelevant, as long as there is a value.
spec:
  apiServerLoadBalancer:
    enabled: false
  disableAPIServerFloatingIP: true
  disableExternalNetwork: true
  apiServerFixedIP: ""
  network:
    id: <network_id>
  subnets:
  - id: <subnet_id>
  identityRef:
    name: cluster-openstack-cloud-config
    cloudName: openstack
  managedSecurityGroups:
    allowAllInClusterTraffic: false
    allNodesSecurityGroupRules:
    - remoteManagedGroups:
      - worker
      direction: ingress
      etherType: IPv4
      name: BGP
      portRangeMin: 179
      portRangeMax: 179
      protocol: "tcp"
      description: "Allow BGP among workers"
    - remoteManagedGroups:
      - worker
      direction: ingress
      etherType: IPv4
      name: IP-in-IP
      protocol: "4"
      description: "Allow IP-in-IP among workers"
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
  labels:
    cluster.x-k8s.io/cluster-name: cluster-openstack
  name: cluster-openstack-worker-vms
  namespace: k0smotron-test-ns
spec:
  clusterName: cluster-openstack
  replicas: 2
  selector:
    matchLabels: {}
  template:
    metadata:
      labels:
        cluster.x-k8s.io/cluster-name: cluster-openstack
    spec:
      clusterName: cluster-openstack
      failureDomain: zone-1
      bootstrap:
        configRef:
          apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
          kind: K0sWorkerConfigTemplate
          name: cluster-openstack-machine-config
      infrastructureRef:
        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
        kind: OpenStackMachineTemplate
        name: cluster-openstack-worker-vm-template
---
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: K0sWorkerConfigTemplate
metadata:
  name: cluster-openstack-machine-config
  namespace: k0smotron-test-ns
spec:
  template:
    spec:
      version: v1.33.3-k0s.0
      args: 
        - --enable-cloud-provider
        - --kubelet-extra-args="--cloud-provider=external"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: OpenStackMachineTemplate
metadata:
  name: cluster-openstack-worker-vm-template
  namespace: k0smotron-test-ns
spec:
  template:
    spec:
      flavor: R2-Generic-8-16
      image:
        id: <image_id> 
      rootVolume:
        sizeGiB: 100
      securityGroups:
      - filter:
          name: default
      - filter:
          name: <sec_group>
      sshKeyName: <key_name>
      identityRef:
        name: cluster-openstack-cloud-config
        cloudName: openstack
        region: RegionOne
      ports:
      - network:
          id: <network_id>

Stack trace from CAPO logs

E0901 12:18:47.098071 1 controller.go:316] "Reconciler error" err="panic: runtime error: invalid memory address or nil pointer dereference [recovered]" controller="openstackmachine" controllerGroup="infrastructure.cluster.x-k8s.io" controllerKind="OpenStackMachine" OpenStackMachine="k0smotron-test-ns/cluster-openstack-worker-vms-dbr9n-pk49z" namespace="k0smotron-test-ns" name="cluster-openstack-worker-vms-dbr9n-pk49z" reconcileID="5280ad2e-127d-48a9-b366-3de5a519c970"
I0901 12:18:49.629581 1 openstackmachine_controller.go:361] "Reconciling Machine" controller="openstackmachine" controllerGroup="infrastructure.cluster.x-k8s.io" controllerKind="OpenStackMachine" OpenStackMachine="k0smotron-test-ns/cluster-openstack-worker-vms-dbr9n-xv4qs" namespace="k0smotron-test-ns" name="cluster-openstack-worker-vms-dbr9n-xv4qs" reconcileID="f2b35f20-292a-498c-b503-870a6bdc3e0c" openStackMachine="cluster-openstack-worker-vms-dbr9n-xv4qs" machine="cluster-openstack-worker-vms-dbr9n-xv4qs" cluster="cluster-openstack" openStackCluster="cluster-openstack"
E0901 12:18:49.630027 1 signal_unix.go:917] "Observed a panic" controller="openstackmachine" controllerGroup="infrastructure.cluster.x-k8s.io" controllerKind="OpenStackMachine" OpenStackMachine="k0smotron-test-ns/cluster-openstack-worker-vms-dbr9n-xv4qs" namespace="k0smotron-test-ns" name="cluster-openstack-worker-vms-dbr9n-xv4qs" reconcileID="f2b35f20-292a-498c-b503-870a6bdc3e0c" panic="runtime error: invalid memory address or nil pointer dereference" panicGoValue=""invalid memory address or nil pointer dereference"" stacktrace=<
goroutine 391 [running]:
k8s.io/apimachinery/pkg/util/runtime.logPanic({0x24cb1f0, 0xc000941e60}, {0x1e33ba0, 0x371dcb0})
/go/pkg/mod/k8s.io/[email protected]/pkg/util/runtime/runtime.go:107 +0xbc
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile.func1()
/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:105 +0x112
panic({0x1e33ba0?, 0x371dcb0?})
/usr/local/go/src/runtime/panic.go:791 +0x132
sigs.k8s.io/cluster-api-provider-openstack/controllers.(*OpenStackMachineReconciler).getOrCreateMachineServer(0xc000014420, {0x24cb1f0, 0xc000941e60}, 0xc000a81608, 0xc000831408, 0xc000831908)
/workspace/controllers/openstackmachine_controller.go:591 +0x35a
sigs.k8s.io/cluster-api-provider-openstack/controllers.(*OpenStackMachineReconciler).reconcileMachineServer(0x24d1de8?, {0x24cb1f0?, 0xc000941e60?}, 0xc001104c30, 0x13?, 0x0?, 0x0?)
/workspace/controllers/openstackmachine_controller.go:549 +0x3d
sigs.k8s.io/cluster-api-provider-openstack/controllers.(*OpenStackMachineReconciler).reconcileNormal(0xc000014420, {0x24cb1f0, 0xc000941e60}, 0xc001104c30, {0xc001047f20, 0x23}, 0xc000a81608, 0xc000831908, 0xc000831408)
/workspace/controllers/openstackmachine_controller.go:363 +0x178
sigs.k8s.io/cluster-api-provider-openstack/controllers.(*OpenStackMachineReconciler).Reconcile(0xc000014420, {0x24cb1f0, 0xc000941e60}, {{{0xc0009a9ad0?, 0xc000941e60?}, {0xc00114c210?, 0x0?}}})
/workspace/controllers/openstackmachine_controller.go:161 +0xbd8
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile(0xc000c94500?, {0x24cb1f0?, 0xc000941e60?}, {{{0xc0009a9ad0?, 0x0?}, {0xc00114c210?, 0x0?}}})
/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:116 +0xbf
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler(0x24e4fa0, {0x24cb228, 0xc000671540}, {{{0xc0009a9ad0, 0x11}, {0xc00114c210, 0x28}}})
/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:303 +0x3a5
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem(0x24e4fa0, {0x24cb228, 0xc000671540})
/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:263 +0x20e
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2.2()
/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:224 +0x85
created by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2 in goroutine 128
/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:220 +0x510

What did you expect to happen:

Machines created

Environment:

  • Cluster API Provider OpenStack version (Or git rev-parse HEAD if manually built):
  • Cluster-API version: 0.12.4
  • OpenStack version:
  • Minikube/KIND version: RKE2 1.32.5
  • Kubernetes version (use 1.32):
  • OS (e.g. from **PRETTY_NAME="Ubuntu 22.04.2 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.2 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy**):

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugCategorizes issue or PR as related to a bug.

    Type

    No type

    Projects

    Status

    Inbox

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions