PuppetConf2016。面向系统管理员的Kubernetes。第三部分

PuppetConf2016。面向系统管理员的Kubernetes。
PuppetConf 2016的第1部分。适用于系统管理员的Kubernetes。第2部分

我们采用Lobsters应用程序并创建具有新要求的新图像。首先,输入部署命令$ kubectl apply –f deployments / lobsters.yaml并将应用程序发送到集群,集群将根据更新策略对每个可用的应用程序实例执行滚动更新。首先,系统确保每个实例都可运行,然后在下一组容器中销毁它们。



让我们看看它是如何工作的。为此,我们重新加载了网站,现在缺少白点将使我们的营销人员满意。



作为系统管理员,您可以说:“这里没有HTTPS,这样的网站很容易被黑客入侵,很危险!”如何解决这个问题?我认为Kubernetes可以在其解决方案中充当框架,使系统管理员可以实施创造性的工作方式。如果我可以声明地说:“我想为此站点获取Let's Encrypt证书,但我不想重新部署此容器,那就太好了。”我希望在力所能及的范围内完成此任务,而无需求助于应用程序开发团队。 Kubernetes支持此功能,因为它支持自定义扩展。

我谈到了kubectl,pod,部署,服务,但我们也有自定义类型-可以从Puppet获取的自定义资源类型。在Puppet,我们可以定义新的类型,以便我们可以使用此系统进行工作。
让我们看看它在Kubernetes中的外观。首先,我们需要扩展证书,这就是它的外观。在这里,我们拥有自己的hightower.com命名空间,经过认证的对象位于该命名空间中。



我们使用$ kubectl create –f extensions / certificate.yaml命令在Kubernetes中创建一个新扩展,然后在后端自动创建存储并管理此状态。



这个新对象的外观要求我使用新工具来跟踪更改并对证书对象采取措施。也就是说,后台的此工具应与“让我们加密”交互并获得有效的证书。为此,我使用秘密-我将非常快速地演示如何完成此操作。

因此,我们需要一个新的子程序,我将展示与之前的代码相比有什么区别。我将nginx添加到现有容器中,因此我们无需联系开发团队。我们继续通过简单地将容器放在现有壁炉的顶部来使用HTTPS。



该容器接受HTTPS流量,并且需要配置文件才能与后端进行交互。我还需要nginx从文件系统下载的一些证书,因此环境变量在这里不起作用。我没有写nginx,所以我不能让他这样做。



因此,我只是在炉膛内添加此容器,然后转到两个秘密。



TLS证书是第一个也是最重要的秘密,它应该来自Let's Encrypt。我不会将“加密”报告给我的应用程序,而是将其报告给系统。我想控制这种抽象。所以现在我必须为nginx创建一个配置文件。这是看起来像这样的主要配置文件。

在此处指定了端口443,并启用了SSL,它将在文件系统中查找这2个文件,捕获流量并将其发送到本地主机127.0.0.1 {000。



这正是我的应用程序侦听的内容。现在,我将使用以下命令创建configmap-nginx配置图。



现在,使用$ kubectl get configmaps命令,将configmap“ nginx”放置在与磁盘同名的系统上。



接下来,您需要创建一个秘密,再次提醒您-我希望一切都实现自动化,并且我不想干扰获取证书的过程。为此,我正在部署一个名为“ kube-cert-manager”的工具,这就是结果。



我们正在尝试获取一个有效的“让我们加密”证书,我的浏览器将信任该证书,并将其作为秘密插入后端。因此,对于我的壁炉来说,我们对其内容进行补充的事实没有任何区别。如果您还记得的话,所有这些都是通过在Puppet中创建自定义类型来完成的。

也许这是个坏主意,但现在我将尝试启动控制器,该控制器将在后台运行。我们不编译,我们不创建提供程序,此守护程序仅在后台运行并监视更改。证书对象一出现,它就会通过Let's Encrypt接收它并将其实时插入系统中,而不会产生任何延迟。因此,我使用以下命令。



这个东西也有存储空间,所以我们可以保存我们需要的一切。 kube-cert-manager认证经理需要花费几秒钟才能开始工作。



我们需要做的下一件事是创建一个证书对象。这就是我自己定义的,这是我自己的方案。我正在创建Kubernetes到目前为止尚未达到的新功能,它表示我可以获取lobsters.com域的证书。



让我们加密为我提供有效的证书时,必须有一个电子邮件地址和其他信息。让我们加密将给我发送一个交换令牌,以查看我是否确实拥有该域,并且需要将此令牌应用于我在Google Cloud中的DNS。如果检查通过,他们将给我真实的证书,并将其插入文件系统中。通过输入$ kubectl get pods命令,看看它是如何工作的。



如您所见,证书管理器仍在工作。让我们使用$ kubectl describe pods kube-cert-manager命令查看有关此过程的详细信息,并从第一行代码中插入容器名称。



您会看到工作正在按计划进行。目前,服务器正在创建一个卷,经过检查和格式化后,该卷将安装在该服务器上。在此过程进行期间,我们可以走得更远并完成工作。

我输入kubectl create –f certificate / lobsters.yaml命令并获得以下结果。



接下来,我使用一个命令,使您可以查看几个容器的日志。我将重点介绍与我的对象有关的一个。



现在,我的基于云的DNS服务器中正在创建DNS记录。如果刷新此处显示的页面,将会看到扩展名为.txt的新交换令牌。



因此,我从Let's Encrypt接收到令牌,现在我告诉该加密货币在我的域中检查此文本条目之前,我已验证此DNS记录已分发到所有授权服务器。



如果可行,他们会寄给我有效的证书。实时DNS演示是一个坏主意。是的,我们终于获得了证书。让我们加密发现证书从Kubernetes中消失了,并将其插入到那里。很好,因为现在我已经为Kubernetes中运行的所有内容提供了一个证书请求接口。

为了确保一切正常,我输入$ kubectl get secrets命令,我们看到lobsters.hightowerlabs.com的一个秘密。



现在,我使用命令$ kubectl delete secrets lobsters.hightowerlabs.com,因为它是声明性系统,所以我们不删除证书对象,而是摆脱与Kubernetes内部的证书对象相关的秘密。结果,我们必须确保在删除此元素时,系统将返回“ Let's Encrypt”证书本身。这与我们在Puppet中所做的非常相似,只是在此处在线发生。

确保一切正常后,我们将重新部署名为“ lobsters-secure”的nginx应用程序,这将确保新域的安全。他的图像与先前的版本相似,但不同之处在于我们将nginx放在此处。 Nginx选择了秘密链接,然后Kubernetes将其插入文件系统,结果我获得了特定域的有效证书。

为此,我使用相同的名称输入命令$ kubectl apply –f Deployments / lobsters-secure.yaml,以便此命令覆盖现有状态。接下来,使用$ kubectl get pods命令,这表明由于我们的定义已更改,此处正在进行滚动更新。

更新完成后,很明显新定义已用于此应用程序。我想确保证书对我们的DNS名称有效,为此我输入命令$ kubectl get svc并复制龙虾站点的IP地址。



通过转到Google Cloud标签,您可以看到该地址与域名lobsters.hightowerlabs.com对应的地址匹配。现在,如果您在浏览器的地址栏中输入lobsters.hightowerlabs.com,则可以看到我们拥有有效的证书。



谢谢,这就是我想在Kubernetes for System Admins报告中所说的。


一点广告:)


感谢您与我们在一起。你喜欢我们的文章吗?想看更多有趣的资料吗?通过下订单或向您的朋友推荐给开发人员的基于云的VPS,最低价格为4.99美元这是我们为您发明的入门级服务器 独特类似物:关于VPS(KVM)E5-2697 v3(6核)的全部真相10GB DDR4 480GB SSD 1Gbps从$ 19还是如何划分服务器?(RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

阿姆斯特丹的Equinix Tier IV数据中心的戴尔R730xd便宜2倍吗?在荷兰2台Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100电视戴尔R420-2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB-$ 99起!阅读有关如何构建基础设施大厦的信息。使用Dell R730xd E5-2650 v4服务器花费一欧元9000欧元的c类?

All Articles