k8s_day07_02

2023-10-27

k8s_day07_02

静态密码方式认证k8s

kubeconfig

1、kubeconfig 配置文件:

​ 在 /etc/kubernetes/有conf 结尾的文件 ,那个就是kubeconfig 类型的配置文件。用于控制节点组件 和api交互时提供的身份验证。将用户名、认证信息等组织一起,便于认证到API Server上的认证信息文件;

[root@master01 ~]# ls /etc/kubernetes/*.conf
/etc/kubernetes/admin.conf  /etc/kubernetes/controller-manager.conf  /etc/kubernetes/kubelet.conf  /etc/kubernetes/scheduler.conf
[root@master01 ~]# 

kubeconfig 主要内容是 用户列表、集群列表信息, 程序调用时使用的context:当前准备什么用户管理哪个集群(用户和集群的映射关系)

image-20211224184414499

支持一个文件中保存m个集群的n个认证信息;

2、kubeconfig 命令

客户端程序kuvbectl 可以通过默认路径(~/.kube/) 、–kubeconfig、 KUBECONFIG 环境变量加载自定义的kubeconfig 文件。

eg:

[root@master01 ~]# kubectl  options |grep cache
      --cache-dir='/root/.kube/cache': Default cache directory
      
[root@master01 ~]# kubectl  options |grep '\--kubeconfig'
      --kubeconfig='': Path to the kubeconfig file to use for CLI requests.

[root@master01 ~]#  kubectl get po/mypod  --kubeconfig=/etc/kubernetes/admin.conf
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          137m
[root@master01 ~]# 
[root@master01 ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@master01 ~]# kubectl get po/mypod 
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          139m

查看 kubeconfig 文件配置

不指定,默认显示的是家目录的

[root@master01 ~]# kubectl  config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubeapi.magedu.com:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
[root@master01 ~]# 

查看context

[root@master01 ~]# kubectl  config  get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
[root@master01 ~]# 
3、密码认证

静态密码文件:
password,user,uid,“group1,group2,group3”

修改apiserver.yaml

  - --basic-auth-file=/etc/authfiles/passwd.csv
 
   - mountPath: /etc/authfiles/
      name: authfiles
      readOnly: true


  - hostPath:
    path: /etc/authfiles/
    type: DirectoryOrCreate
    name: authfiles
[root@master01 ~]# cat /etc/authfiles/passwd.csv 
ilinux@Magedu,ilinux,1100,"kubeusers,kubeadmin"
ik8s@Magedu,ik8s,1200,"kubeusers"

/etc/kubernetes/manifests/kube-apiserver.yaml 修改后 kubelet 会自动扫描应用

[root@master01 ~]# kubectl exec kube-apiserver-master01 -it  -n kube-system  -- kube-apiserver --help|grep  basic
[root@master01 ~]# 

1.20 版本不支持. 所以。。.。

x509 认证
k8s 证书体系

使用openssl创建。 缺点 无法集中 方便 管理客户证书 可以通过Valut 系统管理

image-20211224225007432

k8s 一共使用3套ca

1、apiserver 当作为服务端时使用的ca 就是 kubernetes-ca , 是 k8s主ca签名的证书。

主ca 自签名证书

[root@master01 pki]# cd /etc/kubernetes/pki/
[root@master01 pki]# ls ca.*
ca.crt  ca.key

api 服务端ca

[root@master01 pki]# ls apiserver.*
apiserver.crt  apiserver.key

​ 在节点加入k8s 集群时,会创建向 k8s主ca的证书申请请求 。kubelet 使用的ca 是子ca. 使用kubeadm 时, 控制平面所使用的组件都是 子ca , kubeadm 会帮我们 自动创建

2、ecd 是另外一套自己的自签名CA 。api 作为客户端向etcd 访问时 ,api 会使用etcd 签名的证书子ca

[root@master01 pki]# ls apiserver-etcd-client.*
apiserver-etcd-client.crt  apiserver-etcd-client.key

api 做为客户端 请求访问 kubelet 节点查询pod 信息时使用的ca

[root@master01 pki]# ls apiserver-kubelet-client.*
apiserver-kubelet-client.crt  apiserver-kubelet-client.key

etcd 主 ca

[root@master01 pki]# ls etcd/ca*
etcd/ca.crt  etcd/ca.key

etcd 作为服务端时使用的ca

[root@master01 pki]# ls  etcd/server.*
etcd/server.crt  etcd/server.key

etcd 内部集群通信时使用的ca

[root@master01 pki]# ls  etcd/peer*
etcd/peer.crt  etcd/peer.key
[root@master01 pki]# 

3、对接外部时 ,使用的聚合器是另外一套ca

自定义证书认证
1、生成用户自定义的证书

使用k8s主ca 签名就行

[root@master01 pki]# pwd
/etc/kubernetes/pki
[root@master01 pki]# 
[root@master01 pki]# mkdir usercerts
[root@master01 pki]# cd usercerts/
[root@master01 usercerts]# (umask 077;openssl genrsa -out magedu.key 2048)
Generating RSA private key, 2048 bit long modulus
....................................................................................+++
............................+++
e is 65537 (0x10001)
[root@master01 usercerts]# 


[root@master01 usercerts]# openssl  req -new -key magedu.key -out magedu.csr -subj "/CN=magedu/O=kubeusers"
[root@master01 usercerts]# openssl x509 -req -days 3650 -CA /etc/kubernetes/pki/ca.crt  -CAkey /etc/kubernetes/pki/ca.key  -CAcreateserial -in magedu.csr -out magedu.crt
Signature ok
subject=/CN=magedu/O=kubeusers
Getting CA Private Key
[root@master01 usercerts]# ls
magedu.crt  magedu.csr  magedu.key
[root@master01 usercerts]# 

2、生成需要管理的cluster 信息 ,保存到kubeconfig 文件中
[root@master01 usercerts]# kubectl config set-cluster  kubernetes --server=https://kubeapi.magedu.com:6443 --embed-certs --certificate-authority=/etc/kubernetes/pki/ca.crt --kubeconfig=/tmp/mykubeconfig
Cluster "kubernetes" set.

3、生成需要管理的user 信息 ,保存到kubeconfig 文件中
[root@master01 usercerts]# kubectl  config set-credentials magedu --client-certificate=./magedu.crt --client-key=./magedu.key --embed-certs=true --kubeconfig=/tmp/mykubeconfig
User "magedu" set.
[root@master01 usercerts]# 

–embed-certs=true 会加密kubeconfig 的证书信息

[root@master01 usercerts]# kubectl   config view --kubeconfig=/tmp/mykubeconfig
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubeapi.magedu.com:6443
  name: kubernetes
contexts: null
current-context: ""
kind: Config
preferences: {}
users:
- name: magedu
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

4、创建user 、cluster 的对应关系 context
[root@master01 usercerts]#  kubectl  config set-credentials magedu --client-certificate=./magedu.crt --client-key=./magedu.key --embed-certs=true --kubeconfig=/tmp/mykubeconfig
User "magedu" set.
[root@master01 usercerts]# kubectl   config  set-context 'magedu@kubernetes'  --user=magedu --cluster=kubernetes  --kubeconfig=/tmp/mykubeconfig
Context "magedu@kubernetes" created.
[root@master01 usercerts]# kubectl   config  use-context magedu@kubernetes --kubeconfig=/tmp/mykubeconfig
Switched to context "magedu@kubernetes".

验证结果

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubeapi.magedu.com:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: magedu
  name: magedu@kubernetes
current-context: magedu@kubernetes
kind: Config
preferences: {}
users:
- name: magedu
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
[root@master01 usercerts]# 

[root@master01 usercerts]# kubectl get nodes --kubeconfig=/tmp/mykubeconfig
Error from server (Forbidden): nodes is forbidden: User "magedu" cannot list resource "nodes" in API group "" at the cluster scope
[root@master01 usercerts]# 

出现这个原因是因为没有授权

5.1、kubeconfig 配置文件的合并

kubectl config 如果不用 --kubeconfig= 选项 , 那么所的有的修改都会保存在默认的 家目录的那个kube文件中

例子: 对

没改之前, 因为配置文件中已经有了 集群kubernetes 列表项 ,主要创建新的context 列表项。修改现在使用的context 就行

[root@master01 usercerts]# kubectl   config  view

直接修改

[root@master01 usercerts]#  kubectl  config set-credentials magedu --client-certificate=./magedu.crt --client-key=./magedu.key --embed-certs=true 
User "magedu" set.
[root@master01 usercerts]# kubectl   config  set-context 'magedu@kubernetes' --user=magedu --cluster=kubernetes 
Context "magedu@kubernetes" created.
[root@master01 usercerts]#  kubectl   config  use-context magedu@kubernetes 
Switched to context "magedu@kubernetes".
[root@master01 usercerts]# 

验证

[root@master01 usercerts]#  kubectl   get ns
Error from server (Forbidden): namespaces is forbidden: User "magedu" cannot list resource "namespaces" in API group "" at the cluster scope
[root@master01 usercerts]# 
5.2、–context

为了方便 使用context ,可以直接在命令行指定

[root@master01 usercerts]#  kubectl   get ns
Error from server (Forbidden): namespaces is forbidden: User "magedu" cannot list resource "namespaces" in API group "" at the cluster scope
[root@master01 usercerts]# kubectl get ns --context= 
NAME              STATUS   AGE
default           Active   11d
dev               Active   7h43m
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d
longhorn-system   Active   11d
[root@master01 usercerts]# 

5.3、kubeconfig 的删除命令
[root@master01 usercerts]#  kubectl   config   delete-context  magedu@kubernetes 
deleted context magedu@kubernetes from /root/.kube/config

[root@master01 usercerts]#  kubectl   config   delete-user  magedu
deleted user magedu from /root/.kube/config
[root@master01 usercerts]# 
5.4 “合并 和 斩平”

​ export 变量同时 指定多个文件。 这样的后果是合并前有相同的列表项的话, 合并也会有 会重复。 比如有多个相同的集群名。

[root@master01 usercerts]# export KUBECONFIG="$HOME/.kube/config:/tmp/mykubeconfig"
[root@master01 usercerts]# kubectl config view 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubeapi.magedu.com:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:
    cluster: kubernetes
    user: magedu
  name: magedu@kubernetes

合并 斩平

[root@master01 usercerts]# kubectl  config view --merge --flatten > /tmp/newkubeconfig
RBAC授权控制

逻辑分类:

DAC(自主访问控制,默认不启用selinux 的情况下就是)、MAC( 强访问控制 如 selinux) 、RBAC、ABAC

k8s 支持的最好的2种 :RBAC、ABAC

RBAC 注意: 默认情况下 只允许定义的 规则 当中用户角色访问,没定义统统拒绝

RBAC 权限

​ API Server 是 RESTful风格的http/https服务。 所以权限指的是基于 http 方法:GET, POST, PUT, DELETE, PATCH 的操作等等。 这些操作 在RBAC 当中 叫 Action 行为/动作

​ 所以 权限指的是 什么Action能施加到哪些资源对象(object)上; 比如 GET Pods 、DELETE Namespaces

k8s 权限控制:
k8s 中和权限相关的四个资源类型:
Role:

​ 角色,名称空间级别;

role 和cluster role 定义了动作发出者(role/cluster) 可以在 资源对象上的操作【verb】.

[root@master01 usercerts]# kubectl  get role/kube-proxy -n kube-system -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: "2021-12-13T03:52:31Z"
  name: kube-proxy
  namespace: kube-system
  resourceVersion: "194"
  selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/kube-system/roles/kube-proxy
  uid: e1f858b7-4141-4d0e-b45a-dba60a59ec71
rules:
- apiGroups:
  - ""
  resourceNames:
  - kube-proxy
  resources:
  - configmaps
  verbs:
  - get
[root@master01 usercerts]# 

把 角色赋予权限,再把角色指派给人 (RoleBinding/ClusterRoleBinding)

ClusterRole:

​ 集群角色,全局级别;

RoleBinding:

​ “角色绑定”,指是将用户与角色关联起来,意味着,用户仅得到了特定名称空间下的Role的权限,作用范围也限于该名称空间;

ClusterRoleBinding:

​ 集群角色绑定,让用户扮演指定的集群角色;意味着,用户得到了是集群级别的权限,作用范围也是集群级别;

​ User --> Rolebindig --> ClusterRole:权限降级,ClusterRole,用户得到的权限仅是ClusterRole的权限在Rolebinding所属的名称空间上的一个子集;

能接受施加Verb的目标有三类:

​ resources:资源类型,该类型下的所有对象都是目标, pods;
​ resourceNames:特定的对象个体,pods/mypod;
​ nonResourceURLs:非资源型的URL,/status, 比如 pod/log (表示pod 中日志)

Verbs:

​ create、get、list、delete、patch、update

特殊绑定

Subject --> RoleBinding --> Roles
Subject --> ClusterRoleBinding --> ClusterRoles

这是2种正常 给用户 赋予角色的操作: 分别 是 用户被授权于 名称空间级别、集群级别的操作 。

通常来说 集群级别 就是全局级别 ,啥都能管。而名称空间级别 就是 只能管 特定名称空间下 特定一部分的动作,而不是所有。

所以也可以赋予 集群级别 在 特定名称空间下操作角色 。 也就是 在这个名称空间下,它具有所有权限 ,也就相当于 是这个名称空间下的管理员了 。

Subject --> RoleBinding --> ClusterRoles
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s_day07_02 的相关文章

随机推荐

  • day87(6.7函数的重载)

    1 函数的重载 函数的重载就是在同一个类中允许同时存在一个以上的同名函数 只要它们的参数个数或类型不同即可 在同一个类中可以定义多个 同名 方法 方法名重载 overload public class PrintStream public
  • Python兼职半月赚了5570元:边学习边赚钱真的很爽!

    前几天去参加朋友聚会 还没聊几句 就看到阿杰手机 叮 地一声 弹出一条推送 支付宝已到账 5570元 我开玩笑说 你暑假都有这么多生活费啊 羡慕了 快乐都是别人的 没想到阿杰说 除了管爸妈要生活费 我还不能搞点副业儿养活自己吗 我不酸 仔细
  • 尽量使用 useReducer,不要使用 useState

    原文 useReducer don t useState 本文难度 入门级别 本文默认你已经大概了解过 React Hooks 如果不了解可以先看看 ReactJS 的文档 当开发者们开始在他们的应用中使用 React Hooks API
  • DSP28335的RS232串口通讯试验

    目录 前言 一 理论部分 基本概念 SCI数据格式 管脚定义 逻辑电平规定 波特率 二 F28335配置RS232串口通讯 DSP28335SCI控制框图 寄存器配置 三 验证 验证思路 试验环境 关键程序 试验结果 前言 串口通信 Ser
  • JS——面向对象

    文章目录 1 class继承 1 class继承 定义一个类 属性和方法 定义一个学生类 class Student constructor name this name name hello alert Hello var xiaomin
  • 基于机器视觉的水果检测算法实现

    一 摘要 这是一款基于卷积神经网络和数字图像处理的智能水果检测和分类系统 由检测 分类两个部分组成 通过互联网下载和使用多媒体处理工具对水果拍摄视频剪辑处理得到大量水果图片 对图片进行标定获得数据集 并将数据集分成训练集和测试集 检测部分使
  • 基于二阶锥规划(SOCP)松弛和线性离流的配电网规划(DNP)方法示例(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 配电网最优潮流 Optimal Power Flow OPF 问题是指在满足一定约束条件的情况下 通过控制配电网中的可控变量 使配电网达到优化运行的目的 由于OPF
  • 手把手教你搭建优雅的ssm框架(完整)

    直接开始搭建 使用的是idea工具 新建一个maven项目 加入框架支持 点开目录后 你会发现里面缺少目录 我们自己创建一下 在pom xml中添加依赖 这些依赖必不可少 后面可以根据需求自己添加
  • 第十四届蓝桥杯国赛python青少组题目

    LQGS14PB01 时间限制 3000MS 内存限制 589824KB 题目描述 编程实现 注 input 输入函数的括号中不允许添加任何信息 给定一个字符串S S长度 lt 100 统计字符串中字母一共有多少个 例如 S 1Abb 其中
  • keil 软件如何生成.hex文件

    1 当程序编译通过没错误了 按照下图步骤勾选 点击魔术棒 output界面 勾选hex 2 勾选完点击ok 再对程序进行编译 出现下图内容 则生成hex文件成功
  • C++ 学习笔记(二)

    C 继承与派生 1 公有继承 是指在源生一个类时继承方式为public的继承方式 在public继承方式下 基类成员在派生类中的访问权限为 基类的公有和保护成员的访问属性在派生类中不变而基类的私有成员不可访问 即基类的公有成员和保护成员被继
  • Vue中 element的table表格导入 与 导出为excel表格的实现

    Vue中 element的table表格导入 与 导出为excel表格的实现 一 导入 2 1 安装xlsx插件 2 2 新建导入功能组件 2 3 注册全局的导入excel组件 2 4 创建导入路由组件 2 5 封装导入接口 实现excel
  • QM二面

    目录 如何在笔记本上添加永久路由 扩展 Linux如何查看并杀死进程 模拟场景 动态路由协议和DNS的共同之处 如何在笔记本上添加永久路由 route print 查看路由表 添加路由的命令 route add 网段 mask 子网掩码 网
  • 从二叉树到堆排序

    目录 一 树 1 树的基本概念 2 二叉树 1 最常见表示二叉树的方法 2 满二叉树 3 完全二叉树 4 二叉树的性质 5 存储结构 二 堆 1 逻辑结构与存储结构 2 堆的特性 3 向下调整算法 4 建堆 5 堆排序 一 树 1 树的基本
  • 数据库模糊查询

    常用的模糊查询语句有 1 like 查询姓李的同学 使用like like 结合 代表多个字符 代表一个字符 SELECT id myname FROM aaa WHERE myname LIKE 李 like的用法就像我们使用百度搜索时啊
  • MQTT通讯之连接MQTT服务器

    根据 添加链接描述 和 添加链接描述 我的APP已经成功连接上MQTT服务器 至于怎么发布和接收 正在研究 研究好了 发上来 作者写的代码是Java的 但现在都推荐Kotlin 我就把转好的Kotlin代码发出来 package com e
  • Anaconda Python Pytorch (GPU) 配置

    目录 0 写在前面 1 Anaconda下载 1 1 下载 1 2 安装 1 2 1 设置安装路径 1 2 2 两个都勾上 1 3 查看conda版本 2 CUDA及cuDNN 2 1 查看是否可以安装CUDA 2 2 CUDA和Pytor
  • 【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)

    目录 一 Java概述 1 何为编程 2 什么是Java 3 jdk1 5之后的三大版本 4 Jdk和Jre和JVM的区别 5 什么是跨平台性 原理是什么 6 Java语言有哪些特点 7 什么是字节码 采用字节码的最大好处是什么 8 什么是
  • 什么是芯片?

    https zhuanlan zhihu com p 228757435 utm source weibo utm medium social utm oi 895441374156029952 utm content snapshot 什
  • k8s_day07_02

    k8s day07 02 静态密码方式认证k8s kubeconfig 1 kubeconfig 配置文件 在 etc kubernetes 有conf 结尾的文件 那个就是kubeconfig 类型的配置文件 用于控制节点组件 和api交