为什么 kubectl exec --username=root 不起作用?

问题描述 投票:0回答:2

我在kubernetes上部署了istio/bookinfo,想在微服务容器上安装压力来注入故障。然而,当我使用

kubectl exec -it reviews-v1-f55d74d54-kpxr2 -c reviews --username=root -- /bin/bash

登录容器,显示用户还是default。命令“apt-get”得到了

default@reviews-v2-6f4995984d-4752v:/$ apt-get update
Reading package lists... Done
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)

我尝试使用“su root”,但我不知道答案。 我搜索了一些答案说我可以使用'docker exec',它可以工作但不方便,所以我想知道如何使用命令 kubectl exec 登录容器。

kubernetes root kubectl
2个回答
10
投票

不支持此功能。

源代码表明这是一个 TODO 功能:kubernetes/kubectl/pkg/cmd/exec/exec.go

kubectl 解释的

--username
标志:

➜  ~ kubectl options  | grep user    
  --user='': The name of the kubeconfig user to use
  --username='': Username for basic authentication to the API server

正如您可能看到的,没有任何用户标志可以更改 exec 的用户/UID。

exec 命令支持的所有标志:

➜  ~ kubectl exec --help
[...]

Options:
  -c, --container='': Container name. If omitted, the first container in the pod will be chosen
  -f, --filename=[]: to use to exec into the resource
      --pod-running-timeout=1m0s: The length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one
pod is running
  -i, --stdin=false: Pass stdin to the container
  -t, --tty=false: Stdin is a TTY

此外,apt-get update 最好在构建时运行,而不是在运行时运行。

保持容器不可变是一个很好的做法。为了测试目的,您应该坚持使用 docker exec,因为没有其他已知的替代方案。

此外,如果您有特定问题需要解决,请解释问题,而不是解决方案。 xy问题


0
投票

在使用containerd的现代kubernetes集群(2024+)上,可以使用

ctr
工具而不是kubectl来实现这一点。您需要使用 apt/yum 等安装
ctr

首先在容器列表中找到容器ID:

ctr c ls

获得 ID 后,以 root 身份登录:

ctr -n k8s.io task exec --user 0 --exec-id 0 -t <container id> /bin/sh

来源:https://stackoverflow.com/a/78968332

© www.soinside.com 2019 - 2024. All rights reserved.