有没有办法从吊舱内读取吊舱的秘密?
该 pod 是使用default
服务帐户创建的,因此即使我安装了kubectl
我也无法执行get secrets
,除非我弄乱了默认 SA(我想避免这种情况)。
我知道这些秘密可以通过env
命令以纯文本形式获得,但其他一些环境变量也是如此。
我怎么能具体告诉哪些是来自secrets
?
(我没有使用卷来安装机密,不幸的是,由于超出了这个问题的范围,这不能改变)
有没有办法从吊舱内读取吊舱的秘密?
该 pod 是使用default
服务帐户创建的,因此即使我安装了kubectl
我也无法执行get secrets
,除非我弄乱了默认 SA(我想避免这种情况)。
我知道这些秘密可以通过env
命令以纯文本形式获得,但其他一些环境变量也是如此。
我怎么能具体告诉哪些是来自secrets
?
(我没有使用卷来安装机密,不幸的是,由于超出了这个问题的范围,这不能改变)
您的 pod 需要与 api 服务器通信并询问 pod 定义,才能找到它。
为此,Pod 的服务帐户(无论是它default
还是自定义帐户)需要适当的Role
并且RoleBinding
允许该服务帐户读取某些 kubernetes 资源,在这种情况下,是 Pod 定义本身,可能还有Secret
命名空间中的对象,所以它可以找到出相应的秘密(即,如果有一个环境变量来自一个秘密通过envFrom
指令)。
服务帐户令牌挂载到 pod 中的路径/var/run/secrets/kubernetes.io/serviceaccount/token
。使用该令牌,您的进程可以从集群内部与 Kubernetes api 对话。您可以使用任何语言的任何 Kubernetes 客户端库,或者简单地使用kubectl
. 然后是实现逻辑的问题,该逻辑将找出哪些秘密提供了哪些文件/变量。
您可以使用 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 链接的语法相匹配。可选:默认为真。
可以在 pod 的配置中看到哪些秘密用作环境变量的值,包括当前正在运行的 pod。欲了解更多信息:
https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables
如社区所述:
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
如果有帮助,请告诉我。