k8s的serviceaccount,clusterrolebinding,endpoint资源对象
ServiceAccount对象
在 Kubernetes 中,ServiceAccount 是一个资源对象,用于身份验证和授权。它是一个命名的实体,为在集群中运行的应用程序提供了一个身份标识,并授予其一定的权限。
ServiceAccount 对象具有以下属性:
metadata.name
:ServiceAccount 的名称,必须是唯一的。secrets
:ServiceAccount 所关联的 Secrets。这些 Secrets 包含了 ServiceAccount 的访问令牌(Token),用于向 API 服务器进行身份验证。imagePullSecrets
:用于拉取私有 Docker 镜像所需的凭据的 Secret 名称列表。automountServiceAccountToken
:标志是否自动挂载 ServiceAccount 的访问令牌,默认为 true。设置为 false 可以禁止在容器中自动挂载访问令牌。
创建一个 ServiceAccount 的示例
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
创建成功后,您可以在 Kubernetes 集群中使用该 ServiceAccount。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: my-serviceaccount #引用serviceAccount对象
containers:
- name: my-container
image: nginx
# 其他配置项...
ClusterRole对象
ClusterRole
是 Kubernetes 中的一种资源对象,用于定义集群级别的角色。它定义了一组权限,用于控制对集群范围的资源和操作的访问。
示例 ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: example-cluster-role
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch", "create", "update", "delete"]
- apiGroups: ["extensions"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "delete"]
example-cluster-role
是一个 ClusterRole 的名称。它定义了两个规则 (rules):
第一个规则允许对空的
apiGroups
下的pods
和services
资源进行get
、list
、watch
、create
、update
和delete
操作。第二个规则允许对
extensions
apiGroups
下的deployments
资源进行get
、list
、watch
、create
、update
和delete
操作。
clusterrolebinding对象
ClusterRoleBinding(集群角色绑定)是 Kubernetes 中的一个资源对象,用于将 ClusterRole(集群角色)绑定到特定的用户、组或 ServiceAccount。它可以授予指定的主体(用户或服务帐号)在整个集群范围内的特定权限。
ClusterRoleBinding 对象具有以下属性:
metadata.name
:ClusterRoleBinding 的名称,必须是唯一的。subjects
:要绑定的主体列表,包括用户、组或 ServiceAccount。roleRef
:指定要绑定的 ClusterRole 的引用。它包含两个属性:apiGroup
:ClusterRole 所属的 API 组,默认为"rbac.authorization.k8s.io"
。kind
:ClusterRole 的类型,例如"ClusterRole"
或"Role"
。name
:ClusterRole 的名称。
创建一个 ClusterRoleBinding 的示例,一般会配合serviceaccount使用
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user #自定义角色
namespace: kubernetes-dashboard #web页面的命名空间
<hr />
<p>apiVersion: rbac.authorization.k8s.io/v1 #版本控制器
kind: ClusterRoleBinding #资源对象
metadata:
name: admin-user #自定义角色
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole #要绑定的角色类型为 ClusterRole
name: cluster-admin #绑定的角色是cluster-admin,权限很高
subjects: #定义被绑定的主体</p>
<ul>
<li>kind: ServiceAccount #指定ServiceAccount 类型的主体
name: admin-user #serviceaccount中的角色
namespace: kubernetes-dashboard #引用在这个命名空间
这个配置文件创建了一个名为 admin-user
的 ClusterRoleBinding 对象,将名为 admin-user
的 ServiceAccount 与拥有 cluster-admin
权限的 ClusterRole 绑定在一起。这将允许 admin-user
在 kubernetes-dashboard
命名空间中拥有 cluster-admin
角色的权限。
kubectl get serviceaccounts --all-namespaces
这个命令可以查看所有命名空间的所有角色
kubectl describe serviceaccount -n 命名空间 用户
详细查看某个命名空间的某个角色的权限
kubectl get clusterrole 角色名 -o yaml
详细查看集群角色的所有权限
endpoint对象
Endpoint资源对象是Kubernetes中的一种资源类型,用于表示网络服务的终端点(endpoint)。它描述了一个服务的网络地址和端口,以及与该服务相关的Pod的IP地址。Endpoint资源对象通常由Kubernetes集群自动创建和管理。
Endpoint资源对象的主要作用是为Service提供负载均衡和服务发现功能。当一个Service被创建时,Kubernetes会自动创建相应的Endpoint对象,并将与该Service关联的所有Pod的IP地址和端口信息添加到Endpoint对象中。这样,在集群内部,其他Pod或Service可以通过访问该Endpoint来与该Service进行通信。
kubectl get endpoints
使用该命令查看当前命名空间的endpoints
Endpoint资源对象是由Kubernetes集群自动创建和管理的,通常无需手动操作或修改。