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

Why kubectl exec --username=root does not work?

我在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.

登录容器

不支持。

源代码表明它是一个 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

如您所见,none 的用户标志可以更改 user/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,因为没有其他已知的替代方法。

此外,如果您有具体问题要解决,请解释问题,而不是解决方案。 xyproblem