是否有办法从内部内的Pod中读取Pod的秘密?
已使用default
服务帐户创建了广告连播,因此,即使我安装了kubectl
,也无法执行get secrets
,除非我与默认的SA(我想避免)。
我知道这些秘密可以通过env
命令以纯文本形式获得,但是其他许多环境变量也是如此。
我如何具体地告诉哪些人来自secrets
?
(我不使用卷来安装机密,不幸的是,由于某种原因,超出了此问题的范围,这种情况无法更改)
答案 0 :(得分:0)
哪些秘密用作环境变量的值,可以在pod的配置中看到,包括当前运行的pod。有关更多信息:
https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables
答案 1 :(得分:0)
您的Pod需要与api服务器对话,并要求Pod定义才能找到它。
为此,pod的服务帐户(无论是default
还是自定义帐户)需要适当的Role
和RoleBinding
,以允许该服务帐户读取某些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”感兴趣
您可以使用kubectl,Directly 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
请告诉我是否有帮助。