【问题标题】:kubectl exec does not work with kubectl proxykubectl exec 不适用于 kubectl 代理
【发布时间】:2020-06-02 13:12:19
【问题描述】:

我想执行kubectl exec 命令并连接到一个容器,这样我就可以在它上面执行一些命令。 我已使用以下命令设置代理:

kubectl proxy -p=8080 --kubeconfig=/directory_path/remote-kubeconfig &

代理开始运行。我尝试执行kubectl exec 命令:

kubectl exec -it <pod> --namespace=<namespace> -c <container> -- ls -l

我收到以下错误:

error: unable to upgrade connection: <h3>Unauthorized</h3>

在执行kubectl exec 命令时我错过了什么吗?请帮忙。

【问题讨论】:

  • 可以连接kubernetes集群吗?例如。你可以叫“kubectl get nodes”吗?
  • 是的,我可以运行“kubectl get nodes”。问题在于运行“kubectl exec”命令。
  • 你能找到kubectl logs $podname
  • 是的,我可以成功运行以下命令。 kubectl describe pods &lt;pod-name&gt; --namespace &lt;namespace-name&gt;kubectl logs &lt;pod-name&gt; -c &lt;container-name&gt; --namespace &lt;namespace-name&gt;

标签: docker kubernetes kubectl


【解决方案1】:

我找到了解决这个问题的方法,但不是很好。

我发出了--disable-filterkubectl proxy 命令。之后,我可以成功执行kubectl exec 命令。

但是当我使用--disable-filter时,它很容易出现漏洞。 一条消息Request filter disabled, your proxy is vulnerable to XSRF attacks, please be cautious--disable-filter 一起显示。

所以,我认为这不是一个好的解决方案。

如果有人知道此问题的更好解决方案,请告诉我。

【讨论】:

    【解决方案2】:

    默认情况下,kubectl proxy 拒绝匹配 ^/api/./pods/./exec 的 API 命令。

    为了“绕过”你需要做的就是用适当的标志开始kubectl proxy

    kubectl proxy --port 8080 --reject-paths "^/api/./pods/./attach"

    当然,这会带来安全风险,任何有权访问您的代理的人现在都可以执行到集群上的任何 pod。

    如果您确实需要在生产环境中执行此操作,我强烈建议您使用 RBAC 授权限制代理可以访问的内容 - 将代理作为具有 ServiceAccount 的部署运行。

    有关详细信息,请参阅:

    https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#proxy https://kubernetes.io/docs/reference/access-authn-authz/rbac/

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 2018-10-06
      • 2020-08-04
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多