Helm 用户指南-系列(8)-安全安装-完结篇

简介: 安全安装 Helm是一款强大而灵活的Kubernetes软件包管理和运维工具。使用默认安装命令helm init 可以快速轻松地安装它和 Tiller(Helm相对应的服务端组件)。 但是,默认安装没有启用任何安全配置。

安全安装


Helm是一款强大而灵活的Kubernetes软件包管理和运维工具。使用默认安装命令helm init 可以快速轻松地安装它和 Tiller(Helm相对应的服务端组件)

但是,默认安装没有启用任何安全配置。使用这种类型的安装在下面的场景下是完全合适的,在没有安全问题或几乎没有安全问题的群集时可以使用这种安装方式,例如使用Minikube进行本地开发,或者使用在专用网络中,安全性良好且无数据共享或无其他用户或团队。如果是这种情况,那么默认安装很合适,但请记住:权力越大,责任越大。决定使用默认安装时始终要注意相应的安全问题。

我在网址 https://whmzsu.github.io/helm-doc-zh-cn/ 不断更新,同时也会搬运到这里,大家有兴趣加入https://github.com/whmzsu/helm-doc-zh-cn/的可以给我提交意见和建议。

谁需要安全配置?

对于以下类型的集群,我们强烈建议使用正确的安全配置应用于Helm和Tiller,以确保集群,集群中的数据以及它所连接的网络的安全性。

  • 暴露于不受控制的网络环境的群集:不受信任的网络参与者可以访问群集,也可以访问网络环境的不受信任的应用程序。
  • 许多人使用的群集 – 多租户群集 – 作为共享环境
  • 有权访问或使用高价值数据或任何类型网络的群集

通常,像这样的环境被称为 生产等级 或 生产质量 的环境,因为任何因滥用集群而对任何公司造成的损害对于客户,对公司本身或者两者都是深远的。一旦损害风险变得足够高,无论实际风险如何,都需要确保集群的安全完整性。

要为环境正确配置安装,必须:

  • 了解群集的安全上下文
  • 选择合适的helm安装的最佳实践

以下假定有一个Kubernetes配置文件(一个kubeconfig文件),或者有一个用于访问群集的文件。

了解群集的安全上下文

helm init将Tiller安装到kube-system名称空间中的集群中,而不应用任何RBAC规则。这适用于本地开发和其他私人场景,因为它可以让立即开始工作。它还使你能够继续使用没有基于角色的访问控制(RBAC)支持的Kubernetes群集来运行Helm,直到可以将工作负载移动到更新的Kubernetes版本。

在Tiller安全安装时,需要考虑四个主要方面:

  1. 基于角色的访问控制或RBAC
  2. Tiller的gRPC端点及Helm的使用情况
  3. Tiller的release信息
  4. Helm harts

RBAC

Kubernetes的最新版本采用基于角色的访问控制(或RBAC)系统(与现代操作系统一样),以帮助缓解证书被滥用或存在错误时可能造成的损害。即使在身份被劫持的情况下,这个身份在受控空间也只有这么多的权限。这有效地增加了一层安全性,以限制使用该身份进行攻击的范围。

Helm和Tiller在安装,删除和修改逻辑应用程序时,可以包含许多服务交互。因此,它的使用通常涉及整个集群的操作,在多租户集群中意味着Tiller安装必须非常小心才能访问整个集群,以防止不正确的安全活动。

特定用户和团队 – 开发人员,运维人员,系统和网络管理员 – 需要他们自己的群集分区,以便他们可以使用Helm和Tiller,而不会冒着集群其他分区的风险。这需要启用RBAC的Kubernetes集群,并配置Tiller的RBAC权限。有关在Kubernetes中使用RBAC的更多信息,请参阅使用RBAC授权 RBAC 章节。

Tiller和用户权限

当前情况下的Tiller不提供将用户凭据映射到Kubernetes内的特定权限的方法。当Tiller在集群内部运行时,它将使用其服务帐户的权限运行。如果没有服务帐户名称提供给Tiller,它将使用该名称空间的默认服务帐户运行。这意味着该服务器上的所有Tiller操作均使用Tiller pod的凭据和权限执行。

为了合适的限制Tiller本身的功能,标准Kubernetes RBAC机制必须配置到Tiller上,包括角色和角色绑定,这些角色明确的限制了Tiller实例可以安装什么以及在哪里安装。

这种情况在未来可能会改变。社区有几种方法可以解决这个问题,采用客户端权限而不是Tiller权限的情况下,活动的权限取决于Pod身份工作组,已经解决了的安全的一般性问题。

Tiller gRPC端点和TLS

在默认安装中,Tiller提供的gRPC端点在集群内部(不在集群外部)可用,不需要应用认证配置。如果不应用身份验证,集群中的任何进程都可以使用gRPC端点在集群内执行操作。在本地或安全的专用群集中,这可以实现快速使用并且是合适的。(当在集群外部运行时,Helm通过Kubernetes API服务器进行身份验证,以达到Tiller,利用现有的Kubernetes身份验证支持。)

共享和生产群集 – 大多数情况下 – 应至少使用Helm 2.7.2,并为每个Tiller gRPC端点配置TLS,以确保群集内gRPC端点的使用仅适用于该端点的正确身份验证标识。这样做可以在任意数量的namespace中部署任意数量的Tiller实例,任何gRPC端点未经授权不可使用。使用Helm init –tiller-tls-verify选择安装启用TLS的Tiller,并验证远程证书,所有其他Helm命令都应该使用该–tls选项。

有关正确配置并使用TLS的Tiller和Helm的正确步骤的更多信息,请参阅Helm和Tiller使用“SSL Using SSL between Helm and Tiller”。

当Helm客户端从群集外部连接时,Helm客户端和API服务器之间的安全性由Kubernetes本身管理。你可能需要确保这个链接是安全的。请注意,如果使用上面建议的TLS配置,则Kubernetes API服务器也无法访问客户端和Tiller之间的未加密消息。

Tiller Release信息

由于历史原因,Tiller将其release信息存储在ConfigMaps中。我们建议将默认设置更改为Secrets。

Secrets是Kubernetes用于保存被认为是敏感的配置数据的可接受的方法。尽管secrets本身并不提供很多保护,但Kubernetes集群管理软件经常将它们与其他对象区别开来。因此,我们建议使用secrets来存储release信息。

启用此功能目前需要在Tiller部署时设置参数--storage=secret。这需要直接修改deployment或使用helm init --override=...,因为当前没有helm init 参数可供执行此操作。有关更多信息,请参阅 Using –override。

关于chart

由于Helm的相对生命周期,Helm chart生态系统的发展并没有考虑到整个集群的控制,这在开发人员来说,是完全合理的。但是,chart是一种不仅可以安装可能已经验证或可能未验证的容器的包,它也可以安装到多个namespace中。

与所有共享的软件一样,在受控或共享的环境中,必须在安装之前验证自己安装的所有软件。如果已经通过TLS配置安装了Tiller,并且只有一个或部分namespace的权限,某些chart可能无法安装 – 在这些环境中,这正是你想要的。如果需要使用chart,可能必须与创建者一起工作或自行修改它,以便在应用了适当的RBAC规则的多租户群集中安全地使用它。helm template命令在本地呈现chart并显示输出。

一旦通过检查,可以使用Helm的工具来确保使用的图表的出处和完整性“ensure the provenance and integrity of charts”。

gRPC工具和安全Tiller配置

许多非常有用的工具直接使用gRPC接口,并且已经针对默认安装构建 – 它们提供了集群范围的访问 – 一旦应用了安全配置后就可能工作不正常。RBAC策略由你或集群运维人员控制,并且可以针对该工具进行调整,或者可以将该工具配置为,在应用于Tiller的特定RBAC策略的约束范围内来正常工作。如果gRPC端点受到保护,则可能需要执行相同的操作:为了使用特定的Tiller实例,这些工具需要自己的安全TLS配置。RBAC策略和gRPC工具一起配置的安全gRPC端点的组合,使你能够按照自己的需要控制群集环境。

Helm和Tiller安全最佳实践

以下指导原则重申了Helm和Tiller安全并正确使用它们的最佳方法。

  1. 创建一个启用了RBAC的集群
  2. 配置每个Tiller gRPC端点以使用单独的TLS证书
  3. Release信息应该使用Kubernetes Secret
  4. 为每个用户,团队或其他具有--service-account参数,role和RoleBindings的组织安装一个Tiller
  5. helm init使用–tiller-tls-verify,其他Helm命令--tls来强制验证

如果遵循这些步骤,则helm init命令可能如下所示:

$ helm init \
--tiller-tls \
--tiller-tls-verify \
--tiller-tls-cert=cert.pem \
--tiller-tls-key=key.pem \
--tls-ca-cert=ca.pem \
--service-account=accountname

此命令将通过gRPC进行强身份验证,并应用RBAC策略的服务帐户安装启动Tiller。

本文转自kubernetes中文社区-Helm 用户指南-系列(8)-安全安装-完结篇

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
数据可视化 开发工具 git
实录之Cocoapods发布第一个自己的库
自己做开发也快五年了,基本都是在做公司的业务逻辑。这期间也收集了一些开发过程中比较好用的一些方法。把他们都放在了我之前写的一个轮子上面。[ZPCategory](https://github.com/cAibDe/ZPCategory) 以前基本都只是写轮子到自己的[Github](https://github.com/cAibDe)上面需要用的时候就在下载下来,然后拖入到需要的项目中去。逐渐发现这样有点麻烦了。就准备自己发布一个库,反正基本开发过的项目都用Cocoapods。这样可以一劳永逸。
实录之Cocoapods发布第一个自己的库
|
Kubernetes 持续交付 开发工具
|
JSON PHP 数据格式
Composer 镜像原理 (3) —— 完结篇
Composer 是一个 PHP 的依赖管理工具,它可以帮助开发者轻松地管理和维护 PHP 项目中的依赖关系。你是否好奇过它的镜像仓库是怎么实现的?本文为你揭晓。
78 0
|
机器学习/深度学习 存储 SQL
快速入门DVC(一):简介
简述 DVC的开发者为iterative.ai,成立于2017年。它是一款开源的,针对机器学习项目的版本控制系统,同时也提供企业服务。起初,DVC从数据版本化管理概念切入,之后,提供对机器学习全方位的支持。
|
存储 Kubernetes 算法
helm v3.8.0 命令入门指南
helm v3.8.0 命令入门指南
|
自然语言处理 数据库 Windows
Wix 安装部署教程(十三) -- 多语言安装包
原文:Wix 安装部署教程(十三) -- 多语言安装包       这几天摸索WIX的多语言安装包(这里是Wix的setup 工程,不是Bundle),终于走通了,感谢网友uni的指点。WIX的多语言安装包能够根据系统环境自动切换界面语言,你也可以通过命令指定语言。
1844 0
|
存储 Kubernetes 关系型数据库
Helm 用户指南-系列(5)-使用
使用Helm 本指南讲述使用Helm(和Tiller)来管理Kubernetes群集上的软件包的基础知识。前提是假定你已经安装了Helm客户端和Tiller服务端(通常通过helm init)。 如果只是想运行一些简单命令,可以从快速入门指南开始。
2231 0
|
Kubernetes 安全 关系型数据库
Helm 用户指南-系列(1)-序言+快速入门
序言 Helm是Kubernetes的一个包管理工具,用来简化基于Kubernetes平台运行的应用的部署和管理,极大的方便了集群运维人员及应用开发人员工作。 本指南是官方Kubernetes的github库中,helm项目下的文档的翻译,依照 https://docs.helm.sh/ 的文档架构和组织,当前翻译了第一大部分的用户指南部分,后续会陆续更新其他章节,用于给刚接触Kubenetes和Helm的朋友一个参考手册。
2365 0
|
Kubernetes 容器
Helm源码解析 资料下载
Helm 是Kubernetes 集群的包管理器(charts), charts 是Kubernetes资源的一个打包集合。 Helm之于Kubernetes好比yum之于RHEL,或者apt-get之于Ubuntu。
2215 0
下一篇
无影云桌面