首页 > 解决方案 > 可以在 prestop 挂钩中使用的有效 http 请求是什么?

问题描述

根据以下文档,“HTTP - 针对容器上的特定端点执行 HTTP 请求”这一行。

https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#hook-handler-implementations

使用 preStop 钩子,我尝试 curl 运行以下脚本,但它没有返回任何内容。prestop 钩子是否仅限于使用容器内的 Http 请求,即 localhost?

echo "test curl" > /proc/1/fd/1
echo $(curl -s /dev/null http://google.com) > /proc/1/fd/1
echo $(curl -s -o /dev/null -w "%{http_code}" http://google.com) > /proc/1/fd/1

标签: kuberneteskubernetes-pod

解决方案


不,据我所知,您不仅限于使用preStop's httpGet容器。您的硬币容器应该可以访问您请求的网址等。所以在您的情况下,您应该可以访问谷歌。

我可以知道你到底想达到什么目标吗?您是否尝试将curl输出重定向到proc with PID:1

curl当我指定重定向到 STDOUT时,您的命令在容器(具有自身)中完美运行,我的意思是/proc/self/fd/1

kubectl exec -ti curl -- bash
root@curl:/# echo $(curl -s -o /dev/null -w "%{http_code}" http://google.com) > /proc/self/fd/1
301

顺便说一句,您可以使用exec而不是httpGetin preStop,您可以在其中组合echocurl

Yaml 将类似于

lifecycle:
  preStop:
    exec:
      command: ["curl", "-XPOST", "-s", "http://google.com" > "/proc/1/fd/1"]

command根据您的需要进行调整。我还没有测试过,在飞行中写的


推荐阅读