基于RBAC方式从Pod内访问API server

关于Kubernetes中基于角色的访问控制(RBAC)的介绍可以参考文章:Kubernetes RBAC

当在物理机上执行kubectl时,会自动根据~/.kube/config文件配置kubectl,其中包含一些权限信息,这样API server就可以根据权限信息决定是否执行来自kubectl的请求。

然而在Pod内要想访问API server,更常用的方法是利用service account来验证权限。不幸的是,Kubernetes默认提供的default service account的权限非常有限,很多api的请求都无权执行。因此,需要创建一个拥有高权限的service account。基本方法就是:创建一个具有高权限的role(包括Role和ClusterRole),然后将这个具有高权限的role和一个新的service account绑定起来(绑定方法包括RoleBinding和ClusterRoleBinding)。具体内容可以查看Kubernetes RBAC

这里为了简便,直接利用了cluster-admin role。当然你也可以自己定制自己的role。

如service-account-rbac.yaml:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: myserviceaccount
  namespace: default

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1alpha1
metadata:
  name: myserviceaccount
subjects:
  - kind: ServiceAccount
    name: myserviceaccount
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

使用kubectl创建serviceaccount和clusterrolebingding。这样在default命名空间就会创建好一个名为myserviceaccount的service account。

新创建Pod时,显式地加入新创建的service account(否则会自动加入默认的default这一service account),在pod中的/var/run/secrets/kubernetes.io/serviceaccount/目录下可以查看到service account的内容。

这时,可以在pod中安装kubernetes的客户端:kubernetes-client/python

可以源码安装,也可以使用pip。

# pip install kubernetes==5.0.0

由于使用的kubernetes版本为1.9,官方推荐的kubernetes-client的适配版本为5.0,这里指定安装5.0.0版本。

在pod中尝试运行python/examples/in_cluster_config.py

如果能够输出pod的列表,则成功了。


参考:

1. Accessing Clusters

2. Kubernetes RBAC

3. kubernetes-client/python

4. follow-me-install-kubernetes-cluster/09-部署Dashboard插件.md

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值