翻译自 A Walkthrough of Adopting Infrastructure as Code 。
最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用。总结学习下:Terraform 的基础知识。
使用 Terraform 创建 Kubernetes (k8s) 资源涉及将基础设施定义为代码。这允许您的部署实现自动化、版本控制和可重复性。在这里,我将指导您使用 Terraform 创建一些常见的 Kubernetes 资源:命名空间、部署和服务。
GitOps 是使用 Git 作为基础设施和应用程序配置的来源,利用 Git 工作流,实现 Git 仓库中描述配置的自动化。我们知道基础设施配置和应用程序配置经常都需要访问某种敏感资产,也就是我们通常说的 Secrets(比如身份认证 Token、私钥等),才能正确运行、访问数据或以其他方式与第三方系统以安全的方式进行通信。但是如果直接在 Git 中存储 Secrets 数据显然是非常不安全的行为,我们也不应该这样做,即使是有访问权限控制的私有 Git 仓库。
“ Pulumi新推出的K8s Operator,可直接从Git仓库中的程序,自动部署基础设施变更”
当您听到“云原生”这个词时,您首先想到的是 Kubernetes 吗?Kubernetes 现在是仅次于 Linux 的第二大开源项目,是云原生池塘里的大鱼。但是在 CNCF 领域[1]和更广泛的云原生社区中还有许多其他项目。
在之前的文章中,笔者介绍过 AWS CDK ,其是 AWS 开源的一款开发框架,使用常用的编程语言(如 TypeScript、Python 等),利用函数快速构建代码框架来配置、更新和管理云资源,但只支持 AWS 资源的定义和维护,其他公有云无法使用。而 Pulumi 可以以同样的方式在其他公有云上完成与 AWS CDK 类似的工作。
K3s 是 Rancher 发布的经过完全认证的 Kubernetes 发行版。K3s 易于使用且更轻量,全部组件都打包在了一个二进制文件里。并且这个二进制文件小于 100 MB。
微服务框架的流行,使得服务越来越精细化,服务也变的越来越多,对于发布和管理而言产生了巨大的挑战,而 Docker 的诞生,给与微服务的资源治理和控制提供了很好的基础。容器化可以解决各个不同语言环境部署、移植性高、跨平台部署等。但是 Docker 对于容器服务的编排没有那么方便,因为 Docker 这方面不足,而诞生 Kubernetes,Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
你可能已经听过很多遍这个不算秘密的秘密了--Kubernetes Secrets 不是加密的!Secret 的值是存储在 etcd 中的 base64 encoded(编码)[1] 字符串。这意味着,任何可以访问你的集群的人,都可以轻松解码你的敏感数据。任何人?是的,几乎任何人都可以,尤其是在集群的 RBAC 设置不正确的情况下。任何人都可以访问 API 或访问 etcd。也可能是任何被授权在 Namespace 中创建 pod 或 Deploy,然后使用该权限检索该 Namespace 中所有 Secrets 的人。 如何确保集群上的 Secrets 和其他敏感信息(如 token)不被泄露?在本篇博文中,我们将讨论在 K8s 上构建、部署和运行应用程序时加密应用程序 Secrets 的几种方法。
众所周知,Kubernetes secret 只是以 base64 编码的字符串,存储在集群的其余状态旁边的 etcd 中。自 2015 年引入 secret 以来,安全专家就一直在嘲笑这一决定,并寻求其他替代方案。我认为这些人没有抓住要点。
翻译自 Infrastructure as Code in Any Programming Language 。
好久不写 devOps 代码,程序君感觉莫名手欠。最近看着一个开源项目 pulumi 比较有意思,这个周末就在自己的 aws 账号里作死尝试了一把,嗯,还挺香。究竟有多香呢,我们来一起探索吧。
Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中部署 Velero 用于:
Pulumi 是一个开源的基础设施即代码 (Infrastructure as Code) SDK,它可以使用你已经熟悉和喜爱的编程语言来构建和部署任何架构、在任何云上的基础设施。通过使用自己喜欢的语言和工具编写代码,并嵌入到 Automation API 中,在 AWS、Azure、Google Cloud Platform 等 120 多个提供商上快速创建并管理资源。与 YAML 不同,Pulumi 支持循环、函数、类以及包管理等标准语言特性。核心优势如下:
使用 ArgoCD 和 Tekton 在 OpenShift 上创建端到端 DevOps 管道的分步指南
Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用
翻译自 What Infrastructure as Code Must Do for CI/CD 。
Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。
Kubernetes Secret 是 Kubernetes 集群中用于存储敏感数据的一种资源类型。它可以用来存储密码、API 密钥、TLS 证书等敏感信息,以便在 Kubernetes 集群中安全地使用这些信息。
有时候,我们在群集中有一些机密数据,比如说密码、API key的密钥或者证书。这些机密信息只允许那些授权过的或者特定的服务可见,其它运行在群集中的服务不能访问这些数据。
翻译自 7 Core Elements of an Internal Developer Platform 。与本文相比,译者团队用的工具是 Gitea, Backstage 和 Jenkins 。
Hello folks,我是 Luga,今天我们来聊一聊在 Kubernetes Cluster 编排生态环境中一个至关重要的安全 Topic:Kubectl Plugin。
volume形式验证,保证/data/password/下有password文件,文件内容为明文cka1127
MySQL 中的数据是关键信息,是有状态的,不可能随着 MySQL pod 的销毁而被销毁,所以数据必须要外接到一个可靠的存储系统中,目前已经有了 Ceph 系统,所以这里就只考虑如何将 Ceph 作为外部存储的情况,毕竟没有条件去尝试其他存储方案。
2.创建pv,pvc,根据自己的实际情况创建(内置的账号密码为root/admin)
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret 可以以 Volume 或者环境变量的方式使用。
Kubernetes Secret 是 Kubernetes 系统中用来存储和管理敏感信息的一个对象。这些敏感信息可能包括密码、OAuth tokens、SSH 密钥等。使用 Secret 可以更安全地管理敏感数据,因为它们不是以明文存储在 Pod 的定义中或者容器镜像中,而是以加密形式存放在 Kubernetes API 服务器上。
在我们公司,我们尝试使用‘一切事物即代码’的模式,该模式涉及到可复制的基础架构,监控,任务等方面。但是在这篇文章当中,我将向你展示怎样将这种模式运用到 Jenkins 上。是的,我的意思是对于 Jenkins 完全可复制的配置,以及基础架构、插件、凭据、任务以及代码中的其他东西。另外,这篇文章你将解惑下面的疑问:
Vault 是用于处理和加密整个基础架构秘钥的中心管理服务。Vault 通过 secret 引擎管理所有的秘钥,Vault 有一套 secret 引擎可以使用。
Kubernetes 提供了 Secret 对象用于承载少量的机密/敏感数据,在实际使用中,有几种常规或者非常规的方式能够获取到 Secret 的内容:
以base64编码的任意数据。它们是最常见的Secret类型,可以存储任何凭据,如用户名密码、API密钥或TLS证书。
Secrets是一个包含敏感数据的对象,例如我们常用的密码,令牌或密钥等, 我们编写yaml如果直接明文这些信息则会将我们的敏感信息暴漏在我们的脚本中; 所以将其放置在Secret对象中可以更好地控制它的使用方式,并降低意外暴露的风险。
现如今开发的大多数应用程序,或多或少都会用到一些敏感信息,用于执行某些业务逻辑。比如使用用户名密码去连接数据库,或者使用秘钥连接第三方服务。在代码中直接使用这些密码或者秘钥是最直接的方式,但同时也带来了很大的安全问题,如何保证密码、秘钥不被泄露。
Docker 是 Kubernetes Pod 中最常用的容器运行时,但 Pod 也能支持其他的容器运行,比如 rkt、podman等。
这已经是我们用Kubernetes搭建便携式开发环境的第三篇文章了,前两篇文章我们分别在本地的Kubernetes集群上做了什么呢?第一篇文章我们在搭建了一个Etcd集群,由于Etcd没有什么好的管理客户端还搭建了一个Etcd的Web UI客户端。第二篇文章我们搭建了一个单点的MySQL服务和Redis服务,如果想不起来的同学可以翻看前面的两篇文章:
本文将教你如何为在 Kubernetes 上运行的 Spring Boot 应用程序配置 SSL 证书的热重载。
在系列文章的第三篇中,讲到了如何使用 PV 和 PVC 挂载 RBD 上建立好的块存储镜像,但这还是不足以满足 cloud native 环境下的需求,试想如果部署一个应用,需要申请十个 RBD images,PV 和 PVC 的方式下,就需要先手动在 ceph 集群上部署十个 image,这在实际操作时,是完全不可接受的,就算用 Webhook 机制调用脚本自动执行,也会存在一些问题,比如何时释放 RBD image,而且这样也增加了系统的复杂度,更易出错,所以最好是有 Kubernetes 的原生的解决方案。而 Kubernetes 确实提供这样的解决方案,就是本文要谈到的 StorageClass。
在系统介绍了如何实际部署一个K8S项目后,作为本系列文章的最后一篇,我们一起来看看Kubernetes集群内容总览,再对一些更深层次的功能进行总结。
Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。
为了一次性能够部署多套Kubernetes对象,我们使用Helm并把所有的charts都存放在单独的Git仓库里。为了能够部署一套完整的多个服务构成的应用栈,我们使用了叫作Umbrella的chart。它支持声明依赖并且允许我们使用一条命令行来启动我们的API和对应的服务。
Ingress是Kubernetes中实现负载均衡和路由的重要组件,它可以将流量路由到不同的服务中。Ingress支持HTTP和HTTPS两种协议,但默认情况下只支持HTTP。如果要实现HTTPS访问,需要进行一些配置。
之前介绍了 RBD 的使用方法,有了 RBD,远程磁盘挂载的问题就解决了,但 RBD 的问题是不能多个主机共享一个磁盘,如果有一份数据很多客户端都要读写该怎么办呢?这时 CephFS 作为文件系统存储解决方案就派上用场了。
随着 IaC 的兴起,DevOps 中对于与机器直接通信的需求日益增长,这使得开发人员和运维人员能够使用共享语言来实现和管理基础设施。
Kubernetes是一个开源的容器调度和编制系统,最初由谷歌创建,然后捐赠给云计算基金会。Kubernetes自动安排容器在服务器集群中均匀运行,从开发人员和操作人员中抽象出这个复杂的任务。最近,Kubernetes已经成为最受欢迎的容器协调器和调度器。
领取专属 10元无门槛券
手把手带您无忧上云