Google Kubernetes设计文档之安全篇

【编者按】Kubernetes是Google开源的容器集群管理系统。它构建于Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。为帮助国内开发者了解Kubernetes技术,CSDN联合浙江大学SEL实验室共同翻译Kubernetes的系列设计文档,本文为系列的第一篇:安全。

设计目标

本文讲述了Kubernetes的容器、API和基础设施在安全方面的设计原则。

保证容器与其运行的宿主机之间有明确的隔离;限制容器对基础设施或者其它容器造成不良影响的能力;最小特权原则——限定每个组件只被赋予了执行操作所必需的最小特权,由此确保可能产生的损失达到最小;通过清晰地划分组件的边界来减少需要加固和加以保护的系统组件数量。

设计要点将etcd中的数据与minion节点和基础设施进行隔离

在Kubernetes的设计中,如果攻击者可以访问etcd中的数据,那么他就可以在宿主机上运行任意容器,获得存储在volumes或者pods的任何受保护信息(比如访问口令或者作为环境变量的共享密钥),通过中间人攻击来拦截和重定向运行中的服务流量,或者直接删除整个集群的历史信息。

Kubernetes设计的基本原则是,对etcd中数据的访问权限应该只赋予某些特定的组件,这些组件或者需要对系统有完整的控制权,或者对系统服务变更请求能执行正确的授权和身份验证操作。将来,etcd会提供粒度访问控制,但这样的粒度要求有一个管理员能够深刻理解etcd中存储数据的schema,并按照schema设置相应的安全策略。管理员必须能够在策略层面上保证Kubernetes的安全性,而非实现层面;另外,随着时间推移,数据的schema可能产生变化,这样的状况应该被预先考虑以免造成意外的安全泄漏。

Kubelet和Kube Proxy都需要与它们特定角色相关的信息——对于Kubelet,需要的是运行的pods集合的信息;对于Kube Proxy,需要用以负载均衡的服务与端点集合信息。Kubelet同样需要提供运行的pods和历史终止数据的相关信息。Kubelet和Kube Proxy用于加载配置的方式是“wait for changes”的HTTP请求。因此,限制Kubelet和Kube Proxy的权限使其只能访问对应角色所需的信息是可行的。

Replication controller和其他futurecontroller的controller manager经过用户授权可以代表其执行对Kubernetes资源的自动化维护。Controller manager访问或修改资源状态的权限应该被严格地限定在它们特定的职责范围之内,而不能访问其他无关角色的信息。例如,一个replication controller只需要如下权限:创建已知pods配置的副本,设定已经存在的pods的运行状态,或者删除它创建的已存在的pods;而不需要知道pods的内容或者当前状态,亦不需要有访问挂载了volume的pods中的数据的权限。

Kubernetes pod scheduler负责从pod中读取数据并将其注入pod所在集群的minion节点中。它需要的最低限度的权限有,查看pod ID(用以生成binding)、pod当前状态、分配给pod的资源信息等。Pod scheduler不需要修改pods或查看其它资源的权限,只需要创建binding的权限。Pod scheduler不需要删除binding的权限,除非它接管了宕机机器上原有组件的重定位工作。在这样的情况下,scheduler可能需要对用户或者项目容器信息的读取权限来决定重定位pod的优先位置。

原文链接:Security in Kubernetes(编译/何思玫 审校/孙宏亮 责编/周小璐)

译者简介:何思玫,浙江大学SEL实验室硕士研究生,目前在云平台团队从事科研和开发工作。浙大团队对PaaS,Docker,大数据和主流开源云计算技术有深入的研究和二次开发经验,团队现将部分技术文章贡献出来,希望能对读者有所帮助。

如需要了解更多Docker相关的资讯或是技术文档可访问Docker技术社区;如有更多的疑问请在Dcoker技术论坛提出,我们会邀请专家回答。CSDN Docker技术交流QQ群:303806405。

Container技术日报公众账号已开启,欢迎关注!

时间: 2024-10-25 21:41:41

Google Kubernetes设计文档之安全篇的相关文章

Google Kubernetes设计文档之Volumes

Volumes 本文描述了Kubernetes中Volumes的使用情况,建议在阅读本文前,首先熟悉pods. Volume是一个能够被容器访问的目录,它可能还会包含一些数据.Kubernetes Volumes与Docker Volumes类似,但并不完全相同. 一个Pod会在它的ContainerManifest 属性中指明其容器需要哪些Volumes. 容器中的进程可见的文件系统视图由两个源组成:一个单独的Docker image和零个或多个Volumes.Docker image位于文件

Google Kubernetes设计文档之网络

[编者按]Kubernetes是Google开源的容器集群管理系统.它构建于Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台.为帮助国内开发者了解Kubernetes技术,CSDN联合浙江大学SEL实验室共同翻译Kubernetes的系列设计文档,本文为系列的第四篇:网络. 模型和动机Kubernetes从Docker默认的网络模型中独立出来形成一套自己的网络模型.该网络模型的目标是:每一个pod都拥有

Google Kubernetes设计文档之服务篇

[编者按]Kubernetes是Google开源的容器集群管理系统.它构建于Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台.为帮助国内开发者了解Kubernetes技术,CSDN联合浙江大学SEL实验室共同翻译Kubernetes的系列设计文档,本文为系列的第三篇:服务. Pod是在Kubernetes中,创建.调度和管理的最小部署单位,这些Pod之间是如何互相通信的,本文将进行详细阐述. 概述 Ku

Google Kubernetes设计文档之Pod篇

[编者按]Kubernetes是Google开源的容器集群管理系统.它构建于Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台.为帮助国内开发者了解Kubernetes技术,CSDN联合浙江大学SEL实验室共同翻译Kubernetes的系列设计文档,本文为系列的第二篇Pod. 在Kubernetes中,创建.调度和管理的最小部署单位是Pod,而不是容器. 什么是Pod 一个Pod对应于由若干容器组成的一个

用户界面设计文档:手指友好型设计

文章描述:手指友好型设计-为了更好的点击而设计. 玩飞镖的时候,靶心是最难射中的位置,因为靶心是整个靶面上面积最小的部分.越是小的目标,就越是难以达到.这个准则在移动设备的触摸屏幕上同样适用. 众所周知,对于触屏设备用户来说,面积小的目标比面积大的目标更难操纵.所以,在设计移动设备界面的时候,触控目标一定要充分的大,足以让用户操作自如.但是多大才算充分呢?多大才是对于大多数用户最合适的尺寸呢?各大移动设备开发者已经认识到这个问题,最常见的做法是在各大厂商的用户界面设计文档中寻找答案. 那么,设计

如何写软件设计文档

软件设计的不同模型:瀑布式.快速原型法以及迭代式 自从1968年提出"软件工程"概念以来,软件开发领域对于借鉴传统工程的原则.方法,以提高质量.降低成本的探索就从未停止过.而在这个过程中,提出了许多不同的软件开发模型,典型的有:瀑布式,快速原型法,以及迭代式开发等. 瀑布式模型 是由W.W.Royce在1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析,设计,实现,测试 (确认), 集成,和维护顺序的进行. 快速原型法 快速原型模型的第一步是建造一个快速原型,实现

互联网产品设计:产品设计文档(PDD)

传统上写产品需求文档(PRD)的做法,就是把用例.流程图和网页原型图一股脑的放到一个Word文档里.一般一个产品都包含乃几十个乃至上百用例,每个用例都有自己的流程图,每个流程图又包含了少则几个多则几十的网页原型图,结果就是产品需求文档变得庞大无比,写的人费事儿,读的人更惨. 自从我受到了这样文档的折磨,我就一直都在琢磨怎么才能把文档写得更简单一点,让阅读的人-通常是设计师和程序员-能够在最短的时间内领会产品的设计. 原来做UI设计师的时候,我创造了一种用流程图来表示产品交互的办法,这个方法受到了

实战从需求文档到设计文档的书写规范(一)

1.前言 本文有两个目的:实现每晚构建平台和探讨一个软件从需求文档到设计文档的书写规范. 每晚构建是软件研发管理中极具价值的手段,对于加快发现和改正缺陷,降低集成风险,提高产品质量,加强成员沟通与协作,缩短产品上市时间,增加项目开发透明度,提高项目组成员信心和斗志有着非常重要的作用和意义.本文从软件工程过程:需求定义,分析,设计出发描述了实战每晚构建平台的大部分过程. 软件工程中文档有着极其重要的地位,良好的文档风格和习惯是一个团队成熟的重要标志.目前有些软件研发人员特别是刚刚走上岗位的研发人员

实战从需求文档到设计文档的书写规范(七)

2.2 人机界面设计 不需要. 2.3 存储设计 见构建信息显示系统. 2.4 系统接口设计 构建系统和操作系统的接口在OSScheduler.在Linux下可以实现成一个调用ant LogAdmin的shell 可执行文件,并配置crond每晚某个时刻执行这个可执行文件. 3.实现 在这节中充分利用本文章系列中篇中所有的技术,并显示了部分源代码. 3.1 部署图 在实现时,第一个要考虑的就是类如何与源文件对应,这些源文件又是如何组织的,表示这些信息的图表称为部署图.图表的格式不一定要很标准,这