Kubernetes 安全秘籍:5 个你必须知道的知识点

Kubernetes 安全和身份验证是确保集群和应用安全的关键。今天将深入探讨 Service Account、身份验证和RBAC的关键概念和实践,帮助您构建安全可靠的应用。今天本文将着重于安全相关的内容,并提供更详细的示例和配置说明,帮助兄弟们更深入地理解和应用 Kubernetes 安全和身份验证机制。

Kubernetes Service Account

Service Account 是 Kubernetes 中用于为 Pod 提供身份和凭据的资源。它允许 Pod 访问 Kubernetes API 和其他资源,而无需使用用户凭据。
在这里插入图片描述

Service Account 工作原理

1.1 Service Account 生命周期

Service Account 的生命周期包括以下阶段:

创建: 创建 Service Account 资源。

绑定: 将 Service Account 绑定到 Pod 或其他资源。

使用: Pod 或其他资源使用 Service Account 的身份和凭据访问 Kubernetes API 或其他资源。

删除: 删除 Service Account 资源。

1.2 Service Account 凭据

Service Account 拥有以下两种类型的凭据:

Token: 用于 Pod 访问 Kubernetes API 的令牌。

Secret: 用于 Pod 访问其他资源的密钥。

2. Service Account 实践

2.1 使用默认 Service Account

每个命名空间都包含一个默认的 Service Account,名为 default。Pod 可以使用默认 Service Account 访问 Kubernetes API 和其他资源,无需显式绑定。

2.2 创建自定义 Service Account

您可以创建自定义 Service Account 来满足特定需求。例如,您可以创建具有不同权限或用于访问不同资源的 Service Account。

2.3 绑定 Service Account

您可以将 Service Account 绑定到 Pod 或其他资源。绑定 Service Account 时,您可以指定要使用的 Service Account 以及要授予的权限。

3. Service Account 高级特性

3.1 使用 Automount Service Account Token

您可以使用 automountServiceAccountToken 字段自动将 Service Account 令牌挂载到 Pod 中。这使得 Pod 可以更容易地访问 Kubernetes API。

3.2 使用 Service Account Token 注入

您可以使用 serviceAccountToken 字段将 Service Account 令牌注入到 Pod 的环境变量中。这使得 Pod 可以更容易地访问其他资源。

3.3 使用 Service Account 与 RBAC 结合

您可以使用 RBAC 控制用户创建和修改 Service Account 的权限。您还可以使用 RBAC 控制 Pod 使用 Service Account 的权限。

4. Service Account 安全最佳实践

使用最小特权原则,仅授予 Service Account 必要的权限。

定期审核 Service Account,确保其符合最新需求。

使用安全扫描工具,例如 Clair,扫描 Service Account 凭据中的安全漏洞。

Kubernetes 身份验证

身份验证是 Kubernetes 安全的核心支柱之一,用于认证用户和 Pod 的身份。

认证流程:

  • 用户或 Pod 向 Kubernetes API Server 发送请求。
  • API Server 询问认证模块是否允许访问。
  • 认证模块根据配置的认证方式进行认证。
  • 如果认证成功,则 API Server 允许访问。
  • 如果认证失败,则 API Server 拒绝访问。
    在这里插入图片描述

认证方式

Kubernetes 支持多种认证方式,包括:

  • 本地认证: 使用本地用户名和密码进行认证。
  • LDAP 认证: 使用 LDAP 服务器进行认证。
  • OIDC 认证: 使用 OpenID Connect 认证。
  • 其他: 支持多种第三方认证插件。

1.1 本地认证

本地认证是最简单的认证方式,适用于小型集群或测试环境。

配置本地认证:

  • 创建一个名为 local-auth 的认证模块。
apiVersion: authentication.k8s.io/v1
kind: TokenReview
metadata:name: local-auth
spec:audiences:- kubernetes.io/serviceaccount- kubernetes.io/pod
  • 将 local-auth 认证模块绑定到 API Server。
apiVersion: kubeadm.k8s.io/v1
kind: InitConfiguration
metadata:name: init-config
spec:bootstrapTokens:- token: abcdefghijklmnopqrstuvwxyzttl: 24h0m0susages:- signing- authenticationlocalAPIEndpoint:advertiseAddress: 127.0.0.1nodeRegistration:kubeletExtraArgs:- --authentication-token-webhook-cache-ttl=2m0sserviceAccountKeyFile: /etc/kubernetes/pki/sa.keytoken: abcdefghijklmnopqrstuvwxyz---
apiVersion: kubeadm.k8s.io/v1
kind: ClusterConfiguration
metadata:name: cluster-config
spec:authentication:authenticator:name: local-auth

1.2 LDAP 认证

LDAP 认证适用于大型组织,可以使用现有的 LDAP 服务器进行认证。

配置 LDAP 认证:

创建一个名为 ldap-auth 的认证模块。

apiVersion: authentication.k8s.io/v1
kind: TokenReview
metadata:name: ldap-auth
spec:audiences:- kubernetes.io/serviceaccount- kubernetes.io/podtokenReview:spec:server: ldap://ldap.example.combindDN: cn=admin,dc=example,dc=combindPassword: secretbaseDN: dc=example,dc=cominsecure: true

将 ldap-auth 认证模块绑定到 API Server。

apiVersion: kubeadm.k8s.io/v1
kind: InitConfiguration
metadata:name: init-config
spec:bootstrapTokens:- token: abcdefghijklmnopqrstuvwxyzttl: 24h0m0susages:- signing- authenticationlocalAPIEndpoint:advertiseAddress: 127.0.0.1nodeRegistration:kubeletExtraArgs:- --authentication-token-webhook-cache-ttl=2m0sserviceAccountKeyFile: /etc/kubernetes/pki/sa.keytoken: abcdefghijklmnopqrstuvwxyz---
apiVersion: kubeadm.k8s.io/v1
kind: ClusterConfiguration
metadata:name: cluster-config
spec:authentication:authenticator:name: ldap-auth

1.3 OIDC 认证

OIDC 认证适用于需要与其他系统进行单点登录 (SSO) 的环境。

配置 OIDC 认证:

创建一个名为 oidc-auth 的认证模块。

apiVersion: authentication.k8s.io/v1
kind: TokenReview
metadata:name: oidc-auth
spec:audiences:- kubernetes.io/serviceaccount- kubernetes.io/podtokenReview:spec:issuer: https://oidc.example.comclientID: my-client-idclientSecret: my-client-secretextraScopes:- profile- email
  1. 将 OIDC 认证模块绑定到 API Server
apiVersion: kubeadm.k8s.io/v1
kind: InitConfiguration
metadata:name: init-config
spec:bootstrapTokens:- token: abcdefghijklmnopqrstuvwxyzttl: 24h0m0susages:- signing- authenticationlocalAPIEndpoint:advertiseAddress: 127.0.0.1nodeRegistration:kubeletExtraArgs:- --authentication-token-webhook-cache-ttl=2m0sserviceAccountKeyFile: /etc/kubernetes/pki/sa.keytoken: abcdefghijklmnopqrstuvwxyz---
apiVersion: kubeadm.k8s.io/v1
kind: ClusterConfiguration
metadata:name: cluster-config
spec:authentication:authenticator:name: oidc-auth

用户认证流程

  • 用户访问 Kubernetes API Server。
  • API Server 将请求转发给 OIDC 认证模块。
  • OIDC 认证模块将用户重定向到 OIDC 身份提供者进行认证。
  • 用户在 OIDC 身份提供者处输入身份信息并进行认证。
  • OIDC 身份提供者将认证结果返回给 OIDC 认证模块。
  • OIDC 认证模块生成一个 Kubernetes 令牌并返回给用户。
  • 用户使用Kubernetes 令牌访问 Kubernetes API Server。

代码示例
以下是一个使用 OIDC 认证进行登录的python示例代码:

import requests# OIDC 身份提供者 URL
oidc_provider_url = "https://oidc.example.com"# OIDC 客户端 ID
client_id = "my-client-id"# OIDC 客户端密钥
client_secret = "my-client-secret"# 重定向 URI
redirect_uri = "https://kubernetes.default.svc.cluster.local/auth/callback"# 请求授权代码
response = requests.get(f"{oidc_provider_url}/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&scope=profile email"
)# 解析授权代码
code = response.url.split("code=")[1]# 请求令牌
response = requests.post(f"{oidc_provider_url}/token",data={"grant_type": "authorization_code","code": code,"redirect_uri": redirect_uri,"client_id": client_id,"client_secret": client_secret,},
)# 解析令牌
access_token = response.json()["access_token"]# 使用令牌访问 Kubernetes API Server
response = requests.get("https://kubernetes.default.svc.cluster.local/api/v1/nodes",headers={"Authorization": f"Bearer {access_token}"},
)# 打印响应
print(response.text)

关注我,我们一起学习更多知识,带你了解更多职场信息内容.

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

机器人期刊:Science Robotics and IEEE Transactions

文章目录 1. Science Robotics (出版商 AAAS)2. IEEE Transactions on RoboticsReference1. Science Robotics (出版商 AAAS) https://www.science.org/journal/scirobotics 2. IEEE Transactions on Robotics

10kV/35kV并网分布式光伏系统-实现错峰有序用电

根据国家电网 Q/GDW1480-2015 《分布式电源接入电网技术规定》:分布式电源并网电压等级可根据各 并网点装机容量进行初步选择,推荐如下: • 8kW 及以下可接入 220V ; • 8kW~400kW 可接入 380V ; • 400kW~60…

【Appium问题】每次启动appium都会安装一次uiautomator

问题 每次启动appium,都需要安装一次uiautomator2比较麻烦 解决 在配置文件capabilities 中增加参数skipServerInstallationTrue

【C++专栏】C++入门 | 函数重载、引用、内联函数

博客主页:Duck Bro 博客主页系列专栏:C专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ C入门 | 函数重载、引用、内联函数 文章编号:C入门 / 02 文…

ORACLE RAC反应卡顿时enq: SV - contention和latch: row cache objects的分析

某客户数据库系统使用ORACLE RAC 11G版本,两个节点。在上午8点钟之后,业务开始大量进行时,出现严重的卡顿问题;在工程师分析后,发现当时出现了很多异常等待数据,如典型的enq: SV - contention 、enq: TX - …

基于单片机的老人防丢系统设计

目 录 摘 要 I Abstract II 引 言 3 1 系统总体架构 6 1.1方案设计与选择 6 1.2 系统架构设计 6 1.3 系统器件选择 7 2 系统硬件设计 9 2.1 单片机外围电路设计 9 2.2 LCD1602液晶显示电路设计 12 2.3 短信模块电路设计 14 2.4 GPS模块电路设计 14 2.5 电源与按键控制电路设计…

Mybaties-Plus saveBatch()、自定义批量插入、多线程批量插入性能测试和对比

一.背景 最近在做一个项目的时候,由于涉及到需要将一个系统的基础数据全量同步到另外一个系统中去,结果一看,基础数据有十几万条,作为小白的我,使用单元测试,写了一段代码,直接采用了MP(Mybati…

element---tree树形结构(返回的数据与官方的不一样)

项目中要用到属性结构数据&#xff0c;后端返回的数据不是官方默认的数据结构&#xff1a; <el-tree:data"treeData":filter-node-method"filterNode":props"defaultProps"node-click"handleNodeClick"></el-tree>这是文档…

SpringCloudGateway全局过滤器

文章目录 全局过滤器的作用自定义全局过滤器过滤器执行的顺序 上一篇 Gateway理论与实践 介绍的过滤器&#xff0c;网关提供了31种&#xff0c;但每一种过滤器的作用都是固定的。如果我们希望拦截请求&#xff0c;做自己的业务逻辑则没办法实现。 全局过滤器的作用 全局过滤器的…

高级语言讲义2010计专(仅高级语言部分)

1.编写一程序&#xff0c;对输入的正整数&#xff0c;求他的约数和。 如&#xff1a;18的约数和为1236939 #include <stdio.h>int getsum(int n){int i,sum0;for(i1;i<n;i)if(n%i0)sumi;return sum; } int main(){int sum getsum(18);printf("%d",sum); …

JS直接量及其相关对象

什么是直接量 直接量是指不需要创建对象就可以直接使用的变量。ES中的直接量主要有三种类型&#xff1a;表示字符串的string类型、表示数字的number类型和表示true/false的boolean类型。当我们直接将值赋给变量后&#xff0c;ES就会自动判断其类型&#xff0c;而且当参数发生变…

Android14之编译输出system/product/vendor/odm分区(一百九十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

深度学习相关概念及术语总结

目录 1.CNN2.RNN3.LSTM4.NLP5.CV6.正向传播7.反向传播8.sigmoid 函数9.ReLU函数10.假设函数11.损失函数12.代价函数 1.CNN CNN 是卷积神经网络&#xff08;Convolutional Neural Network&#xff09;的缩写。卷积神经网络是一种深度学习模型&#xff0c;专门用于处理具有网格状…

2024年3月ZZUACM 招新赛题解

2024年3月ZZUACM 招新赛 题号题目A区间次大值B上课签到C魔法森林&#xff08;一&#xff09;D魔法森林&#xff08;二&#xff09;ELOPF跳格子G猜数字H抽卡记录I安达的二维矩阵J安达的数字手术K跳楼梯L前缀和 A 区间次大值—循环/签到题 题目描述 给定一个 n n n的全排列 a i…

外包干了10天,技术退步明显···

先说一下自己的情况&#xff0c;本科生&#xff0c;通过校招进入杭州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&…

【鸿蒙开发】第十七章 Web组件(一)

1 Web概述 Web组件用于在应用程序中显示Web页面内容&#xff0c;为开发者提供页面加载、页面交互、页面调试等能力。 页面加载&#xff1a;Web组件提供基础的前端页面加载的能力&#xff0c;包括&#xff1a;加载网络页面、本地页面、html格式文本数据。 页面交互&#xff1a…

JAVA使用的工具类-Hutool

文章目录 Hutool工具类简介1&#xff1a;身份证工具类相关方法1.1 身份证脱敏处理 字符串补零处理(此处是JAVA类的方法&#xff0c;并无引用StrUtil)springboot前后端分离&#xff0c;后端返回json字符串带斜杠问题处理 在这里整理一下博主常用的工具类方法-hutool工具类,这里囊…

制定一份完美的测试计划,让您的产品质量更上一层楼!

大家好&#xff0c;我是彭于晏。今天学习测试计划如何书写。 虽然很多人日常工作中都知道测试计划是什么&#xff0c;但是写好测试计划&#xff0c;其实并不容易。今天就来一起学习下测试计划如何书写。 什么是测试计划&#xff1f; 测试计划是一份为软件产品所准备的详细文档…

目标检测——监控下打架检测数据集

一、简述 首先&#xff0c;监控下打架检测是维护公共安全的重要手段。在公共场所、学校、监狱等地方&#xff0c;打架事件往往难以避免。通过安装打架检测监控系统&#xff0c;可以实时监控并准确识别打架事件&#xff0c;及时采取必要的应对措施&#xff0c;有效地减少打架事…

RNN预测正弦时间点

import torch.nn as nn import torch import numpy as np import matplotlib matplotlib.use(TkAgg) from matplotlib import pyplot as plt # net nn.RNN(100,10) #100个单词&#xff0c;每个单词10个维度 # print(net._parameters.keys()) #序列时间点预测num_time_steps 50…