FlowFuse / driver-k8s

Kubernetes container driver for FlowFuse
Apache License 2.0
2 stars 3 forks source link

Custom k8s environment variables for Node-RED applications #166

Open anthonyjsargeant opened 1 week ago

anthonyjsargeant commented 1 week ago

Description

Presently, Node-RED apps in k8s have a set of environment variables that cannot be added to. This makes setting custom environment variables impossible without using k8s webhooks.

For example, in our use case, we want to be able to set a HOST_IP environment variable that makes use of k8s fieldRef to get the IP address of the node that the pod is running on. This is because we have a node-level Open Telemetry collector running on port 4317 accessible via the node's IP address. By using this functionality, we would always get the right IP address regardless of the node that a Node-RED app is running on.

An example of additional environment variables for a container's env setting is given below:

    - name: OTEL_SERVICE_NAME
       value: <Node-RED Application Name>
    - name: HOST_IP
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: status.hostIP
    - name: OTEL_EXPORTER_ENDPOINT
      value: http://$(HOST_IP):4317

Requested By

joepavitt commented 2 days ago

@hardillb can you provide some more details on the work required here? M-3 label suggests a couple of days of work?

hardillb commented 2 days ago

@joepavitt this needs some exploratory work, mainly about what values we would possibly want to expose and where we would expose this (e.g. in the UI or just as a driver level config options) and finally if we want to do this at all.

As mentioned there is an external way to approach this (k8s webhooks) but it is a little more involved.

List of possible fields: https://kubernetes.io/docs/concepts/workloads/pods/downward-api/