I need to set an environment variable in my container to the IP address provided by a service that is already running in my cluster.
I had this working with the following:
spec:
containers:
- name: new_container
image: my_image:latest
env:
- name: ENV_VAR
value: k8s_service_nameI modified the spec to provide the container all host network traffic via:
spec:
hostNetwork: true
containers:
- name: new_container
image: my_image:latest
env:
- name: ENV_VAR
value: k8s_service_nameHowever, the container no longer seems to understand what 'k8s_service_name' is, so I need to pass the actual IP value of that service.
The address I need is available in the container as K8S_SERVICE_NAME_SERVICE_HOST=255.255.255.255
But for the application to work I need to make ENV_VAR=255.255.255.255
The following did not workvalue: $K8S_SERVICE_NAME_SERVICE_HOSTvalue: $K8S_SERVICE_NAME_SERVICE_HOSTvalue: $(K8S_SERVICE_NAME_SERVICE_HOST)value: {{K8S_SERVICE_NAME_SERVICE_HOST}}value: {{env.K8S_SERVICE_NAME_SERVICE_HOST}}
Expected:
>>> printenv | grep ENV_VAR
ENV_VAR=255.255.255.255Actual Results:
>>> printenv | grep ENV_VAR
ENV_VAR=$K8S_SERVICE_NAME_SERVICE_HOSTor errors involving the value not converting from yaml to json properly.
A solution like below would be
valueFrom:
fieldRef:
fieldName: k8s_service_name.clusterIPUse: value: $(K8S_SERVICE_NAME_SERVICE_HOST)
To get the service ip. (use parenthesis)