系列:7、 Kubernetes 安全性

2023-11-07

Kubernetes 安全性

我们将讨论 Kubernetes 安全性。 当我们在使用 Kubernetes 时,出于安全原因,我们有时会希望限制网络的访问或限制某些用户查看或运行某些命令等。

为此,我们必须使用不同的 Kubernetes 概念。

1、Network Policy(网络策略)

如果我们想限制来自或去往 Pod 的网络流量,我们需要定义一个 NetworkPolicy。

例如,如果我们想限制特定端口(比如 80 )到我们的 nginx Pod 的流量 以及 如果我们想限制来自 nginx 端口(比如 8080 )的流量,我们需要分别定义 Ingress 和 Egress 定义。 网络策略与带有标签的 Pod 相匹配。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: nginx-network-policy
spec:
  podSelector:
    matchLabels:
      role: lb
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    ports:
    - protocol: TCP
      port: 80
  egress:
  - to:
    ports:
    - protocol: TCP
      port: 8080

因此,此 NetworkPolicy 将应用于任何具有标签“role:lb”、限制 80 端口流量和 8080 端口流量的 Pod。

2、RBAC

Role-based access control(基于角色控制)是一种根据组织内个人用户的角色来调节对计算机或网络资源的访问的方法。

想象一下,在您的公司中,您有 50 人在 IT 部门工作,分为开发人员、测试人员和 DevOps。如果某些资源仅适用于 DevOps 人员(例如控制平面资源,因此开发人员和测试人员不会在这些资源上犯任何错误)并且该资源不应该对其他角色可见,那么我们可以通过定义 RBAC 来限制他们的访问。

我们可以定义一个角色或集群角色。

该角色仅适用于特定的命名空间。

顾名思义,ClusterRole 是集群范围的,并且它是非命名空间的。

因此,如果您需要对特定命名空间进行访问控制,请定义角色,不定义 ClusterRole。

创建角色后,我们必须根据需要和/或使用情况将它们绑定到 RoleBinding 或 ClusterRoleBinding。

应该在“verb”参数上提供用户/角色可能被允许的操作,该参数可以是下面列出的任何一个:

[get, list, watch, create, update, patch, delete]

请注意,Kubernetes 建议使用服务帐户(非人类帐户尝试进行身份验证),因此我们也必须创建服务帐户。

RBAC 可以定义为命令式和声明式。

出于学习目的,让我们创建上面提到的 3 个不同的角色,开发人员、测试人员和管理员。 开发人员将有权获取、列出和更新“developers”命名空间中的 Deployment 和 Pod,测试人员将有权列出“testers”命名空间中的 Pod,DevOps 将有权列出集群范围内的所有 Pod .

让我们从创建一个名为“developers”的命名空间开始:

kubectl create namespace developers

在这里插入图片描述

然后让我们使用命令式方法创建角色开发者:

kubectl create role dev-role --verb=get,list,create --resource=deployments,pods -n developers

在这里插入图片描述

用声明的方式创建,如下:

rbac.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: developers
  name: dev-role
rules:
- apiGroups: [""]
  resources: ["pods","deployments"]
  verbs: ["get", "list", "create"]

现在,如果我们想对单个用户使用它,我们将只为一个用户“ege”创建一个角色绑定:
在这里插入图片描述

这只是为了向您展示它会如何做。 但正如前面所提到的,Kubernetes 建议使用服务帐户,这将仅适用于用户“ege”,但实际上,我们不希望它仅适用于用户,而是适用于整个角色。 所以我们需要为此创建一个服务帐户:

kubectl create serviceaccount dev-sa -n developers

在这里插入图片描述

注意: Role 和 RoleBinding 应该在它们将被使用的特定命名空间上创建,但服务帐户可以在不同的命名空间上。

现在让我们再次将我们的角色开发者与创建的服务帐户绑定。

kubectl create rolebinding dev-sa-rb --role=dev-role --serviceaccount=developers:dev-sa

在这里插入图片描述

如上所示,当我们与服务帐户绑定时,我们首先编写命名空间,然后编写服务帐户的名称,如开发人员:dev-sa。

dev-sa.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-sa-rb
  namespace: developers
subjects:
- kind: ServiceAccount
  name: dev-sa
  namespace: developers
roleRef:
  kind: Role
  name: dev-role
  apiGroup: rbac.authorization.k8s.io

下面继续创建test角色以及进行角色绑定

创建命名空间:

kubectl create namespace testers

在这里插入图片描述

现在让我们在“testers”命名空间中创建对 Pod 具有“list”权限的角色

kubectl create role tester-role --verb=list --resource=pods -n testers

在这里插入图片描述

创建testers的服务账号:

kubectl create serviceaccount tester-sa

在这里插入图片描述

kubectl create rolebinding tester-rb --role=tester-role --serviceaccount=testers:tester-sa -n testers

在这里插入图片描述

为 devops 创建集群角色:

kubectl create clusterrole devops-role --verb=list --resource=pods

在这里插入图片描述

给devops创建服务账号:

kubectl create serviceaccount devops-sa

在这里插入图片描述

查询现有角色:

kubectl get roles

在这里插入图片描述

默认空间内无角色

kubectl get roles -n developers

在这里插入图片描述

kubectl get roles -n testers

在这里插入图片描述

产看角色详细信息:

kubectl describe role dev-role -n developers

在这里插入图片描述

核查访问权限:
在这里插入图片描述

答案是yes,因为我们是自己集群的管理员。 要检查其他用户,我们需要添加“–as

kubectl auth can-i delete deployments --as tester-sa

在这里插入图片描述

该用户无相关权限。

3、Security Context(安全上下文)

安全上下文定义 Pod 或容器的权限和访问控制设置。

当我们想以特定用户身份运行 Pod 或 Container 时,我们会使用安全上下文。 所以我们可以通过添加安全上下文来定义运行 Pod 的用户。

路径是“.spec.securityContext”。

样例 YAML 文件:

pod-security-context.yaml

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:
      allowPrivilegeEscalation: false

创建pod:

kubectl apply -f pod-security-context.yaml 

进入pod内:

kubectl exec -it security-context-demo  -- sh

在这里插入图片描述

我们可以在容器级别定义安全上下文。 请注意,容器级别的安全上下文将覆盖 Pod 级别。 例如:

pod-overide-sc.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 2000
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "sleep 1h"]
    securityContext:
      runAsUser: 2000

创建pod:

kubectl  apply -f pod-overide-sc.yaml

查看用户:

kubectl exec -it busybox -- sh

在这里插入图片描述

可以看到用户是2000

系列:1、Kubernetes 简介

系列:2、创建Kubernetes集群

系列:3、Kubectl 的使用

系列:4.1、Kubernetes 对象

系列:4.2、Kubernetes 工作负载

系列:4.3、Kubernetes 服务

系列:4.4、Kubernetes 存储

系列:4.5、Kubernetes 配置对象

系列:5、Kubernetes中的调度

系列:6、Kubernetes 的升级与部署策略

系列:7、 Kubernetes 安全性(本文)

系列:8、部署一个全栈应用

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

系列:7、 Kubernetes 安全性 的相关文章

随机推荐

  • Windows下php和apache的安装及启动

    php版本 php5 6 httpd版本 apache2 4 php5 6 在D盘下创建php文件夹 并在其下解压压缩包 修改系统变量PATH 末尾新增 D php D php ext httpd2 4 在D盘下创建Apache24文件夹
  • 操作系统复习知识点(第三章)

    处理机调度 1 高级调度 中级调度 低级调度 高级调度 根据某种算法 把外存上处于后备队列中的那些作业调入内存 作业调度 中级调度 为了提高内存利用率和系统吞吐量 使那些暂时不能运行的进程不再占用内存资源 将它们调至外存等待 把进程状态改为
  • HDU--1233:还是畅通工程 (并查集 & 最小生成树Prim)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1233 2 简单思路 先对村庄距离从小到大排序 然后使用并查集的查找 一边查找一边加上村庄之间的距离 从而得到可以走通所有村庄的最短距离 3
  • 根据年月日计算星期几的函数

    大部分日期计算正常 2014 04 01 星期2 计算出来的星期不正确 原因 计算出来的 w可能出现负值 求负数的余数需要特殊处理 需要按数论的计算方式求余数 网上很多代码存在此问题 少数日期计算不正确 解决 负数先转为正数求余 然后求补
  • Android源码编译环境搭建

    一 前言 Google自 2021 年 6 月 22 日起 不再支持在 MacOS 上进行Android平台开发 某些芯片厂家提供的Android SDK不支持低版本的Ubuntu 16 04 LTS及以下 故本篇文章以Ubuntu18 0
  • GNU AWK

    awk awk官方给出的是 pattern scanning and processing language即模式扫描处理语言 我们CentOS一般用的是GNU AWK 官方给出的语法有五种 我们只举例前两种使用格式 下面是语法 gawk
  • 使用java geotools进行坐标转换

    java geotools支持不同的坐标系之间进行转换 只需要转换的时候指定坐标系即可 pom依赖文件如下
  • 现在的00后,实在是太卷了

    现在的小年轻真的卷得过分了 前段时间我们公司来了个00年的 工作没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好 一大家子指望他一个人
  • Vulnhub入门实战-Wakanda

    下载链接 描述 1 探测主机的IP地址 2 使用nmap查看靶机开放端口 开放了4个端口 老样子先从http下手 3 进去发现没什么可以点的 于是进行目录扫描 状态码都是200 但是size为0 所以返回的都是空页面 查看主页源代码 发现一
  • Scrapy----Scrapy架构及工作流程

    原文链接 Scrapy Scrapy架构及工作流程 一 Scrapy架构图 scrapy的架构图如下 红色箭头表示工作流程 二 Scrapy的组成 Scrapy Engine Scrapy Engine主要用来协调数据流在Scrap各个组件
  • [蓝桥杯][2014年第五届真题]兰顿蚂蚁

    题目 题目链接 题解 DFS 没什么难的吧 可能实现的时候用时长短 代码简洁程度不同而已 代码 include
  • 《响应式Web设计实践》学习笔记

    第1章 无处不在的Web 1 4 成为响应式的 Ethan Marcotte利用三种已有工具 媒介查询 media queries 流动布局 fluid grids 和自适应图片 scalable images 创建了一个在不同分辨率屏幕下
  • 每日一道基础编程题目(牛客网)--基础编程篇(NO.1)

    文章目录 1 每日一道基础编程题目 牛客网 前言 题目引入 结语 1 每日一道基础编程题目 牛客网 前言 从今天起 我会日更一些编程题目 比较基础的 适合期末复习的题目 分享给大家 和大家一起进步 题目引入 首先我们先看一下这个代码 这个的
  • 邻桌为何一天就学完了SQL基础语法,数据分析必学的SQL,满满硬货

    因为开学原因 导致好久没有更新博客了 谁家大学生一周五天早八 今天这篇分享数据库操作和 SQL SQL 全称是 Structured Query Language 翻译后就是结构化查询语言 是一种数据库查询和程序设计语言 用于存取数据以及查
  • Eclipse SVN 更新报: “is too old(format10,createdbySubversion1.6)”解决方法

    原因 版本太低导致 更新一下就可以了 方法 项目上右键 Team upgrade
  • android 模拟点击localinstrumentation,android通过Instrumentation来模拟键盘点击操作

    android app Instrumentation好像原来是用来做测试的 可以用来模拟很多activity的操作 主要代码如下 package com qefee testinstrumentation import android a
  • 常用git和repo命令

    常用git和repo命令 文章收集了最近使用的一些repo和git命令 下图是个人理解的git文件状态转换图 更详细的Pro git 文档 更准确的应该是这样 相关概念 名称 意义 repo 谷歌用Python脚本写的调用git的一个脚本
  • 自动化测试_49自动化测试中最常见的Selenium异常

    自动化测试 开发人员将始终在编写代码时牢记不同的场景 但是在某些情况下 实现可能无法按预期工作 相同的原则也适用于测试代码 该代码主要用于测试现有产品的功能 发现bug并使产品100 无缺陷 正确地说 真理总是比小说更陌生 当您执行Sele
  • matlab 杨氏双缝干涉实验

    目录 一 算法原理 二 代码实现 三 结果展示 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 算法原理 杨氏双缝干涉实验是利用分波振面法获得相干光束的典型例子 如图1 所示 在普通单
  • 系列:7、 Kubernetes 安全性

    Kubernetes 安全性 我们将讨论 Kubernetes 安全性 当我们在使用 Kubernetes 时 出于安全原因 我们有时会希望限制网络的访问或限制某些用户查看或运行某些命令等 为此 我们必须使用不同的 Kubernetes 概