【问题标题】:Where the default namespace is defined/setup for command kubectl inside of a pod在 pod 内为命令 kubectl 定义/设置默认命名空间的位置
【发布时间】:2021-05-02 14:39:14
【问题描述】:

背景: Azure AKS 中有 Cluster A 和 Cluster B。创建一个名为 Agent 的 pod,在集群 A 中的命名空间 test(这是 非默认 命名空间)中运行 linux 容器。在linux容器中,安装了pwsh和kubectl。

操作: 进入集群 A 中的 pod/Agent(kubectl exec -it pod/agent -- bash),获取集群 B 的凭证,配置文件将设置集群名称和用户名,但没有命名空间。
当从 pod/Agent 连接到集群 B,然后执行 kubectl get pods 时,会返回命名空间 test 内的资源,而不是命名空间 default 内的资源。
由于集群 B 中没有名为 test 的命名空间,因此不会返回任何资源。

所以我想知道命名空间 test 在 pod/Agent 中的哪里定义/设置为默认命名空间。

花了一些时间尝试在 github 中研究 kubectl 代码,但没有运气..

我也尝试使用别名,但它仅适用于 bash/sh,不适用于 pwsh,因为我不想更改命令名称 kubectl,如果我使用 alias kubectl='kubectl -n default',pwsh 会陷入循环。

感谢任何答案。

【问题讨论】:

    标签: powershell kubernetes kubectl azure-aks kubernetes-pod


    【解决方案1】:

    来自docs:

    最后,用于命名空间 API 的默认命名空间 操作被放置在一个文件中 /var/run/secrets/kubernetes.io/serviceaccount/namespace 在每个 容器。

    来自 pod 的简单测试:

    root@ubuntu:/# strace -eopenat kubectl get pod 2>&1 | grep namespace
    openat(AT_FDCWD, "/var/run/secrets/kubernetes.io/serviceaccount/namespace", O_RDONLY|O_CLOEXEC) = 6
    Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:default" cannot list resource "pods" in API group "" in the namespace "default"
    

    目录/run/secrets/kubernetes.io/serviceaccount 默认情况下始终挂载到 pod 并包含用于访问 Kube API 的 serviceaccount 令牌。

    【讨论】:

    • 非常感谢!我找到了!你知道如果我覆盖文件会有什么问题吗?例如,吊舱不再工作,等等。
    • 哦。 /var/run/secrets/kubernetes.io/serviceaccount/namespace 是一个只读文件。无论如何我可以以一种微妙的方式为default 指定命名空间吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2011-02-21
    • 1970-01-01
    • 2013-09-12
    • 2012-03-13
    • 2016-03-13
    • 2016-02-29
    相关资源
    最近更新 更多