kubernetes liveliness is un-authorized

2/9/2020

I am trying to define a livenessProbe by passing the value of httpheader as secret. but I am getting un-authorized 401.

  - name: mycontainer
    image: myimage
    env:
      - name: MY_SECRET
        valueFrom:
          secretKeyRef:
            name: actuatortoken
            key: token
    livenessProbe:
        httpGet:
          path: /test/actuator/health
          port: 9001
          httpHeaders:
          - name: Authorization
            value: $MY_SECRET

My secret as follows:

apiVersion: v1
kind: Secret
metadata:
  name: actuatortoken
type: Opaque
stringData:
  token: Bearer <token>

If I pass the same with actual value as below... it works as expected

  - name: mycontainer
    image: myimage
    livenessProbe:
        httpGet:
          path: /test/actuator/health
          port: 9001
          httpHeaders:
          - name: Authorization
            value: Bearer <token>

Any help is highly appreciated.

-- magic
kubernetes
spring
spring-boot

1 Answer

2/17/2020

What you have will put the literal string $MY_SECRET as the Authorization header which won't work.

You don't want to put the actual value of the secret in your Pod/Deployment/whatever YAML since you don't want plaintext credentials in there.

3 options I can think of:

a) change your app to not require authentication for the /test/actuator/health endpoint;

b) change your app to not require authentication when the requested host is 127.0.0.1 and update the probe configuration to use that as the host;

c) switch from an HTTP probe to a command probe and write the curl/wget command yourself

Answer is being posted as Community wiki as it's from Amit Kumar Gupta comments.

-- mWatney
Source: StackOverflow