pod 通过 serviceAccount 访问 ApiServer

本文介绍了如何在Kubernetes中创建并使用ServiceAccount进行API访问控制。通过创建ServiceAccount、Role和RoleBinding,为Pod授予访问apiserver的权限,详细阐述了每个步骤的作用和配置文件内容。最后,展示了如何在Pod内部使用ServiceAccount进行apiserver操作的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Service Account(服务账号):是指由Kubernetes API 管理的账号,用于为Pod 之中的服务进程在访问Kubernetes API时提供身份标识( identity ) 。Service Account通常要绑定于特定的命名空间,它们由 API Server 创建,或者通过 API 调用于动创建 ,附带着一组存储为Secret的用于访问API Server的凭据。


以下步骤基于最简单场景:pod 内容器访问apiserver操作pod。
依赖:client-go

步骤:

1、创建serviceaccount

yaml文件 sa.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: example-sa # serviceAccount名
  namespace: default   # 所属命名空间

kubectl apply -f sa.yaml

2、创建role

role 即一个account能够访问的权限
role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
    name: example-role
    namespace: default
rules:
    - apiGroups:
        - ''
      resources:  # 能够访问的资源
        - 'pods'
      verbs:      # 能够执行的动作
        - 'create'
        - 'delete'
        - 'get'
        - 'list'
        - 'patch'

kubectl apply -f role.yaml

3、创建roleBinding

使用 roleBinding 将 serviceAccount 与 role 进行绑定

roleBinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name: example-rolebind
    namespace: default
subjects:
    - kind: ServiceAccount
      name: example-kubeconfig
      namespace: default
roleRef:
    kind: Role
    name: example-role
    apiGroup: rbac.authorization.k8s.io

kubectl apply -f roleBinding.yaml

4、 pod 内使用创建的 serviceAccount

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  serviceAccount: example-sa
  initContainers: # 省略

kubectl apply -f pod.yaml

5、编写测试程序

    // 部分代码
	kubeconfig, err := rest.InClusterConfig()
	if err != nil {
		log.Println(err)
		return nil
	}
	clientset, err := kubernetes.NewForConfig(kubeconfig)
	if err != nil {
		log.Println(err)
		return nil
	}

InClusterConfig 方法会获取当前环境下的pod绑定的service account信息,并生成配置。 NewForConfig 根据配置初始化apiserver client。可通过该client去操作pod。

6、将程序放入pod中执行。

End

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值