【问题标题】:curl gives 403 error while trying to run exec command on kubenetes podcurl 尝试在 kubernetes pod 上运行 exec 命令时出现 403 错误
【发布时间】:2021-11-19 09:38:24
【问题描述】:

我正在尝试使用 Kubernetes API 在容器内执行命令。当命令使用 kubectl 工作时

kubectl exec shell-demo -- bash -c env

但在使用 curl 使用 Kubernetes Web API(kubectl 代理)时同样会出现 403 错误。

$ curl -k -v POST  http://192.168.1.44:5443/api/v1/namespaces/mynamespace/pods/shell-demo/exec?command=bash&command=-c&command=env&container=nginx&stderr=true&stdout=true
    [1] 405247
    [2] 405248
    [3] 405249
    [4] 405250
    [5] 405251
    [2]   Done                    command=-c
    [3]   Done                    command=env
    [4]-  Done                    container=nginx
    [farooq@farooq-pc ansible-vbox-vagrant-kubernetes]$ * Could not resolve host: POST
    * Closing connection 0
    curl: (6) Could not resolve host: POST
    *   Trying 192.168.1.44:5443...
    * Connected to 192.168.1.44 (192.168.1.44) port 5443 (#1)
    > GET /api/v1/namespaces/mynamespace/pods/shell-demo/exec?command=bash HTTP/1.1
    > Host: 192.168.1.44:5443
    > User-Agent: curl/7.79.1
    > Accept: */*
    >
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 403 Forbidden
    < Content-Type: text/plain; charset=utf-8
    < X-Content-Type-Options: nosniff
    < Date: Thu, 18 Nov 2021 19:54:34 GMT
    < Content-Length: 10
    <

Forbidden

【问题讨论】:

  • 您确定在尝试curl -k -v -X POST &lt;host+commands&gt; 时遇到同样的问题curl: (6) Could not resolve host: POST?这可能表明您对curl 没有问题,但对 DNS 没有问题。您的 DNS 设置是什么?
  • 我在命令中直接使用 ip。不需要 dns
  • You have got curl(6) error: 这个错误主要是由于DNS设置错误或服务器设置错误造成的。你确定你的请求没有错字吗?当您使用curl 时,请从下面的答案中粘贴输出/错误消息。

标签: kubernetes


【解决方案1】:

你的 curl 命令看起来不对。在 POST 前使用 -X 试试,如下所示:curl -k -v -X POST http://192.168.1.44:5443/api/v1/namespaces/mynamespace/pods/shell-demo/exec?command=bash&amp;command=-c&amp;command=env&amp;container=nginx&amp;stderr=true&amp;stdout=true 还要确保您是否需要 POST,因为您不添加任何数据(-d mypostbody),它可能是一个简单的 GET 请求,其中包含 urlencoded-data,具体取决于您的 API 端点。

【讨论】:

  • 我尝试了您提供的 POST 和 GET 命令,但得到了同样的错误。 curl -k -v -X GET 192.168.1.44:5443/api/v1/namespaces/mynamespace/pods/shell-demo/… 有没有关于 URL 编码数据的命令示例?
  • url 编码的数据可以在你的 url 中手动附加 ?key=value 在一个简单的 GET 上,确保你使用正确的数据传输 GET 或 POST 和 urlencoded 数据 https://?key=val&key2=val2 在 url 中或 urlencoded 数据(如 post body 数据中的 key=val&key2=val2...),这取决于您的 API 端点
  • 如果 GET 是您正在寻找的内容,您可以完全删除 -X GET
  • 解决方案是使用WebSockets。而且 curl 不支持它们。我认为我们无法使用 curl 解决此问题。
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多