Usage

The operator creates a Listener for each mounted CSI volume with storageClassName: listeners.stackable.tech.

A minimal exposed Pod looks like this:

---
apiVersion: v1
kind: Pod
metadata:
  name: example-public-pod
spec:
  volumes:
    - name: listener
      ephemeral: (1)
        volumeClaimTemplate:
          metadata:
            annotations:
              listeners.stackable.tech/listener-class: public (2)
          spec:
            storageClassName: listeners.stackable.tech
            accessModes:
              - ReadWriteMany
            resources:
              requests:
                storage: "1"
  containers:
    - name: nginx
      image: nginx
      ports:
        - name: http
          containerPort: 80
      volumeMounts:
        - name: listener
          mountPath: /listener (3)
1 Defines an ephemeral listener, meaning that it will automatically be deleted when the Pod is.
2 Defines that we want to expose this pod by automatically creating a service according to the ListenerClass public.
3 Mounts metadata about the Listener (such as the port mapping and IP address) into /listener. The volume must be mounted, even if this data is never used by the Pod itself.

The exact ListenerClass is going to depend on the Kubernetes environment, but should often look like this for public clouds:

---
apiVersion: listeners.stackable.tech/v1alpha1
kind: ListenerClass
metadata:
  name: public
spec:
  serviceType: LoadBalancer

Or like this for on-premise environments:

---
apiVersion: listeners.stackable.tech/v1alpha1
kind: ListenerClass
metadata:
  name: public
spec:
  serviceType: NodePort