- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本文主要基于Kubernetes1.22.2和Linux操作系统Ubuntu 18.04.
服务器版本 | docker软件版本 | Kubernetes(k8s)集群版本 | CPU架构 |
---|---|---|---|
Ubuntu 18.04.5 LTS | Docker version 20.10.14 | v1.22.2 | x86_64 |
Kubernetes集群架构:k8scludes1作为master节点,k8scludes2,k8scludes3作为worker节点.
服务器 | 操作系统版本 | CPU架构 | 进程 | 功能描述 |
---|---|---|---|---|
k8scludes1/192.168.110.128 | Ubuntu 18.04.5 LTS | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master节点 |
k8scludes2/192.168.110.129 | Ubuntu 18.04.5 LTS | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
k8scludes3/192.168.110.130 | Ubuntu 18.04.5 LTS | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
在我们使用Kubernetes进行容器化部署时,经常需要为Pod设置特定的权限。这种权限管理通常通过Kubernetes的服务账号(Service Accounts)实现。然而,默认情况下,Service Account的token会自动挂载到对应的Pod中,这可能引发一些安全问题。因此,本文将介绍如何设置Service Account的token不自动挂载到Pod中.
设置Kubernetes(k8s)服务账号Service Accounts(sa)的token不挂载到pod的 前提 是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Ubuntu 安装部署Kubernetes(k8s)集群》 https://www.cnblogs.com/renshengdezheli/p/17632858.html.
Service Accounts(服务账户)通常用于计算机程序或操作系统中。它们不是普通用户账户,而是被某些应用程序或服务用于特定的、通常自动化的任务.
在Kubernetes(一个开源的容器编排平台)中,Service Accounts主要为Pod中运行的进程提供身份。与面向人类的普通用户不同,Service Accounts由Kubernetes集群内的Pods/服务使用.
关于Service Accounts的关键点:
它们是有命名空间的:可以为每个命名空间创建Service Accounts,并且不能跨命名空间访问(除非被赋予明确的权限).
默认情况下,当创建一个Pod时,Kubernetes会自动为其分配一个"default" Service Account,但你也可以创建并指定特定的Service Account.
Service Account 被绑定到一组角色(Roles),这些角色定义了 Service Account 的权限,例如对某些资源的读写权限等.
总的来说,Service Accounts 是一种安全和权限管理的机制,让我们能更好地控制在复杂环境中的应用程序和服务的访问权限.
默认情况下,Service Account的token会自动挂载到Pod内的应用程序使用。但在某些情况下,我们可能不希望token自动挂载,以避免潜在的安全风险。Service Accounts(sa)的token自动挂载到pod的方式具有安全隐患,假如我们拉取的镜像存有恶意代码,如果给了sa一个不正当的权限,pod使用这个sa权限的时候就可能干坏事,避免的方法有
关于Service Accounts(sa)的更多内容,请查看博客《 Kubernetes(k8s)服务账号Service Accounts 》.
不把Service Accounts(sa)的token挂载到pod有两种方法:
我们先使用第一种方法,现在没有pod.
root@k8scludes1:~/authorization# kubectl get pod
No resources found in authorization namespace.
pod.spec下有automountServiceAccountToken字段.
root@k8scludes1:~/authorization# kubectl explain pod.spec | grep automountService
automountServiceAccountToken <boolean>
查看automountServiceAccountToken参数的含义,automountServiceAccountToken字段的功能是:是否应自动挂载服务账户token.
root@k8scludes1:~/authorization# kubectl explain pod.spec.automountServiceAccountToken
KIND: Pod
VERSION: v1
FIELD: automountServiceAccountToken <boolean>
DESCRIPTION:
AutomountServiceAccountToken indicates whether a service account token
should be automatically mounted.
如下是pod的yaml文件,功能为:使用hub.c.163.com/library/nginx:latest镜像创建一个名为podtest的pod,不自动挂载sa的token到pod上.
root@k8scludes1:~/authorization# vim pod.yaml
root@k8scludes1:~/authorization# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: podtest
name: podtest
spec:
#automountServiceAccountToken: false:表示不会自动挂载服务账户token到Pod中。通常情况下,这个令牌用于授权Pod访问Kubernetes API。
automountServiceAccountToken: false
#terminationGracePeriodSeconds: 0:表示当需要关闭容器时,立即杀死容器而不等待默认的30秒优雅停机时长。
terminationGracePeriodSeconds: 0
containers:
- image: hub.c.163.com/library/nginx:latest
#imagePullPolicy: IfNotPresent:这表示如果本地不存在该镜像,则从远程仓库拉取。
imagePullPolicy: IfNotPresent
name: podtest
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
创建pod.
root@k8scludes1:~/authorization# kubectl apply -f pod.yaml
pod/podtest created
pod创建成功.
root@k8scludes1:~/authorization# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
podtest 1/1 Running 0 9s 10.244.218.143 k8scludes2 <none> <none>
进入pod,此时sa的token就没有挂载到pod上,应用程序就不可以使用token干坏事了.
root@k8scludes1:~/authorization# kubectl exec -it podtest -- bash
root@podtest:/# df -Th
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 97G 5.3G 87G 6% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/mapper/tom--vg-root ext4 97G 5.3G 87G 6% /etc/hosts
shm tmpfs 64M 0 64M 0% /dev/shm
tmpfs tmpfs 1.4G 0 1.4G 0% /proc/acpi
tmpfs tmpfs 1.4G 0 1.4G 0% /proc/scsi
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/firmware
#退出pod
root@podtest:/# exit
exit
删除pod.
root@k8scludes1:~/authorization# kubectl delete pod podtest
pod "podtest" deleted
默认存在一个名为default的sa.
root@k8scludes1:~/authorization# kubectl get sa
NAME SECRETS AGE
default 1 3d4h
生成创建sa的yaml文件.
root@k8scludes1:~/authorization# kubectl create sa satest --dry-run=client -o yaml >satest.yaml
sa的yaml文件如下:sa的名字为satest.
root@k8scludes1:~/authorization# cat satest.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: null
name: satest
sa有一个automountServiceAccountToken字段.
root@k8scludes1:~/authorization# kubectl explain sa | grep -A4 automountService
automountServiceAccountToken <boolean>
AutomountServiceAccountToken indicates whether pods running as this service
account should have an API token automatically mounted. Can be overridden
at the pod level.
查看sa的automountServiceAccountToken参数的含义,表示作为此服务账户运行的Pod是否应自动挂载API token,这可以在Pod级别被覆盖.
root@k8scludes1:~/authorization# kubectl explain sa.automountServiceAccountToken
KIND: ServiceAccount
VERSION: v1
FIELD: automountServiceAccountToken <boolean>
DESCRIPTION:
AutomountServiceAccountToken indicates whether pods running as this service
account should have an API token automatically mounted. Can be overridden
at the pod level.
修改sa的yaml文件,设置automountServiceAccountToken: false,这样设置之后,pod以satest的身份运行之后,默认是不挂载satest的token到pod上的.
root@k8scludes1:~/authorization# vim satest.yaml
root@k8scludes1:~/authorization# cat satest.yaml
apiVersion: v1
kind: ServiceAccount
automountServiceAccountToken: false
metadata:
creationTimestamp: null
name: satest
创建sa.
root@k8scludes1:~/authorization# kubectl apply -f satest.yaml
serviceaccount/satest created
sa创建成功.
root@k8scludes1:~/authorization# kubectl get sa
NAME SECRETS AGE
default 1 3d4h
satest 1 4s
如下是pod的yaml文件,功能为:使用hub.c.163.com/library/nginx:latest镜像创建一个名为podtest的pod,并且pod以satest的身份运行.
root@k8scludes1:~/authorization# vim pod.yaml
root@k8scludes1:~/authorization# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: podtest
name: podtest
spec:
#terminationGracePeriodSeconds: 0 表示当需要关闭容器时,立即杀死容器而不等待默认的30秒优雅停机时长。
terminationGracePeriodSeconds: 0
containers:
- image: hub.c.163.com/library/nginx:latest
#imagePullPolicy: IfNotPresent:表示如果本地已经存在该镜像,则不重新下载;否则从远程 Docker Hub 下载该镜像
imagePullPolicy: IfNotPresent
name: podtest
resources: {}
#serviceAccount: satest表示pod以satest的身份运行
serviceAccount: satest
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
创建pod.
root@k8scludes1:~/authorization# kubectl apply -f pod.yaml
pod/podtest created
pod创建成功.
root@k8scludes1:~/authorization# kubectl get pod
NAME READY STATUS RESTARTS AGE
podtest 1/1 Running 0 5s
进入pod,sa的token没有挂载到pod.
root@k8scludes1:~/authorization# kubectl exec -it podtest -- bash
#sa的token没有挂载到pod
root@podtest:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 97G 5.3G 87G 6% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/mapper/tom--vg-root ext4 97G 5.3G 87G 6% /etc/hosts
shm tmpfs 64M 0 64M 0% /dev/shm
tmpfs tmpfs 1.4G 0 1.4G 0% /proc/acpi
tmpfs tmpfs 1.4G 0 1.4G 0% /proc/scsi
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/firmware
root@podtest:/# exit
exit
本文介绍了如何在Kubernetes中设置Service Account的token不自动挂载到Pod中,以增强系统的安全性。希望本文能够帮助你更好地理解和使用Kubernetes的Service Account.
最后此篇关于设置服务账号ServiceAccounts(sa)的token不挂载到pod的文章就讲到这里了,如果你想了解更多关于设置服务账号ServiceAccounts(sa)的token不挂载到pod的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
请提出建议。 我正在使用以下查询来查找数据。 select * from material_1a where spec_no ="SA-181"; 如何使用 查找所有记录 select * from
目录 1、mall开源项目 1.1 来源 1.2 项目转移 1.3 项目克隆
目录 一.系统环境 二.前言 三.Service Accounts(sa)简介 四.在pod里设置sa的token不
Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题。 Gitee 开源地址: https:
简介 OpenHarmony 很多服务都是编译成动态库, 动态库服务,没有main函数入口。服务的拉起的入口在哪? 以在线升级服务为例说明服务入口,说明如下: 一. 服务的动态库:libu
除了 [sa] 用户,我在 sysadmin 中没有用户 不幸的是,我以 [sa] 用户身份登录并禁用了它 那么我无法启用它,我该怎么做才能再次启用它? 最佳答案 您必须使用 sqlcmd.exe与
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有一个带有 的 jdbc 属性文件 database.username=mfuser database.password=mfuser 如果我将其更改为 user/pass --> sa/pass,
我有一台服务器已经将近 4 年了,直到现在我都没有遇到任何问题(主机端)。我一直在更换主机,因为 ddos 的东西试图找到最适合我的东西。现在我买了一个 VPS(这不是我的第一个)并尝试运行我的服
使用 phoenix,规则如下: start_ = ( Rule1[SA1] >> +Rule2[SA2] >> Rule3 ) [ SA ]; 是否正确,在 SA 中, _1 是 Rule1 的属性
我有一个方法 DateToString(DateTime datetime, string format, CultureInfo cultrueInfo) { return datetime
我正在使用 Spring Boot 创建类(class)和主题数据库。一旦我对类(class)类(class)进行了更改,就会出现一堆错误,我遇到了麻烦。我不确定出了什么问题。以下是错误消息: ER
今天下载了一个msde2000A,本想按照平时的安装习惯,找到了setup.exe安装程序,错误提示弹出一个对话框:“为了安全起见,要求使用强 SA 密码。请使用SAPWD开关提供同一密码。有关详细
我在 QT 中编写了一个程序,该程序使用以下代码连接到 SQL Server Express DB QSqlDatabase db = QSqlDatabase::addDatabase("Q
我的一位同事的VPN连接有问题。似乎他的操作系统重设了代理设置,并且他需要手动将其更改回。有没有办法使用Powershell设置VPN和代理? 他正在使用Windows 7,因此可以使用Powersh
我有一个网站,今天查看日志,我发现我的服务器对页面的一些请求附加了此变量&sa=U&ei。 你们能告诉我 &sa=U&e 是什么意思吗?可能是寻找可空票据的尝试吗?可能是安全威胁吗? &sa=U&ei
我正在安装 DotNetNuke,在安装过程中它询问数据库密码,我提供的密码与 SQL Server 使用的密码相同,但它显示错误。 The specified password for user a
我有一个本地安装的 SQLExpress,我已经好几个月没有碰过它了。现在需要使用,SA密码忘记了。 这很好,除了我的本地用户是本地管理员组的成员显然没有更改 SA 密码的权限或更改我自己的用户权限的
我收到以下错误: Login failed for user 'sa' 当我尝试通过字符串变量设置值来连接服务器时: private SqlConnection getDbConnection = n
在 linux 内核中有 SA_INTERRUPT、SA_SHIRQ、SA_SAMPLE_RANDOM 等标志。我想知道SA_INTERRUPT中SA的缩写? 最佳答案 这基本上只是一个猜测,但是..
我是一名优秀的程序员,十分优秀!