【问题标题】:connect to shell terminal of other container in a pod连接到 pod 中其他容器的 shell 终端
【发布时间】:2018-02-19 05:24:42
【问题描述】:

当我在一个 pod/pod 模板中定义多个容器时,例如一个运行 agent 的容器和另一个运行 php-fpm 的容器,它们如何相互访问?我需要agent container 通过shell 连接到php-fpm,并且需要通过agent container 交互地执行几个步骤。

根据我的理解,我们可以将kubectl打包成agent container,使用kubectl exec -it <container id> sh连接容器。但我不希望Agent container 拥有比使用php-fpm 连接到目标容器更多的特权。

agent container 有没有更好的方法通过 shell 连接到php-fpm 并交互执行命令?

另外,由于以下错误,我在使用 minikube 时无法从容器中运行 kubectl 成功

docker run -it -v ~/.kube:/root/.kube lachlanevenson/k8s-kubectl get nodes
Error in configuration:
* unable to read client-cert /Users/user/.minikube/apiserver.crt for minikube due to open /Users/user/.minikube/apiserver.crt: no such file or directory
* unable to read client-key /Users/user/.minikube/apiserver.key for minikube due to open /Users/user/.minikube/apiserver.key: no such file or directory
* unable to read certificate-authority /Users/user/.minikube/ca.crt for minikube due to open /Users/user/.minikube/ca.crt: no such file or directory

【问题讨论】:

  • 代理容器是否有更好的方法通过 shell 连接到 php-fpm 并交互执行命令? 不知道你是什么就很难回答这个问题尝试做;你想用这些 shell 命令做什么?
  • 但我不希望代理容器拥有比使用 php-fpm 连接到目标容器更多的权限,那么你应该放弃你的 kubectl exec 方法,因为不用 RBAC 做一些非常非常严肃的工作,Pod 将能够在集群内部做任何它想做的事情

标签: kubernetes kubernetes-helm kubernetes-security


【解决方案1】:

docker run -it -v ~/.kube:/root/.kube lachlanevenson/k8s-kubectl 获取节点

  1. 首先,k8s 集群中的每个 Pod 都有自己的由 /var/run/secrets/kubernetes.io/serviceaccount/token 提供的 k8s 凭据,因此绝对不需要尝试将主目录卷挂载到 docker 容器中
  2. 您收到有关client-cert 的错误的原因是因为~/.kube 的内容只是字符串,它们指向外部定义的ssl 密钥、ssl 证书和内部定义的ssl CA 证书~/.kube/config -- 但我不会进一步解决这个问题,因为没有充分的理由使用这种方法

【讨论】:

  • 您认为kubectl proxy 是访问 kubernetes api 的更好方法吗?
猜你喜欢
  • 2019-02-15
  • 2021-06-07
  • 2020-06-24
  • 2021-11-21
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
相关资源
最近更新 更多