云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

免备案CDN_国家建设部网站首页_新注册优惠

小七 141 0

使用HashiCorp Vault PKIaaS和JetStack证书管理器的Kubernetes流量入口

它不再是任何人的秘密,安全是所有公司的一个主要问题,当然,TLS证书的管理就是其中之一。但是,证书请求很少是自动化的,仍然需要联系负责PKI的团队来生成它们。通常,这意味着证书的有效期很长,因为您不想每天都要求新的证书。问题是,在云环境中,这不再是可持续的,因为云环境定义为极不稳定,并且具有零信任网络,对于集装箱环境更是如此。这就是为什么我们经常使用在Kubernetes平台上安装的带有通配符的证书,但这并不能解决问题,它只会隐藏它。在本文中,我们将了解如何在Kubernetes环境中使用HashiCorp保险库及其PKI秘密引擎以及JetStack证书管理器来自动创建和管理TLS证书的生命周期。为了简单起见,并使其可重复演示,几乎所有事情都通过HashiCorp Terraform实现自动化,无论是JetStack Cert Manager(使用helm和Kubernetes提供程序)的部署和配置,还是HashiCorp Vault(使用Vault provider)。»我们想要实现什么?我们解释说,kuetes是在一个开放的外部环境中建立一个通用的工作流和证书管理系统。为此,一方面,我们将部署一个Vault服务器,它将充当根PKI和中间PKI,并提供用于颁发证书的API端点;另一方面,我们将部署和配置JetStack Cert Manager,它是一个证书控制器管理器,它将与Vault集成。从工作流程来看,可以这样描述:证书管理器检查证书对象级别是否发生更改,并将使用提供的信息,并通过颁发者向Vault发送请求,因为Vault支持根和中间PKI。在返回签名证书之前,Vault将通过Kubernetes身份验证方法验证证书管理器颁发者的身份和权限。身份验证后,Vault将创建并交付由中间CA签名的特定证书,该证书有效期为10分钟。最后,证书管理器将证书作为Kubernetes secret存储在etcd中,并在证书的生命周期内根据需要进行更新。»您如何为这个演示准备环境?以下是您在笔记本电脑上需要的先决条件(即使这个演示可以在任何托管的K8s集群上完成)。注意:对于这个演示,我将使用我亲爱的朋友laurentbroudoux构建的名为Fruits Catalog的Java应用程序,这个应用程序是我自己开发的。克隆回购首先,即使很明显,您也需要克隆此演示所需的回购。克隆地形代码回购:git克隆https://github.com/nehrman/medium-kubernetes-pkiaas同时克隆Java应用程序的回购:git克隆https://github.com/nehrman/secured-fruits-catalog-k8s安装和配置Minikube注意:这是可选的,因为您可以在现有的Kubernetes环境中执行此操作。您需要在笔记本电脑上安装和配置Minikube。为此,在mac os上,必须启动以下命令才能安装minikube:brew容器安装minikube然后,您必须启用Nginx入口路由器:minikube插件允许进入使用您选择的驱动程序(我使用的是VMware驱动程序)启动Minikube,并拥有足够的资源来处理我们需要的所有服务:minikube start-vm驱动程序vmware-内存8096-cpu 4-磁盘大小50GB你应该得到这样的结果:现在,我们必须安装Helm(自从版本3以来,它更容易、更安全):brew安装舵在开发模式下启动Vault服务器为了使用HashiCorp Vault中的PKI Secret引擎,您需要在本地计算机上启动一个保险库服务器。从HashiCorp网站下载Vault,解压缩并添加到您的路径:卷曲https://releases.hashicorp.com/vault/1.3.4/vault_1.3.4_darwin_amd64.zip-o保险库.zip解压保险库.zipsudo mv保险库/usr/local/bin为了简单起见,我们在开发模式下使用Vault服务器。这意味着一切都将被存储在内存中。当然,您可以决定使用现有的vault或使用我们的参考体系结构构建一个真实的vault。注意:开发模式下的HashiCorp Vault服务器不用于生产,而仅用于开发。vault服务器-dev-dev listen address="0.0.0.0:8200"-dev root token现在,所有的先决条件都满足了,我们可以继续前进…»如何部署演示?好了,现在,我们已经准备好使用Terraform和我们的代码来部署和配置我们所需的一切,以测试和验证证书管理的自动化。注意:本文将不介绍如何下载和配置Terraform,因为我们假设您已经有了它。但首先,即使一切都是完全自动化的,理解代码的作用仍然是值得的。»关于库伯内特斯:创建两个命名空间,一个用于证书管理器,一个用于应用程序创建Vault服务帐户和clusterRoleBinding,使Vault能够通过Kubernetes API验证Pod的身份使用Helm部署和配置证书管理器在应用程序命名空间中创建一个证书管理器服务帐户,允许证书颁发者通过保险库进行身份验证为我们的应用程序配置入口路由在K8s上部署MongoDB在应用程序命名空间中创建与应用程序相关的证书对象»在保险库上:配置Kubernetes身份验证方法以允许证书管理器使用服务帐户进行身份验证为根证书配置Vault PKI密钥引擎为中间证书配置保管库PKI密钥引擎将角色配置为能够按需生成证书配置一个名为"水果目录"的策略,该策略允许PKI对请求进行签名并颁发证书别担心,事情不像看上去那么复杂。现在,让我们继续配置变量并运行terraform来应用它。»配置Kubernetes、HashiCorp Vault和JetStack证书管理器好的,让我们从演示所需的所有组件的部署和配置开始。配置环境变量为了能够连接到Vault,我们需要使用以下命令设置Vault_令牌:export VAULT_TOKEN=根这是我们必须为Vault的Terraform提供程序配置的唯一环境变量。如果要自定义域名或任何其他参数,则所有其他变量都在变量.tf文件,可以根据需要进行更改。注意:不要忘记在变量文件中配置Vault地址,否则Terraform将无法联系Vault服务器。是时候使用地形了这不是最后一步,但至少,你不必手动完成所有的事情。运行terraform init以准备环境:地形初始运行terraform plan检查是否一切正常:地形图最后,运行terraform apply来实现奇迹:地形应用你应该得到这样的结果:注意:将根CA存储在以后web浏览器需要的位置。您还可以通过运行以下命令来检查所有新创建的Kubernetes对象的状态:kubectl get sa-n默认值姓名机密年龄默认值1134米拱顶sa 1 10mkubectl get pods-n证书管理器名称就绪状态重新启动年龄cert-manager-75f6cdcb64-9jcbb 1/1运行0 8m25s证书管理器cainject。。。1/1运行0 8m25s证书管理器webhook-。。。1/1运行0 8m25skubectl get sa-n水果目录姓名机密年龄证书经理sa 1 12m默认12米kubectl get issuer-n水果目录姓名就绪年龄保险库发行人真11mkubectl获得证书-n水果目录名字准备好秘密时代水果证书真水果证书13m然后,可以使用以下命令检查vault颁发者和水果目录证书的详细信息:kubectl描述发行人金库发行人-n水果目录kubectl描述证书水果目录-n水果目录我们几乎完成了所有配置,但我们仍然没有一个应用程序来显示一些好的东西和测试我们的TLS证书。»最后,您可以使用Maven部署水果目录应用程序在我们即将完成的时候,让我们完成最后的步骤,以便有一个完全配置的应用程序,该应用程序具有由HashiCorp Vault中的pkias配置和验证的TLS入口路由。准备好你的环境当我们使用minikube和本地Docker环境时,我们必须配置bash环境以使用minikube中的Docker守护程序:评估$(minikube docker env)使用Maven构建和部署水果目录应用程序现在是时候部署应用程序了,并确保一切正常工作。运行Maven构建应用程序(如果您的笔记本电脑上尚未安装Maven,请运行brew install Maven):mvn fabric8:deploy-Pkubernetes-Dfabric8.namespace=水果目录你应该得到这样的结果:还要检查水果目录名称空间中是否有一个新的pod:kubectl get pods-n水果目录名称就绪状态重新启动年龄水果-目录-6b45f4554d-k6wkp 1/1运行0 74smongodb-58845f7854-f2rpx 1/1运行0 40m现在是时候测试证书的生成和配置是否良好,以及是否一切正常现在,让我们检索CA证书链并配置我们的笔记本电脑以信任证书并测试到应用程序的https连接。从Vault UI检索证书并将其导入到您喜爱的浏览器中。为此,通过Vault WebUI,单击"PKI_INT",然后单击"配置"和"配置"。由于我们使用Vault作为根和中间PKI,因此