分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

kubernetes认证和serviceaccount

发布时间:2023-09-06 02:22责任编辑:郭大石关键词:kubernetes

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

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

获取所有的 api version

[root@master ~]# kubectl api-versionsadmissionregistration.k8s.io/v1beta1apiextensions.k8s.io/v1beta1apiregistration.k8s.io/v1apiregistration.k8s.io/v1beta1apps/v1apps/v1beta1apps/v1beta2authentication.k8s.io/v1authentication.k8s.io/v1beta1authorization.k8s.io/v1authorization.k8s.io/v1beta1autoscaling/v1autoscaling/v2beta1batch/v1batch/v1beta1certificates.k8s.io/v1beta1events.k8s.io/v1beta1extensions/v1beta1networking.k8s.io/v1policy/v1beta1rbac.authorization.k8s.io/v1rbac.authorization.k8s.io/v1beta1scheduling.k8s.io/v1beta1storage.k8s.io/v1storage.k8s.io/v1beta1v1

使用 curl 访问 apiservice

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

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

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

# 因为访问 apiserver 需要认证,但是在命令行中很难进行验证,我们可以通过代理的方式,对 apiserver 进行访问kubectl proxy --port=8080# 另起一个窗口# 获取所有的 namespacecurl http://localhost:8080/api/v1/namespaces# 获取 kube-system 下所有的 deploymentscurl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/

创建服务账户

mkdir ~/sacd sa/kubectl create serviceaccount admin# 查看,新增了一个 secretskubectl get sa 或 kubectl get secret[klvchen@master ~]$ kubectl describe sa adminName: ???????????????adminNamespace: ??????????defaultLabels: ?????????????<none>Annotations: ????????<none>Image pull secrets: ?<none> ?????????????????????# 可以在这里配置私有 registry 需要的验证信息Mountable secrets: ??admin-token-h2nhwTokens: ?????????????admin-token-h2nhwEvents: ?????????????<none># 创建一个 pod 使用 admin 的 serviceaccount vi pod-sa-demo.yaml apiVersion: v1kind: Podmetadata: ?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: adminkubectl apply -f pod-sa-demo.yaml # 查看kubectl describe pods pod-sa-demo
# 查看当前的用户认证kubectl config view# 以 root 用户执行cd /etc/kubernetes/pki# 配置 root 使用 kubectl 权限mkdir ~/.kubecp /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=truekubectl config set-context klvchen@kubernetes --cluster=kubernetes --user=klvchenkubectl config view# 切换用户kubectl config use-context klvchen@kubernetes# 此用户没有权限查看资源kubectl get pods # 切换回管理员账号kubectl config use-context kubernetes-admin@kubernetes# 创建一个新的 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=truekubectl config view --kubeconfig=/tmp/test.conf 

kubernetes认证和serviceaccount

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved