Kubernetes权威指南——深入分析集群安全机制(二)

零基础学kubernetes(k8s)必看教程,带你10分钟快速实战入门k8s 作为一个工作十余年,拥有比较丰富的计算机网络运维、主机运维、云计算平台运维、自动化运维开发经验的老鸟,我来说说我当初刚接触Kubernetes时的一些感受以及学习技巧。 阅读详情

深入分析集群安全机制

3、Admission Control

突破了之前所说的认证和鉴权两道关卡之后,客户端的调用请求就能够得到API Server的真正响应了吗?答案是:不能!这个请求还需要通过Admission Control(准入控制)所控制的一个准入控制链的层层考验,才能获得成功的响应。Kubernetes官方标准的“关卡”有30多个,还允许用户自定义扩展。

Admission Control配备了一个准入控制器的插件列表,发送给API Server的任何请求都需要通过列表中每个准入控制器的检查,检查不通过,则API Server拒绝此调用请求。此外,准入控制器插件能够修改请求参数以完成一些自动化任务,比如ServiceAccount这个控制器插件。当前可配置的准入控制器插件如下。

  • AlwaysAdmit:已弃用,允许所有请求。
  • AlwaysPullImages:在启动容器之前总是尝试重新下载镜像。这对于多租户共享一个集群的场景非常有用,系统在启动容器之前可以保证总是使用租户的密钥去下载镜像。如果不设置这个控制器,则在Node上下载的镜像的安全性将被削弱,只要知道该镜像的名称,任何人便都可以使用它们了。
  • AlwaysDeny:已弃用,禁止所有请求,用于测试。
  • DefaultStorageClass:会关注PersistentVolumeClaim资源对象的创建,如果其中没有包含任何针对特定Storage class的请求,则为其指派指定的Storage class。在这种情况下,用户无须在PVC中设置任何特定的Storage class就能完成PVC的创建了。如果没有设置默认的Storage class,该控制器就不会进行任何操作;如果设置了超过一个的默认Storage class,该控制器就会拒绝所有PVC对象的创建申请,并返回错误信息。管理员必须检查StorageClass对象的配置,确保只有一个默认值。该控制器仅关注PVC的创建过程,对更新过程无效。
  • DefaultTolerationSeconds:针对没有设置容忍node.kubernetes.io/not-ready:NoExecute或者node.alpha.kubernetes.io/unreachable:NoExecute的Pod,设置5min的默认容忍时间。
  • DenyExecOnPrivileged:已弃用,拦截所有想在Privileged Container上执行命令的请求。如果你的集群支持Privileged Container,又希望限制用户在这些Privileged Container上执行命令,那么强烈推荐使用它。其功能已被合并到DenyEscalatingExec中。
  • DenyEscalatingExec:拦截所有exec和attach到具有特权的Pod上的请求。如果你的集群支持运行有escalated privilege权限的容器,又希望限制用户在这些容器内执行命令,那么强烈推荐使用它。
  • EventReateLimit:Alpha版本,用于应对事件密集情况下对API Server造成的洪水攻击。
  • ExtendedResourceToleration:如果运维人员要创建带有特定资源(例如GPU、FPGA等)的独立节点,则可能会对节点进行Taint处理来进行特别配置。该控制器能够自动为申请这些特别资源的Pod加入Toleration定义,无须人工干预。
  • ImagePolicyWebhook:这个插件将允许后端的一个Webhook程序来完成admission controller的功能。ImagePolicyWebhook需要使用一个配置文件(通过kube-apiserver的启动参数–admission-control-config-file设置)定义后端Webhook的参数。目前是Alpha版本的功能。
  • Initializers:Alpha。用于为动态准入控制提供支持,通过修改待创建资源的元数据来完成对该资源的修改。
  • LimitPodHardAntiAffinityTopology:该插件启用了Pod的反亲和性调度策略设置,在设置亲和性策略参数requiredDuringSchedulingRequiredDuringExecution时要求将topologyKey的值设置为“kubernetes.io/hostname”​,否则Pod会被拒绝创建。
  • LimitRanger:这个插件会监控进入的请求,确保请求的内容符合在Namespace中定义的LimitRange对象里的资源限制。如果要在Kubernetes集群中使用LimitRange对象,则必须启用该插件才能实施这一限制。LimitRanger还能用于为没有设置资源请求的Pod自动设置默认的资源请求,该插件会为default命名空间中的所有Pod设置0.1CPU的资源请求。请参考第10章对LimitRange原理和用法的详细说明。
  • MutatingAdmissionWebhook : Beta。这一插件会变更符合要求的请求的内容,Webhook以串行的方式顺序执行。
  • NamespaceAutoProvision:这一插件会检测所有进入的具备命名空间的资源请求,如果其中引用的命名空间不存在,就会自动创建命名空间。
  • NamespaceExists:这一插件会检测所有进入的具备命名空间的资源请求,如果其中引用的命名空间不存在,就会拒绝这一创建过程。
  • NamespaceLifecycle:如果尝试在一个不存在的Namespace中创建资源对象,则该创建请求将被拒绝。当删除一个Namespace时,系统将会删除该Namespace中的所有对象,包括Pod、Service等,并阻止删除default、kube-system和kube-public这三个命名空间。
  • NodeRestriction:该插件会限制kubelet对Node和Pod的修改行为。为了实现这一限制,kubelet必须使用system:nodes组中用户名为system:node:<nodeName>的Token来运行。符合条件的kubelet只能修改自己的Node对象,也只能修改分配到各自Node上的Pod对象。在Kubernetes 1.11以后的版本中,kubelet无法修改或者更新自身Node的taint属性。在Kubernetes 1.13以后,这一插件还会阻止kubelet删除自己的Node资源,并限制对有kubernetes.io/或k8s.io/前缀的标签的修改。
  • OnwerReferencesPermissionEnforcement:在该插件启用后,一个用户要想修改对象的metadata.ownerReferences,就必须具备delete权限。该插件还会保护对象的metadata.ownerReferences[x].blockOwnerDeletion字段,用户只有在对finalizers子资源拥有update权限的时候才能进行修改。
  • PersistentVolumeLabel:弃用。这一插件自动根据云供应商(例如GCE或AWS)的定义,为PersistentVolume对象加入region或zone标签,以此来保障PersistentVolume和Pod同处一区。如果插件不为PV自动设置标签,则需要用户手动保证Pod和其加载卷的相对位置。该插件正在被Cloudcontroller manager替换,从Kubernetes 1.11版本开始默认被禁止。
  • PodNodeSelector:该插件会读取命名空间的annotation字段及全局配置,来对一个命名空间中对象的节点选择器设置默认值或限制其取值。
  • PersistentVolumeClaimResize:该插件实现了对PersistentVolumeClaim发起的resize请求的额外校验。
  • PodPreset:该插件会使用PodSelector选择Pod,为符合条件的Pod进行注入。
  • PodSecurityPolicy:在创建或修改Pod时决定是否根据Pod的security context和可用的PodSecurityPolicy对Pod的安全策略进行控制。
  • PodTolerationRestriction:该插件首先会在Pod和其命名空间的Toleration中进行冲突检测,如果其中存在冲突,则拒绝该Pod的创建。它会把命名空间和Pod的Toleration进行合并,然后将合并的结果与命名空间中的白名单进行比较,如果合并的结果不在白名单内,则拒绝创建。如果不存在命名空间级的默认Toleration和白名单,则会采用集群级别的默认Toleration和白名单。
  • Priority:这一插件使用priorityClassName字段来确定优先级,如果没有找到对应的Priority Class,该Pod就会被拒绝。
  • ResourceQuota:用于资源配额管理目的,作用于Namespace。该插件拦截所有请求,以确保在Namespace上的资源配额使用不会超标。推荐在Admission Control参数列表中将这个插件排最后一个,以免可能被其他插件拒绝的Pod被过早分配资源。在10.4节将详细介绍ResourceQuota的原理和用法。
  • SecurityContextDeny:这个插件将在Pod中定义的SecurityContext选项全部失效。SecurityContext在Container中定义了操作系统级别的安全设定(uid、 gid 、capabilities、SELinux等)​。在未设置PodSecurityPolicy的集群中建议启用该插件,以禁 用容器设置的非安全访问权限。
  • ServiceAccount :这个插件将ServiceAccount实现了自动化,如果想使用ServiceAccount对象,那么强烈推荐使用它,在后面讲述ServiceAccount的章节会详细说明其作用。
  • StorageObjectInUseProtection :这一插件会在新创建的PVC或PV中加入kubernetes.io/pvc-protection或kubernetes.io/pv-protection的finalizer。如果想要删除PVC或者PV,则直到所有finalizer的工作都完成,删除动作才会执行。
  • ValidatingAdmissionWebhook:在Kubernetes1.8中为Alpha版本,在Kubernetes 1.9中为Beta版本。该插件会针对符合其选择要求的请求调用校验Webhook。目标Webhook会以并行方式运行;如果 其中任何一个Webhook拒绝了该请求,该请求就会失败。

在API Server上设置参数即可定制我们需要的准入控制链,如果启用多种准入控制选项,则建议设置:在Kubernetes 1.9及之前的版本中使用的参数是–admission-control,并且其中的内容是顺序相关的;在Kubernetes 1.10及之后的版本中,该参数为–enable-admission-plugins,并且与顺序无关。

对Kubernetes 1.10及以上版本设置如下:

--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,Def
aultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdm
issionWebhook,ResourceQuota

对Kubernetes 1.9及以下版本设置如下:

--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultSto
rageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionW
ebhook,ResourceQuota

4、Service Account

Service Account也是一种账号,但它并不是给Kubernetes集群的用户(系统管理员、运维人员、租户用户等)用的,而是给运行在Pod里的进程用的,它为Pod里的进程提供了必要的身份证明。

在继续学习之前,请回忆6.1节API Server认证的内容。

在正常情况下,为了确保Kubernetes集群的安全,APIServer都会对客户端进行身份认证,认证失败的客户端无法进行API调用。此外,在Pod中访问Kubernetes APIServer服务时,是以Service方式访问名为Kubernetes的这个服务的,而Kubernetes服务又只在HTTPS安全端口443上提供,那么如何进行身份认证呢?这的确是个谜,因为Kubernetes的官方文档并没有清楚说明这个问题。

通过查看官方源码,我们发现这是在用一种类似HTTPToken的新认证方式—Service Account Auth,Pod中的客户端调用Kubernetes API时,在HTTP Header中传递了一个Token字符串,这类似于之前提到的HTTP Token认证方式,但有以下几个不同之处。

  • 这个Token的内容来自Pod里指定路径下的一个文件(/run/secrets/kubernetes.io/serviceaccount/token)​,这种Token是动态生成的,确切地说,是由Kubernetes Controller进程用API Server的私钥(–service-account-private-key-file指定的私钥)签名生成的一个JWT Secret。
  • 在官方提供的客户端REST框架代码里,通过HTTPS方式与API Server建立连接后,会用Pod里指定路径下的一个CA证书(/run/secrets/kubernetes.io/serviceaccount/ca.crt)验证API Server发来的证书,验证是否为CA证书签名的合法证书。
  • API Server在收到这个Token以后,采用自己的私钥(实际上是使用service-account-key-file参数指定的私钥,如果没有设置此参数,则默认采用tls-private-key-file指定的参数,即自己的私钥)对Token进行合法性验证。

明白了认证原理,我们接下来继续分析在上面的认证过程中所涉及的Pod中的以下三个文件。

  • /run/secrets/kubernetes.io/serviceaccount/token。
  • /run/secrets/kubernetes.io/serviceaccount/ca.crt。
  • /run/secrets/kubernetes.io/serviceaccount/namespace(客户端采用这里指定的namespace作为参数调用Kubernetes API)​。

这三个文件由于参与到Pod进程与API Server认证的过程中,起到了类似secret(私密凭据)的作用,所以它们被称为Kubernetes Secret对象。Secret从属于ServiceAccount资源对象,属于Service Account的一部分,在一个Service Account对象里面可以包括多个不同的Secret对象,分别用于不同目的的认证活动。

下面通过运行一些命令来加深我们对Service Account与 Secret的直观认识。

首先,查看系统中的Service Account对象,看到有一个名为default的Service Account对象,包含一个名为default-token-77oyg的Secret,这个Secret同时是Mountable secrets,表明它是需要被挂载到Pod上的:

# kubectl describe serviceaccounts
Name:         default
Namespace:   default
Labels:      <none>
Image pull secrets:  <none>
Mountable secrets:   default-token-77oyg
Tokens:                default-token-77oyg

接下来看看default-token-77oyg都有什么内容:

# kubectl describe secrets default-token-77oyg
 Name:         default-token-77oyg
 Namespace:   default
 Labels: <none>
 Annotations: kubernetes.io/service-account.name=default

 kubernetes.io/service-account.uid=3e5b99c0-432c-11e6-b45c-000c29dc2102

 Type:    kubernetes.io/service-account-token

 Data
 ====
 token:
 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2N
vdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3V
iZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tNzdveWc
iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXV
sdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNlNWI
5OWMwLTQzMmMtMTFlNi1iNDVjLTAwMGMyOWRjMjEwMiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3V
udDpkZWZhdWx0OmRlZmF1bHQifQ.MFsBrYmTLMB55X3UGfO_pADP6FSsQgHb0SxGJtTsJnY-ze2vFc8Q
dO7bVdmQfFbnkHgLWht1KIpR_EyvJTRP538uovgcA_QGN9yIMEdqIfQC2wfnLFuk10a8OdSH4uzayBb5
0yI7gJWXWbXn6u0wAGMneiTKtCvzGfR4q-p19Jjh5qNPiUdJ0NhjsJJSAc1hdNK40XtOgMHdNNyPEmPg
k6Ow2cM7DRb6ifiSOs05cTeLYv1TpIBMvcQy4sYedCEL2cJ20BwcSo4-1Dev9rdxr5OdtgCvo6OxbPF7
RcWwjjgUMLYO3YCi07WmQNdmxWHJkwvBtkWZhzdvuFCpHeWANA
 ca.crt:      1115 bytes
 namespace:   7 bytes

从上面的输出信息中可以看到,default-token-77oyg包含三个数据项,分别是token、ca.crt、namespace。联想到Mountable secrets的标记,以及之前看到的Pod中的三个文件的文件名,我们恍然大悟:在每个Namespace下都有一个名为default的默认ServiceAccount对象,在这个Service Account里面有一个名为Tokens的可以当作Volume被挂载到Pod里的Secret,当Pod启动时,这个Secret会自动被挂载到Pod的指定目录下,用来协助完成Pod中的进程访问API Server时的身份鉴权。

如图所示,一个Service Account可以包括多个Secret对象。
在这里插入图片描述
其中:

  • (1)名为Tokens的Secret用于访问API Server的Secret,也被称为Service Account Secret。
  • (2)名为imagePullSecrets的Secret用于下载容器镜像时的认证过程,通常镜像库运行在Insecure模式下,所以这个Secret为空。
  • (3)用户自定义的其他Secret,用于用户的进程。

如果一个Pod在定义时没有指定spec.serviceAccountName属性,则系统会自动为其赋值为default,即大家都使用同一个Namespace下的默认Service Account。如果某个Pod需要使用非default的Service Account,则需要在定义时指定:

apiVersion: v1
kind: Pod
metadata:
  name: mypod                         # Pod 的名称
spec:
  containers:
  - name: mycontainer                 # 容器名称(已修正拼写错误:mycontainter -> mycontainer)
    image: nginx:v1                   # 容器使用的镜像及版本
  serviceAccountName: myserviceaccount # 绑定到该 Pod 的服务账户名称(与 containers 同级,属于 spec 的子字段)

Kubernetes之所以要创建两套独立的账号系统,原因如下。

  • User账号是给人用的,Service Account是给Pod里的进程使用的,面向的对象不同。
  • User账号是全局性的,Service Account则属于某个具体的Namespace。
  • 通常来说,User账号是与后端的用户数据库同步的,创建一个新用户通常要走一套复杂的业务流程才能实现,Service Account的创建则需要极轻量级的实现方式,集群管理员可以很容易地为某些特定任务创建一个Service Account。
  • 对于这两种不同的账号,其审计要求通常不同。
  • 对于一个复杂的系统来说,多个组件通常拥有各种账号的配置信息,Service Account是Namespace隔离的,可以针对组件进行一对一的定义,同时具备很好的“便携性”​。

接下来深入分析Service Account与Secret相关的一些运行机制。

根据5.2节的内容,我们知道Controller manager创建了ServiceAccount Controller与Token Controller这两个安全相关的控制器。其中ServiceAccount Controller一直监听Service Account和Namespace的事件,如果在一个Namespace中没有default Service Account,那么ServiceAccount Controller会为该Namespace创建一个默认(default)的Service Account,这就是我们之前看到在每个Namespace下都有一个名为default的ServiceAccount的原因。

如果Controller manager进程在启动时指定了API Server私钥(service-account-private-key-file参数)​,那么 Controller manager会创建Token Controller。TokenController也监听Service Account的事件,如果发现在新创建的Service Account里没有对应的Service AccountSecret,则会用API Server私钥创建一个Token(JWTToken)​,并用该Token、CA证书及Namespace名称等三个信息产生一个新的Secret对象,然后放入刚才的Service Account中;如果监听到的事件是删除ServiceAccount事件,则自动删除与该Service Account相关的所有Secret。此外,Token Controller对象同时监听Secret的创建、修改和删除事件,并根据事件做不同的处理。

当我们在API Server的鉴权过程中启用了Service Account类型的准入控制器,即在kube-apiserver启动参数中包括下面的内容时:

--admission_control=ServiceAccount

则针对Pod新增或修改的请求,Service Account准入控制器会验证Pod里的Service Account是否合法。

  • (1)如果spec.serviceAccount域没有被设置,则Kubernetes默认为其指定名称为default的Serviceaccout。
  • (2)如果Pod的spec.serviceAccount域指定了default以外的Service Account,而该Service Account没有被事先创建,则该Pod操作失败。
  • (3)如果在Pod中没有指定ImagePullSecrets,那么这个spec.serviceAccount域指定的Service Account的ImagePullSecrets会被加入该Pod中。
  • (4)给Pod添加一个特殊的Volume,在该Volume中包含Service Account Secret中的Token,并将Volume挂载到Pod中所有容器的指定目录下(/var/run/secrets/kubernetes.io/serviceaccount)​。

综上所述,Service Account的正常工作离不开以下几个控制器。

  • (1)Admission Controller。
  • (2)Token Controller。
  • (3)ServiceAccount Controller。
Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)读书笔记 目录 Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)读书笔记。 阅读详情

相关推荐

从零到一:QT for OpenHarmony 开发环境实战搭建与踩坑指南

本文是一份详尽的QT for OpenHarmony开发环境搭建实战指南。文章手把手教你如何在Windows和macOS系统上,从环境准备、核心工具(DevEco Studio与社区版QT SDK)安装配置,到创建首个QT Quick项目、解决构建部署中的常见问题,最终实现应用在OpenHarmony设备上运行。内容涵盖关键配置修改、资源管理及深度踩坑经验,旨在帮助开发者高效开启跨平台开发之旅。

weixin_29190573的博客 325

Playwright爬虫封装与反检测实战指南

浏览器自动化是现代爬虫技术的核心组件,通过模拟真实用户行为实现数据采集。Playwright作为新一代跨浏览器自动化工具,其多内核支持和设备模拟能力为爬虫开发提供了坚实基础。在反爬技术日益复杂的今天,爬虫系统需要处理从基础特征检测到高级指纹识别的多层次防御机制。通过精心设计的浏览器指纹伪装、请求头模拟和人类行为模式复制,可以有效规避检测系统。这些技术在电商价格监控、社交媒体数据采集等场景中具有重要应用价值。本文以Playwright为例,详细解析如何构建具备反检测能力的现代化爬虫系统,涵盖从基础框架搭建到高

weixin_31842715的博客 190

如何优化Silvaco二极管仿真网格?这些参数设置技巧让你的结果更精确

本文详细介绍了如何优化Silvaco二极管仿真网格,通过精细调整网格参数提升仿真精度。重点解析了网格密度与计算精度的权衡、关键区域识别与网格强化策略,以及掺杂分布与网格适配技术,帮助工程师在半导体器件仿真中获得更准确的结果。

t8u9v0w1x的博客 660

Ansible常用模块详解

Ansible常用模块详解命令模块commandshell文件模块copyfetchfile安装模块yum服务模块service挂载模块mount定时任务cron用户模块groupuser压缩解压unarchive 命令模块 command 概要 命令模块 适合使用简单的命令 无法支持"<",">","|",";","&"等符号 官方文档:https://docs.ansible.com/ansible/latest/modules/command_module.html#command

IChen.的博客 282

AIDL HAL服务从零到一:构建现代Android硬件抽象层

本文详细介绍了从零开始构建现代Android AIDL HAL服务的完整流程。通过定义接口、实现服务逻辑、配置构建与VINTF清单,并最终集成到系统镜像,开发者可以掌握利用AIDL替代传统HIDL来开发硬件抽象层的核心方法。文章重点解析了AIDL HAL的创建流程,并对比了其与HIDL在语法、工具链和集成方式上的优势,帮助开发者高效构建稳定的硬件接口。

weixin_29174141的博客 145

【文献阅读:信道估计】Deep Residual Learning Meets OFDM Channel Estimation

基于深度学习的信道估计技术

weixin_43178683的博客 1754

【k8s权威指南】第1章 Kubernetes入门

本系列文章是<Kubernetes权威指南(第四版)>的学习笔记,适合初学者,理清k8s学习框架

weixin_45909424的博客 2644

手把手教你用ESP32-C3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5534

k8s权威指南第六章----深入分析集群安全机制

1、API Server 认证管理 K8s集群有两种认证方式: ServiceAccount 和 普通用户 api server 访问方式: 1)kubectl kubelets 2)ServiceAccount 3)匿名方式 k8s提供的认证方式,这些方式都不仔细看了,了解下就好: 1)https 证书 2)Http Bearer Token 3) OpenId Connect Token 4)Webhook Token 5)Authenticating Proxy 认证 2、ApiSever 授权管理

qq_32783703的博客 1669

MySQL 一一 MySQL基本使用

1、数据库 简单来说,所谓的数据库就是存储数据的容器,而且是永久存储的。 2、为什么需要数据库 3、为什么要学习MySQL数据库 最早MySQL数据,瑞典AB公司开发的一款开源型的关系型数据库。 随着时间的推移,瑞典AB公司把MySQL数据库转让给Sun公司(Java语言的创始公司) 后来,Sun公司经营不善,又把MySQL数据库转让给甲骨文公司(Oracle数据库) 4、数

Guizy 7万+

游戏战斗系统架构设计的演绎之路——从一坨意大利面条到一座精密钟表

摘要:游戏战斗系统架构设计的演进之路 本文系统梳理了游戏战斗系统从早期街机到现代3A大作的架构发展历程。70-80年代的街机游戏采用基础碰撞盒判定(如《街头霸王》);90年代实现动画融合与状态机架构(《最终幻想》《拳皇》);2000年后MMO引入服务器验证与同步技术(《魔兽世界》);3D时代融合物理引擎与智能AI(《GTA5》《只狼》);移动端则发展出轻量化架构与云端判定(《王者荣耀》)。现代战斗系统已实现模块化、数据驱动和热更新,未来趋势是AI裁判与云战斗系统。这一演进过程展现了技术与创意的完美结合,数百

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 800

k8s集群安全机制说明

k8s作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务,apiserver是集群内部各个组件通信的中介,也是外部控制的入口,所以k8s的安全机制基本就是围绕保护apiserver来设计的。k8s使用了认证Authentication、鉴权Authorization、准入控制admissionControl三步来保证apiserver的安全。 用户通过kubectl、客户端库或者通...

zhaikaiyun的博客 1868

Python全栈入门到实战【JavaScript篇 15】async/await与Fetch API,打通前后端数据通道

Fetch API是浏览器内置的现代HTTP请求接口,用于向服务器发送请求并获取响应。它是(XHR)的替代品。学习Fetch的目标非常明确——用JS从后端API获取数据,并渲染到前端页面。这标志着前后端数据通道的打通,是实现全栈开发的核心技能。try {// 等待Promiseconst parallel = await Promise.all([ // 并行等待]);

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1981

Kubernetes-深入分析集群安全机制

Kubernetes过一系列机制来实现集群的安全机制,包括API Server的认证授权、准入控制机制及保护敏感信息的Secret机制等。集群的安全性必须考虑以下的几个目标: 保证容器与其所在宿主机的隔离; 限制容器给基础设施及其他容器带来消极影响的能力; 最小权限原则,合理限制所有组件权限,确保组件只执行它被授权的行为,通过限制单个组件的能力来限制他所能达到的权限范围; 明...

diankuang5558的博客 206

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

赠书福利丨Kubernetes权威指南第4版

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33904756的博客 3838

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

kubernetes 根 README 深度解读:从源码构建 K8s 到把 K8s 组件当库用的实践指南

本文基于 kubernetes 仓库根目录 [README.md](https://link.gitcode.com/i/b7f700c85eaa8c2d40a7c031e44d02a0) 展开,带你完整掌握三件事:Kubernetes 的定位与设计渊源(Google Borg 经验)、两种官方支持的源码构建方式(Go 环境 `make` 与 Docker 环境 `make quick-relea

gitblog_00036的博客 1132

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kubernetes技术笔记-从理论到实践,轻松搭建K8s集群

本文详细介绍了Kubernetes集群的部署流程,包括理论架构和实际操作步骤,从理论到实践,从零开始搭建属于自己的K8s集群,全文6k字。首先阐述了K8s作为容器编排系统的核心功能,解析了Master和Node节点的组件构成。随后提供了完整的集群规划方案,涵盖环境要求、主机准备和必要服务配置。重点讲解了Master节点的搭建过程,包括环境配置、软件安装、容器运行时设置、内核参数优化等关键步骤,并详细说明了网络插件Calico的安装方法。最后指导Node节点如何加入集群,并给出验证命令。

m0_65816971的博客 1787

Kubernetes权威指南-第5版

无

魏波 9981

Kubernetes权威指南

网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击“普通下载”) 购买正版 封页 编辑推荐 本书是容器圈Kubernetes重磅开山作《Kubernetes权威指南》的纪念版,内容更新到Kubernetes v1.6 版本。   本书作者全部来自惠普公司云计算实战一线,敏锐...

CiCi岛的专栏 2083

【免费下载】 Kubernetes权威指南(纪念版)PDF资源介绍

Kubernetes权威指南(纪念版)PDF资源介绍 【下载地址】Kubernetes权威指南纪念版PDF资源介绍分享 Kubernetes权威指南(纪念版)PDF资源介绍欢迎来到Kubernetes学习资源页面!这里我们自豪地分享《Kubernetes权威指南(纪念版)》的PDF版本,此版本虽然相对旧些,但其核心概念和...

gitblog_06545的博客 2328

Kubernetes权威指南——深入分析集群安全机制(一)

API Server在接收到请求后,会读取该请求中的数据,生成一个访问策略对象,如果在该请求中不带某些属性(如Namespace)​,则这些属性的值将根据属性类型的不同,设置不同的默认值(例如,为字符串类型的属性设置一个空字符串;通常可以对/api、/api/*、/apis、/apis/*和/version对于客户端发现服务器提供的资源和版本信息给予“允许”授权,对于其他非资源的访问一般可以禁止,以限制客户端对API Server进行没有必要的查询。简单地说,授权就是授予不同的用户不同的访问权限。

吴声子夜歌的博客 210

【亲测免费】 探索云原生世界的必备指南:《Kubernetes 权威指南》

探索云原生世界的必备指南:《Kubernetes 权威指南》 【下载地址】Kubernetes权威指南分享 Kubernetes 权威指南欢迎使用《Kubernetes 权威指南》,这是一本全面覆盖Kubernetes技术栈的深度学习资料 ...

gitblog_06653的博客 1258

【亲测免费】 Kubernetes 权威指南

Kubernetes 权威指南 【下载地址】Kubernetes权威指南分享 Kubernetes 权威指南欢迎使用《Kubernetes 权威指南》,这是一本全面覆盖Kubernetes技术栈的深度学习资料 项目地址: http...

gitblog_06675的博客 800

《Kubernetes网络权威指南》读书笔记 | 汇总

18.打通CNI与Kubernetes:Kubernetes网络驱动。书籍来源:《Kubernetes网络权威指南:基础、原理与实践》22.Kubernetes网络策略:为你的应用保驾护航。15.容器基础设施的代言人:Kubernetes。10.打开万花筒:Docker的四大网络模式。16.终于等到你:Kubernetes网络。7.Linux隧道网络的代表:VXLAN。19.找到你并不容易:从集群内访问服务。20.找到你并不容易:从集群外访问服务。12.容器网络的第一个标准:CNM。

团爸讲算法 1578

kubernetes权威指南_如何快速上手成为大厂标配的kubernetes?

程序员书库(ID:CodingBook) 猿妹 综合整理过去几年,以docker、kubernetes为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和k8s项目作为技术重心。据说阿里巴巴目前所有业务都跑在云上,许多业务已迁移到自己定制 kubernetes 集群上。然而,要想用好Kubernetes,还是有些东西要注意的,否则可能会给自己带来一些小麻烦...

weixin_42375011的博客 201

《Kubernetes权威指南》一起来免费下载学习

​人人都想拥有的K8s重磅级案头手册 本书从架构师、开发人员和运维人员的角度,阐述了Kubernetes 的基本概念、实践指南、核心原理、开发指导、运维指南、新特性演进等内容,图文并茂、内容丰富、由浅入深、讲解全面;并围绕在生产环境中可能出现的问题,给出了大量的典型案例,有很强的实战指导意义。 关注本公众号,后台回复 k8s 即可获取 Java的docker东风 开发者家目录(社区),专注于Java、Linux 以及docker、kubernetes(k8s)等云原生领域的技术分享;同时...

u012809308的博客 3541
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值