3

有没有办法从吊舱读取吊舱的秘密?

该 pod 是使用default服务帐户创建的,因此即使我安装了kubectl我也无法执行get secrets,除非我弄乱了默认 SA(我想避免这种情况)。

我知道这些秘密可以通过env命令以纯文本形式获得,但其他一些环境变量也是如此。

我怎么能具体告诉哪些是来自secrets

(我没有使用卷来安装机密,不幸的是,由于超出了这个问题的范围,这不能改变)

4

4 回答 4

0

您的 pod 需要与 api 服务器通信并询问 pod 定义,才能找到它。

为此,Pod 的服务帐户(无论是它default还是自定义帐户)需要适当的Role并且RoleBinding允许该服务帐户读取某些 kubernetes 资源,在这种情况下,是 Pod 定义本身,可能还有Secret命名空间中的对象,所以它可以找到出相应的秘密(即,如果有一个环境变量来自一个秘密通过envFrom指令)。

服务帐户令牌挂载到 pod 中的路径/var/run/secrets/kubernetes.io/serviceaccount/token 。使用该令牌,您的进程可以从集群内部与 Kubernetes api 对话。您可以使用任何语言的任何 Kubernetes 客户端库,或者简单地使用kubectl. 然后是实现逻辑的问题,该逻辑将找出哪些秘密提供了哪些文件/变量。

于 2019-08-21T13:53:58.527 回答
0

您可以使用 Downward API 向容器公开 Pod 字段:https ://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/

enableServiceLinks在相关的说明中,如果您不依赖自动注入的环境变量进行服务发现,那么您可能会发现通过设置为减少容器中的环境变量数量很有用false

文件:kubectl explain deployment.spec.template.spec.enableServiceLinks

EnableServiceLinks 指示是否应将有关服务的信息注入到 pod 的环境变量中,与 Docker 链接的语法相匹配。可选:默认为真。

于 2019-08-21T15:21:49.973 回答
0

可以在 pod 的配置中看到哪些秘密用作环境变量的值,包括当前正在运行的 pod。欲了解更多信息:

https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables

于 2019-08-21T12:53:44.440 回答
0

如社区所述:

1 . 如果秘密被挂载为使用秘密作为环境变量 您可以使用文档中的信息从内部显示所有这些:

 env | grep SECRET
 echo $SECRET_your_key
 echo $SECRET_PASSWORD $SECRET_USERNAME

2 . 如果您对“从 Pod 访问 API ” 感兴趣

  • 可以使用kubectl直接访问 REST API 或者直接调用 api-server fe:

  • curl -sSk -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default:443/api/v1/namespaces/default/secrets/your_secret

  • curl -v --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default:443/api/v1/namespaces/default/secrets/

如果您收到如下错误:system:serviceaccount:default:default" cannot list resource "secrets" in API group "" in the namespace "default 请参考:

RBAC 授权 创建角色/角色绑定

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: default-role
rules:
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - get
  - list

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test-deafult-role
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: default-role
subjects:
- kind: ServiceAccount
  name: default

如果有帮助,请告诉我。

于 2019-08-22T15:34:16.253 回答