首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有密码的livenessProbe在kubernetes中不起作用

带有密码的livenessProbe在kubernetes中不起作用
EN

Stack Overflow用户
提问于 2020-02-05 21:35:58
回答 2查看 4.1K关注 0票数 7

我正在尝试在kubernetes deployment yaml文件中传递livenessProbe来执行我的应用程序的运行状况。因此,我创建了一个带有令牌值和传递的秘密,如下所示

代码语言:javascript
复制
      livenessProbe:
        httpGet:
          path: test/actuator/health
          port: 9001
          httpHeaders:
          - name: Authorization
            valueFrom:
              secretKeyRef:
                name: actuator-token
                value: token

但是我得到了下面的错误

error: error validating "deployment.yaml": error validating data: [ValidationError(Deployment.spec.template.spec.containers[0].livenessProbe.httpGet.httpHeaders[0]): unknown field "valueFrom" in io.k8s.api.core.v1.HTTPHeader, ValidationError(Deployment.spec.template.spec.containers[0].livenessProbe.httpGet.httpHeaders[0]): missing required field "value" in io.k8s.api.core.v1.HTTPHeader, ValidationError(Deployment.spec.template.spec.containers[0].readinessProbe.httpGet.httpHeaders): invalid type for io.k8s.api.core.v1.HTTPGetAction.httpHeaders: got "map", expected "array"]; if you choose to ignore these errors, turn validation off with --validate=false

敬请建议并感谢您的帮助。

另外,让我们知道他们处理令牌的更好方法,因为我不想在我的部署yaml文件中直接提供令牌值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-05 22:32:09

httpHeaders仅支持value,而name字段不处理valueFrom

代码语言:javascript
复制
$ kubectl explain pod.spec.containers.livenessProbe.httpGet.httpHeaders

KIND:     Pod
VERSION:  v1

RESOURCE: httpHeaders <[]Object>

DESCRIPTION:
     Custom headers to set in the request. HTTP allows repeated headers.

     HTTPHeader describes a custom header to be used in HTTP probes

FIELDS:
   name <string> -required-
     The header field name

   value        <string> -required-
     The header field value

您可以尝试使用环境变量,如下所示。

代码语言:javascript
复制
spec:
  containers:
  - name: mycontainer
    image: myimage
    env:
      - name: MY_SECRET
        valueFrom:
          secretKeyRef:
            name: actuator-token
            key: token
    livenessProbe:
        httpGet:
          path: test/actuator/health
          port: 9001
          httpHeaders:
          - name: Authorization
            value: $SECRET
票数 6
EN

Stack Overflow用户

发布于 2020-05-06 18:36:38

不确定@DT答案是否有效,没有该功能的文档。

另外,我做了一些测试,下面的例子对我不起作用:

代码语言:javascript
复制
spec:
  containers:
  - name: mycontainer
    image: myimage
    env:
      - name: TOKEN
        value: '12345'
    livenessProbe:
      httpGet:
        path: /v1/health
        port: 80
        httpHeaders:
        - name: Authorization
          value: Apikey $TOKEN

我的应用程序得到了401,因为它不能用env变量代替头文件的值。我甚至用单/双引号和括号尝试了许多其他选项,但都不起作用。

否则,您可以使用exec而不是httpGet,但它需要在您的docker镜像中安装curl。

代码语言:javascript
复制
spec:
  containers:
  - name: mycontainer
    image: myimage
    env:
      - name: TOKEN
        value: '12345'
    livenessProbe:
      exec:
        command:
        - bash
        - -c
        - 'curl --fail http://localhost/v1/health --header "Authorization: Apikey $TOKEN"'
    initialDelaySeconds: 30
    periodSeconds: 15

如果你想从你的秘密中使用valueFrom,你不需要在容器中解码变量。我已经被解码了。

如果您不能将curl包添加到您的映像中,最好考虑基于您的应用程序开发的语言编写自定义脚本。下面是js:https://blog.sixeyed.com/docker-healthchecks-why-not-to-use-curl-or-iwr/的示例

另外,检查这个问题,有一个类似的答案How to use basic authentication in a HTTP liveness probe in Kubernetes?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60077057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档