kubernetes认证和serviceaccount

Service Account 为 Pod 提供必要的身份认证。所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户)。

kubectl 如果需要访问 apiserver 需要经过 认证,授权,准入控制 三关。

kubectl 客户端请求的时候首先需要进行认证,认证通过后再进行授权检查,因有些增删等某些操作需要级联到其他资源或者环境,这时候就需要准入控制来检查级联环境是否有授权权限了。

获取所有的 api version

[[email protected] ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

使用 curl 访问 apiservice

从上面可知,所有客户端访问 apiserver都需要经过验证,因而我们在服务器上面也配置了验证信息:

# 使用 kubectl 命令的用户家目录下有 .kube/config 文件,上面有 client-certificate-data 和  client-key-data 认证信息。
cat .kube/config 

启用本地转发端口,代理访问 apiserver

# 因为访问 apiserver 需要认证,但是在命令行中很难进行验证,我们可以通过代理的方式,对 apiserver 进行访问
kubectl proxy --port=8080

# 另起一个窗口
# 获取所有的 namespace
curl http://localhost:8080/api/v1/namespaces

# 获取 kube-system 下所有的 deployments
curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/

创建服务账户

mkdir ~/sa
cd sa/
kubectl create serviceaccount admin

# 查看,新增了一个 secrets
kubectl get sa 或 kubectl get secret

[[email protected] ~]$ kubectl describe sa admin
Name:                admin
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>                      # 可以在这里配置私有 registry 需要的验证信息
Mountable secrets:   admin-token-h2nhw
Tokens:              admin-token-h2nhw
Events:              <none>

# 创建一个 pod 使用 admin 的 serviceaccount
vi pod-sa-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-sa-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    klvchen.com/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
  serviceAccountName: admin

kubectl apply -f pod-sa-demo.yaml 

# 查看
kubectl describe pods pod-sa-demo
# 查看当前的用户认证
kubectl config view

# 以 root 用户执行
cd /etc/kubernetes/pki

# 配置 root 使用 kubectl 权限
mkdir ~/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config

# 创建新的密钥
(umask 077; openssl genrsa -out klvchen.key 2048)

# 创建证书请求,/CN 指定的是用户名
openssl req -new -key klvchen.key -out klvchen.csr -subj "/CN=klvchen"

# 创建证书
openssl x509 -req -in klvchen.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out klvchen.crt -days 365

# 查看证书
openssl x509 -in klvchen.crt -text -noout

# 在kubeconfig配置文件中设置一个用户项
kubectl config set-credentials klvchen --client-certificate=./klvchen.crt --client-key=./klvchen.key --embed-certs=true

kubectl config set-context [email protected] --cluster=kubernetes --user=klvchen

kubectl config view

# 切换用户
kubectl config use-context [email protected]

# 此用户没有权限查看资源
kubectl get pods 

# 切换回管理员账号
kubectl config use-context [email protected]

# 创建一个新的 kubectl 配置文件
kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://192.168.0.205:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true

kubectl config view --kubeconfig=/tmp/test.conf 

原文地址:https://www.cnblogs.com/klvchen/p/9935339.html

时间: 2024-11-08 11:14:14

kubernetes认证和serviceaccount的相关文章

15.kubernetes认证及serviceaccount

kubernetes认证及serviceaccount 认证 授权:RBAC(目前的主流授权方式) 准入控制:了解即可 --> 认证 授权 准入控制 客户端 -->api-server: user: username,uid group: extra: API Request path serviceaccount k8s的资源如果支持create 那么可以使用--dry-run来生成清单配置--dry-run 获取单个pod的清单配置[[email protected] ~]# kubect

9.kubernetes认证及ServiceAccount

一.前言 ApiServer:管理平台访问控制的唯一入口. 用户对API资源进行操作: 1. 对客户端的访问进行认证操作,确认是否有访问k8s权限:token(共享密钥)或SSL(双向SSL认证)二选一 2. 授权检查,确认是否对资源具有相关权限 ABAC(基于属性的访问控制).RBAC(基于角色的访问控制).NODE(基于节点).WebHook(自定义HTTP回调方法的访问控制) 3. 准入控制,对操作资源相关联的其他资源是否有权限. K8S集群交互的身份认证:kubeconfig(证书).t

013.Kubernetes认证授权

一 Kubernetes认证系统介绍 1.1 访问控制 Kubernetes API的每个请求都会经过多阶段的访问控制之后才会被接受,这包括认证.授权以及准入控制(Admission Control)等 1.2 认证 在集群开启TLS后,客户端发往Kubernetes的所有API请求都需要进行认证,以验证用户的合法性. Kubernetes支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可).如果认证成功,则用户的username会被传入授权模块做进一步授权验证:而对于认证失败

kubernetes认证、授权、准入控制

1 总述 1 概述 kubernetes 中的资源访问类型有两种,一种是由POD提供的服务资源,其可通过service或 ingress提供接口以供外部访问,这种访问不需要经过API server的认证,而另一种对集群内部资源的操作则需要经过一定的认证授权操作才能完成. 2 认证,授权,准入控制概述 1 概述 任何客户端在操作相关资源对象时必须经过三个步骤:认证: 身份鉴别,正确的账号,能够通过认证,其只能证明其是合法的账户.授权: 权限检查,对资源进行相应的操作.其可操作某些资源,其某些资源需

kubernetes安全认证相关资料

1.Kubernetes安装之创建Kubeconfig文件 https://jimmysong.io/blogs/kubernetes-create-kubeconfig/ 2.轻松了解Kubernetes认证功能 http://qinghua.github.io/kubernetes-security/ 3.kubernetes集群的安全配置 http://tonybai.com/2016/11/25/the-security-settings-for-kubernetes-cluster/

kubernetes的Service Account

Service account作用Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务. Service account使用场景运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证. 与User account区别(1)User account是为人设计的,而se

在kubernetes 集群内访问k8s API服务

所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户).基于角色的访问控制(“RBAC”)使用“rbac.authorization.k8s.io”API 组来实现授权控制,允许管理员通过Kubernetes API动态配置策略. API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节.在 kubernetes 集群中

kubernetes的Service Account和secret

系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证. kubectl get sa --all-namespaces NAMESPACE NAME SECRETS AGE default build-robo

第27 章 : Kubernetes 安全之访问控制

Kubernetes 安全之访问控制 本文将主要分享以下三方面的内容: Kubernetes API 请求访问控制 Kubernetes 认证 Kubernetes RBAC Security Context 的使用 Kubernetes API 请求访问控制 访问控制 大家都知道访问控制是云原生中的一个重要组成部分.也是一个 Kubernetes 集群在多租户环境下必须要采取的一个基本的安全架构手段. 那么在概念上可以抽象的定义为谁在何种条件下可以对什么资源做什么操作.这里的资源就是在 Kub