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):

  1. 第一个规则允许对空的 apiGroups 下的 pods 和 services 资源进行 getlistwatchcreateupdate 和 delete 操作。

  2. 第二个规则允许对 extensions apiGroups 下的 deployments 资源进行 getlistwatchcreateupdate 和 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集群自动创建和管理的,通常无需手动操作或修改。