kubernetes:从pod内读取pod的秘密

时间:2019-08-21 12:25:16

标签: kubernetes kubernetes-secrets

是否有办法从内部内的Pod中读取Pod的秘密?

已使用default服务帐户创建了广告连播,因此,即使我安装了kubectl,也无法执行get secrets,除非我与默认的SA(我想避免)。

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

我如何具体地告诉哪些人来自secrets

(我使用卷来安装机密,不幸的是,由于某种原因,超出了此问题的范围,这种情况无法更改)

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您的Pod需要与api服务器对话,并要求Pod定义才能找到它。

为此,pod的服务帐户(无论是default还是自定义帐户)需要适当的RoleRoleBinding,以允许该服务帐户读取某些kubernetes资源。 ,pod定义本身以及名称空间中的Secret对象,因此它可以找出相应的秘密(即,是否有环境变量通过envFrom指令来自秘密)。

服务帐户令牌已安装到路径/var/run/secrets/kubernetes.io/serviceaccount/token 在豆荚里使用该令牌,您的进程可以从集群内部与Kubernetes api通信。您可以使用任何语言的Kubernetes客户端库,也可以仅使用kubectl。然后是实施逻辑的问题,该逻辑将找出哪些秘密提供了哪些文件/变量。

答案 2 :(得分:0)

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

在相关说明中,如果您不依赖自动注入的env var进行服务发现,则可以发现将enableServiceLinks设置为false来减少容器中的env var数量很有用。

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

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

答案 3 :(得分:0)

如社区所述:

1 。如果将机密安装为“将机密用作Environment Variables” 您可以使用文档中的信息从内部显示所有这些信息:

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

2 。如果您对“ Accessing the API from a Pod”感兴趣

  • 您可以使用kubectlDirectly accessing the REST API 或直接致电api-server f.e。:

  • 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“无法在名称空间” default“的API组”“中列出资源” secrets“,请参阅:

RBAC Authorization 创建角色/角色绑定

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

请告诉我是否有帮助。