如果没有另外指定,则pod在命名空间中使用默认服务帐户运行,如何检查默认服务帐户的授权,我们是否需要将其安装在每个pod中,如果没有,我们怎么办?在命名空间级别或群集级别上禁用此行为.
仍在搜索文档.
环境:Kubernetes 1.12,RBAC
默认服务帐户应该处理哪些其他用例?可以/我们应该将它用作服务帐户来创建和管理namsepace中的k8s部署吗?例如,我们不会使用真实的用户帐户来创建集群中的东西,因为用户来到团队/组织中.
Sha*_*Pai 19
kubectl得到sa
NAME SECRETS AGE
默认1 1d
可以在需要时添加serviceccounts.每个pod只与一个serviceAccount关联,但多个pod可以使用相同的serviceaccount.
pod只能使用同一名称空间中的serviceaccount.
您可以通过在容器清单中指定帐户名称来将服务帐户分配给容器.如果您没有明确指定它,则pod将使用命名空间中的默认serviceaccount
ServiceAccount的默认权限不允许它列出或修改任何资源.默认的Service-Account不允许查看群集状态,更不用说以任何方式修改它
默认情况下,命名空间中的默认serviceAccount除了未经身份验证的用户之外没有其他权限.
因此,默认情况下,pod甚至无法查看群集状态.由您自己授予适当的权限来执行此操作.
kubectl exec -it test -n foo sh/#curl localhost:8001/api/v1/namespaces/foo/services {"kind":"Status",
"apiVersion":"v1","metadata":{},"status":"失败","消息":"服务被禁止:用户\"系统:serviceaccount:foo:default \"无法在命名空间中的API组\"\"列出资源\"services \" "foo",""reason":"禁止","详情":{"kind":"services"},"code":403
从上面可以看出,默认服务帐户无法列出服务
但是当给予适当的角色和角色绑定时,如下所示
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: foo-role
namespace: foo
rules:
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
creationTimestamp: null
name: test-foo
namespace: foo
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: foo-role
subjects:
- kind: ServiceAccount
name: default
namespace: foo
Run Code Online (Sandbox Code Playgroud)
现在我能够列出resurce服务
kubectl exec -it test -n foo sh
/ # curl localhost:8001/api/v1/namespaces/foo/services
{
"kind": "ServiceList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/namespaces/bar/services",
"resourceVersion": "457324"
},
"items": []
Run Code Online (Sandbox Code Playgroud)
提供所有serviceAccounts clusteradmin clusterrole是一个坏主意,它最好只为每个人提供他们完成工作所需的权限而不是单一权限更多
为每个pod创建一个特定的serviceAccount,然后通过一个角色绑定将其与一个度身定制的角色或一个clusterrole相关联是个好主意.
如果其中一个pod只需要读取pod而另一个需要修改它们,则创建两个不同的serviceaccounts并通过在pod规范中指定serviceaccountName属性使这些pod使用它们
您可以参考以下链接进行深入解释
你可以检查一下
kubectl解释serviceaccount.automountServiceAccountToken并编辑服务帐户
kubectl edit serviceaccount default -o yaml
apiVersion: v1
automountServiceAccountToken: false
kind: ServiceAccount
metadata:
creationTimestamp: 2018-10-14T08:26:37Z
name: default
namespace: default
resourceVersion: "459688"
selfLink: /api/v1/namespaces/default/serviceaccounts/default
uid: de71e624-cf8a-11e8-abce-0642c77524e8
secrets:
- name: default-token-q66j4
Run Code Online (Sandbox Code Playgroud)
一旦完成此更改,您生成的任何pod都没有serviceaccount令牌,如下所示.
kubectl exec tp -it bash
root@tp:/# cd /var/run/secrets/kubernetes.io/serviceaccount
bash: cd: /var/run/secrets/kubernetes.io/serviceaccount: No such file or directory
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8716 次 |
| 最近记录: |