【问题标题】:Minikube: kubectl doesn't use provided token permissionsMinikube:kubectl 不使用提供的令牌权限
【发布时间】:2020-08-03 15:29:32
【问题描述】:

使用 minikube,在运行以下命令时:

kubectl -v=11 --kubeconfig /dev/null --insecure-skip-tls-verify -s http://localhost:8001 --token "invalid" -n namespace get pods

当我不想要一个答案时,我有一个答案。我不知道它是如何被授权的。此外,如果我使用具有特定权限的有效令牌,则不会使用这些令牌。

kubectl --token=$TOKEN doesn't run with the permissions of the token 没有回答我的问题,因为我指定使用 /dev/null 作为配置文件。

有什么想法吗?

【问题讨论】:

  • 我得到 401 这个命令是预期的......我不在 minikube 上
  • 为什么不使用kube-proxy
  • 看起来你正在使用kubectl proxy(猜测是因为 localhost:8001)。你确定吗? @Neok
  • 使用 kubectl 代理您已经被授权为其他用户,这就是它工作的原因。这回答了你的问题了吗? @Neok
  • 您可以运行kubectl auth can-i --list 来列出您的权限。 @Neok

标签: kubernetes kubectl minikube


【解决方案1】:

我会尝试总结一下我在 cmets 中提供的答案。

问题是:为什么运行 kubectl -s http://localhost:8001 --kubeconfig /dev/null --token <invalid_token>(其中 :8001 是 kubectl 代理打开的端口)会像我被授权一样回复,因为我将所有可能的授权选项设置为 null 或值不正确?

答案是kubectl proxy 打开一个端口并为您处理所有授权,因此您不必这样做。现在要访问 kubernetes 的 REST api,您需要做的就是使用curl localhost:8001/...。没有令牌和证书。

因为您已经获得了kubectl proxy 的授权,所以使用 kubectl 并将其指向 localhost:8001 会导致它不需要授权并且您不需要任何令牌来访问 k8s。


作为替代方案,您可以检查运行相同但不通过 kubectl proxy 直接使用 kubernetes 端口连接时会发生什么。

您提到您使用的是 minikube,因此默认情况下端口为 8443

$ kubectl --kubeconfig /dev/null -s https://$(minikube ip):8443 --token "invalid" --insecure-skip-tls-verify get pods

error: You must be logged in to the server (Unauthorized)

正如您现在看到的,它按预期工作。

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 2017-08-21
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多