【K8S 云原生】K8S的安全机制

目录

一、K8S安全机制概述

1、概念

2、请求apiserver资源的三个步骤:

一、认证:Anthentcation

1、认证的方式:

1、HTTP TOKEN:

2、http base:

3、http证书:

2、认证的访问类型:

3、签发证书:

二、鉴权

1、概念:

2、API Server 目前支持以下几种授权策略:

三、准入控制

四、实验


一、K8S安全机制概述

1、概念

K8S中的安全机制,分布式的集群管理工具,就是容器编排。

安全机制的核心:apiserver作为整个集群内部通信的中介,也是外部控制进入的入口

所有的apiserver都是围绕apiserver来设计的

2、请求apiserver资源的三个步骤:

1、认证

2、鉴权

3、准入控制

三个条件通过了,才能在K8S集群中创建

一、认证:Anthentcation

1、认证的方式:

1、HTTP TOKEN:

通过token识别合法用户。token是一个很长,很复杂的一个字符串,字符串是用来表达客户的一种方式

每一个token对应一个用户名,用户名存储在apiserver能够访问的文件中

客户端发起请求时,http haeder中包含token

客户端发起请求—token—apiserver(验证用户名存储文件)—解码—用户名—访问集群

2、http base:

用户+密码的验证方式。用户名和密码都是通过base64进行加密,加密完成的字符串,http request的haeder Atuthorization发送给服务端。服务端收到加密字符串,解码,获取用户名名和密码,验证通过,登录成功

3、http证书:

面向公众来说,他是最严格的方式,也是最严谨的方式。基于CA根证书签名的客户端身份验证进行验证

2、认证的访问类型:

K8S组件对apiserve组件的访问。kubelet,kube-proxy

pod对apiserver的访问。pod-corndns,dashborad,也需要访问api

客户端kubectl访问

kubelet、kube-proxy

controller-manager、scheduler与apiserver在一台服务器,可以直接使用apiserver的非安全端口进行访问。

kubectl、kubelet、kube-proxy都是通过apiserver的http证书,进行双向验证,都是用6443端口进行验证

3、签发证书:

1、手动签发,二进制部署就是手动签发证书。CA签发—把证书匹配到每个对应组件。然后访问6443即可

2、自动签发,kubeadm就是自动签发。kubelet第一次访问apiserver使用token认证,token通过之后,controller-manager会为kubelet生成一个证书

以后都是通过证书访问。kubeadm部署时修改了证书的有效期。默认1年,改成10年

3、kubeconfig,这个文件包含集群的参数,CA证书,apiserver地址,客户端的参数(客户端证书和私钥),集群的名称和用户名。

K8S中的组件通过启动时指定访问不同的kubeconfig文件,可以访问不同的集群—apiserver—namespace—资源对象—pod—容器

kubeconfig即使集群的文件,也是一个集群信息的保存文件,包含集群访问方式和认证信息

一般都在家目录下 ~/.kube/config 这个文件保存的是kubectl的访问认证信息

4、serviceAccount:

serviceAccount就是为了方便pod中的容器来访问apiserver。pod动态的的动作(增删改查),每个pod手动生成证书就不现实了。于是K8S就使用了serviceAccount来进行循环验证,service Account里面包含了统一的认证信息,直接进行apiserver访问

5、Secret,保存资源对象

serviceAccount,保存的token,service-account-token

Secret保存到的是自定义的保密信息

6、serviceAccount保存的信息

token:

ca.crt

namespace

都会被自动的挂载到pod中去

二、鉴权

1、概念:

之前的认证过程,只是确认了双方都是可信的,可以互相通信的,鉴权是为了确定请求方的访问权限,能做哪些操作

之前搭建K8S进行的角色操作kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user kubernetes-admin
#创建用户,给权限,绑定集群

2、API Server 目前支持以下几种授权策略:

1、AlwaysDeny:拒绝所有,一般是测试

2、AlwaysAllow:允许所有,用于测试

3、ABAC attribute-based access control:基于属性的访问控制

4、webhook:外部访问集群内部的鉴权方式

5、RBAC role-base access control:基于角色的访问控制,K8S最常用的规则,也是K8S现在默认的规则机制

角色:role,指定命名空间的资源控制权限

角色绑定:rolebinding,将角色绑定到指定的命名空间

集群角色:clusterrole,可以授权所有命名空间的资源控制权限

集群角色绑定:clusterrolebinding,将集群的角色绑定到命名空间

三、准入控制

准入控制是apiserver的一个准入控制器的插件列表,不同的插件可以实现不同的准入控制机制

一般情况下,建议使用官方默认的准入控制器

limitRanger(命名空间的配额管理)、serviceAccount、resourceQuota(命名空间的配额限制)都属于准入控制器

四、实验

实验目的:实现不同用户管理自己的命名空间

创建一个用户:

useradd lucky
passwd lucky
#创建用户lucky密码su - lucky
#切换用户kubectl get pods
#创建lucky-cloud,lucky用户只能管理lucky-cloud命名空间,其他命名空间没权限

创建用于用户连接到 API Server 所需的证书和 kubeconfig 文件

先上传证书生成工具 cfssl、cfssljson、cfssl-certinfo 到 /usr/local/bin 目录中

chmod +x /usr/local/bin/cfssl*mkdir /opt/lucky
cd /opt/luckyvim user-cert.sh
#写脚本cat > lucky-csr.json <<EOF
{"CN": "lucky","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "BeiJing","L": "BeiJing","O": "k8s","OU": "System"}]
}
EOF
#API Server 会把客户端证书的 CN 字段作为 User,把 names.O 字段作为 Group

chmod +x user-cert.sh
./user-cert.shcd /etc/kubernetes/pki/
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/lucky/lucky-csr.json | cfssljson -bare lucky 
#/etc/kubernetes/pki/ 目录中会生成 lucky-key.pem、lucky.pem、lucky.csr

cd /opt/luckyvim rbac-kubeconfig.sh
APISERVER=$1
# 设置集群参数
export KUBE_APISERVER="https://$APISERVER:6443"
kubectl config set-cluster kubernetes \--certificate-authority=/etc/kubernetes/pki/ca.crt \--embed-certs=true \--server=${KUBE_APISERVER} \--kubeconfig=lucky.kubeconfig# 设置客户端认证参数
kubectl config set-credentials lucky \--client-key=/etc/kubernetes/pki/lucky-key.pem \--client-certificate=/etc/kubernetes/pki/lucky.pem \--embed-certs=true \--kubeconfig=lucky.kubeconfig# 设置上下文参数
kubectl config set-context kubernetes \--cluster=kubernetes \--user=lucky \--namespace=lucky-cloud \--kubeconfig=lucky.kubeconfig

kubectl create namespace lucky-cloud
#创建lucky-cloud命名空间
chmod +x rbac-kubeconfig.sh
./rbac-kubeconfig.sh 20.0.0.61

# 使用上下文参数生成 lucky.kubeconfig 文件
kubectl config use-context kubernetes --kubeconfig=lucky.kubeconfig

#查看证书
cat lucky.kubeconfig

mkdir /home/lucky/.kube
cp lucky.kubeconfig /home/lucky/.kube/config
chown -R lucky:lucky /home/lucky/.kube/

RBAC授权

vim rbac.yamlapiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: lucky-cloudname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list", "create"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: lucky-cloud
subjects:
- kind: Username: luckyapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.iokubectl apply -f rbac.yamlkubectl get role,rolebinding -n lucky-cloud
kubectl apply -f rbac.yamlkubectl get role,rolebinding -n lucky-cloud

创建在

vim pod-test.yamlapiVersion: v1
kind: Pod
metadata:name: pod-testnamespace: lucky-cloud
spec:containers:- name: nginximage: nginx

kubectl create -f pod-test.yaml

切换用户,测试操作权限

su - lucky

用户能对lucky-cloud命名空间进行操作

但是访问svc会被拒绝,访问其他命名空间也会被拒绝

RoleBinding 的用户只能管理指定的命名空间中的资源

也可以通过绑定 admin 角色,来获得管理员权限

kubectl create rolebinding lucky-admin-binding --clusterrole=admin --user=lucky --namespace=lucky

增加rbac角色权限:

回到lucky用户,测试权限:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/245920.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fluent Bit配置与使用——基于版本V2.2.2

Fluent Bit日志采集终端 文档适用版本&#xff1a;V2.2 1、日志文件处理流程 数据源是一个普通文件&#xff0c;其中包含 JSON 内容&#xff0c;使用tail插件记录日志&#xff0c;通过parsers进行格式化匹配&#xff08;图里没写&#xff09;&#xff0c;通过两个筛选器&…

VR数字展厅,平面静态跨越到3D立体化时代

近些年&#xff0c;VR的概念被越来越多的人提起&#xff0c;较为常见的形式就是VR数字展厅。VR数字展厅的出现&#xff0c;让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新&#xff0c;同时也意味着展览传播的方式不再局限于原来的图文、视频&#xff0c;而是…

2024年新提出的算法:一种新的基于数学的优化算法——牛顿-拉夫森优化算法|Newton-Raphson-based optimizer,NRBO

1、简介 开发了一种新的元启发式算法——Newton-Raphson-Based优化器&#xff08;NRBO&#xff09;。NRBO受到Newton-Raphson方法的启发&#xff0c;它使用两个规则&#xff1a;Newton-Raphson搜索规则&#xff08;NRSR&#xff09;和Trap Avoidance算子&#xff08;TAO&#…

花式沉默Defender

编者注&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动&#xff0c;任何后果由使用者本人负责。 前言 总结了一下现在还能用的关闭Defender的方法&#xff0c;部分是原创&#xff0c;一部分借鉴的大佬。觉得字多的同学可以直接跳过思路查看步骤进行实操。 修改注册…

Git Docker 学习笔记

注意&#xff1a;该文章摘抄之百度&#xff0c;仅当做学习笔记供小白使用&#xff0c;若侵权请联系删除&#xff01; 目录 列举工作中常用的几个git命令&#xff1f; 提交时发生冲突&#xff0c;你能解释冲突是如何产生的吗&#xff1f;你是如何解决的&#xff1f; git的4个…

腾讯云轻量应用Windows服务器如何搭建幻兽帕鲁Palworld私服?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…

如何阅读xml电子发票

xml电子发票是官方给出的电子存档的文件格式&#xff0c;本质是文本&#xff0c;所以文件很小&#xff0c;大量发票存储&#xff0c;能够更加凸显优势。 但是xml电子发票不方便阅读&#xff0c;因为里面是xml格式&#xff0c;对于财务人员来讲&#xff0c;看“代码”简直太难了…

C语言实现希尔排序算法(附带源代码)

希尔排序 希尔排序&#xff0c;也称递减增量排序算法&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0…

苹果笔记本MacBook电脑怎么卸载软件?三种方法快速卸载软件

苹果笔记本MacBook电脑是一款非常流行的电脑&#xff0c;但是有时候我们可能需要卸载一些不需要的软件。下面是一些简单的步骤&#xff0c;可以帮助您在MacBook电脑上卸载软件。 苹果笔记本MacBook电脑怎么卸载软件&#xff1f;三种实用方法快速卸载软件&#xff01; 方法一&a…

Java强训day4(选择题编程题)

选择题 接口中的方法是为了让重写编程题 题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a_b sc.nextInt();int b_c sc.nextInt();int ab sc.nextInt();int bc sc.nextInt();for(in…

【C++】入门

结束数据结构初阶的学习后&#xff0c;很高兴继续学习C&#xff0c;欢迎大家一起交流~ 目录 C关键字 命名空间 命名空间定义 命名空间使用 C输入&输出 缺省参数 缺省参数概念 缺省参数分类 函数重载 函数重载概念 C支持函数重载的原理--名字修饰 引用 引用概念…

选择排序(堆排序和topK问题)

选择排序 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 如果我们用扑克牌来举例&#xff0c;那么选择排序就像是提前已经把所有牌都摸完了&#xff0c;而再进行牌…

Google Chrome RCE漏洞 CVE-2020-6507 和 CVE-2024-0517 流程分析

本文深入研究了两个在 Google Chrome 的 V8 JavaScript 引擎中发现的漏洞&#xff0c;分别是 CVE-2020-6507 和 CVE-2024-0517。这两个漏洞都涉及 V8 引擎的堆损坏问题&#xff0c;允许远程代码执行。通过EXP HTML部分的内存操作、垃圾回收等流程方式实施利用攻击。 CVE-2020-…

网络编程套接字(1)

网络编程基础 为什么需要网络编程? --丰富的网络资源 用户在浏览器中,打开在线视频网站,如优酷看视频,实质通过网络,获取到网络上的一个视频资源 与本地打开视频文件类似,只是视频文件这个资源的来源是网络. 相比于本地资源来说,网络提供了更为丰富的网络资源: 所谓的网络…

uniapp状态管理Vuex介绍及vuex核心概念

状态管理Vuex Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 uni-app 内置了 Vuex 什么是“状态管理模式”&#xff1f; <!…

要做接口并发性能测试,总得先学会分析吧!

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

电脑自动开机播放PPT的解决方案

客户有个需求&#xff0c;要求与LED大屏幕连接的电脑定时自动播放PPT。为了安全电脑在不播放的时段&#xff0c;必须关机。 目录 1、使用“时控插座”并进行设置 2、戴尔电脑BIOS设置&#xff08;上电开机&#xff09; 3、设置Windows自动登录 4、任务计划设置 5、启动Au…

谷粒商城【成神路】-【1】——项目搭建

目录 &#x1f95e;1.整体架构图 &#x1f355;2.微服务划分图 &#x1f354;3.开发环境 &#x1f354;4.搭建git &#x1f32d;5.快速搭建服务 &#x1f37f;6.数据库搭建 &#x1f9c2;7.获取脚手架 &#x1f953;8.代码生成器 &#x1f373;9.创建公共模块 …

springboot优雅停机

import org.springframework.context.annotation.Configuration;import javax.annotation.PreDestroy;Configuration public class DataBackupConfig {PreDestroypublic void backData(){System.out.println("开始备份..."System.currentTimeMillis());System.out.pr…

GPT-5不叫GPT-5?下一代模型会有哪些新功能?

OpenAI首席执行官奥特曼在上周三达沃斯论坛接受媒体采访时表示&#xff0c;他现在的首要任务就是推出下一代大模型&#xff0c;这款模型不一定会命名GPT-5。虽然GPT-5的商标早已经注册。 如果GPT-4目前解决了人类任务的10%&#xff0c;GPT-5应该是15%或者20%。 OpenAI从去年开…