Azure Kubernetes 服务器和微服务教程(二)
五、保护和监控 AKS 上运行的应用
介绍
首先,祝贺你完成了本书的 60%。在阅读完架构设计和模式之后,在本章中,你将经历另一个有趣而重要的方面——监控和保护基于 Azure Kubernetes 服务的应用。你一定很奇怪我为什么不提微服务。答案很简单——当我说应用时,它涵盖了所有内容。
数字平台计划正在促使组织拥抱云文化。云支持包括构建向客户交付更多价值的战略。其中一个策略关注应用的安全性。随着开发步伐的不断加快,规划应用的安全性以避免业务运营中的任何障碍变得非常重要。
在这里,我将向您介绍应用和集群的安全概念,并以应用在安全性方面的最佳估算者之一作为结论。
安全概念
Kubernetes 和 Microsoft Azure 都包含各自的安全组件。Azure Kubernetes 服务结合了这些安全组件,以:
-
确保您的 AKS 集群运行的是最新的 Kubernetes 版本
-
确保它拥有最新的操作系统安全更新
-
安全 Pod 流量
-
提供对敏感凭据的可信访问
让我们深入了解一些在 Azure Kubernetes 服务中保护应用和集群的核心概念。
主安全
在 AKS 中,每个集群都有一个专用的 Kubernetes 主支持 API 服务器、调度程序等等。这个 Kubernetes API 服务器使用一个 FQDN——一个完全合格的域名——以及一个公共 IP 地址。作为一项 PaaS 服务,Kubernetes 主组件包含在托管服务中,由微软维护。
您可以通过以下方式采用它们:
图 5-1
Azure PortalImage 中的授权 IP 范围功能图片来源:Microsoft 文档
-
您可以创建一个专用集群,限制服务器对专用虚拟网络的访问。
-
使用授权的 IP 范围,您可以限制对 API 服务器端点的访问。参见图 5-1 。
此外,您可以使用 Kubernetes RBAC 和 Azure RBAC 来控制访问。详见 https://docs.microsoft.com/en-us/azure/aks/managed-aad 的实施细节。
节点安全性
Azure Kubernetes 服务节点只不过是您管理的虚拟机。Linux 和 Windows 服务器节点都分别运行优化的 Ubuntu 发行版和 Windows Server 2019 版本,使用 Docker 容器运行时。
无论何时创建 AKS 集群,也无论何时扩展,最新的操作系统安全更新和配置都会自动部署到节点上。
Linux 节点和 Windows server 节点的安全补丁可以通过运行简单的 azure CLI 命令来实现。为了更好地理解,以下 Azure CLI 命令将升级名为myaksbooknodepool的节点池:
az aks nodepool upgrade
--resource-group myAKSBookResourceGroup \
--cluster-name myAKSBookCluster \
--name myaksbooknodepool \
--kubernetes-version KUBERNETES_VERSION \
--no-wait
这只是可用于管理节点的各种简单 Azure CLI 命令中的一个示例。
节点总是部署到专用虚拟网络。甚至节点使用的存储都是由固态硬盘支持的优质 Azure 托管磁盘。在 Azure 平台中,这个磁盘上的数据在静态时总是加密的。Azure 还为隔离的虚拟机提供了选项,这是合规性和监管要求的一部分。这适用于 Linux 和 Windows 虚拟机。在撰写本书时,有几个选项可用于隔离的虚拟机:
-
Standard_E80ids_v4 -
Standard_E80is_v4 -
Standard_F72s_v2 -
Standard_M128ms -
Standard_DC8_v2
集群升级
Azure 提供了一个升级编排工具,它包括 Kubernetes 主组件和代理组件。该工具支持以下操作:
-
AKS 集群及其组件的升级
-
安全维护
-
合规维护
-
访问最新功能
它所需要的只是可用的 Kubernetes 版本,剩下的就交给它了,当然,只需要更少的命令。
网络安全性
为了与本地网络通信,您可以将 AKS 部署到 Azure 虚拟网络子网。使用站点到站点 VPN 或快速路由,此虚拟网络连接到您的内部网络。您还可以使用私有的内部 IP 地址定义 Kubernetes 入口控制器,以限制服务对网络连接的访问。您可以利用 Azure 网络安全组甚至 Kubernetes 网络策略来控制流量。
Azure Kubernetes 服务提供对 Kubernetes 网络策略的支持,以基于名称空间、标签选择器等来限制给定集群中的 pod 之间的网络流量。
不可告人的秘密
使用 Kubernetes Secret,您可以将您的敏感数据(如访问凭证和密钥)添加到 Pods 中。使用机密可以最大限度地减少(Pod 或服务 YAML)清单中敏感信息的使用。您可以请求将该秘密作为您的清单的一部分,将对该信息的访问仅限于特定的 pod。
Kubernetes 的秘密存储在Etcd中,这是一个分布式键值存储。Etcd商店完全由 AKS 管理,数据在 Azure 平台内被加密。见图 5-2 。
图 5-2
Azure 静态加密组件图片来源:微软文档
关于库伯内特的秘密,有几点你需要知道:
-
您可以使用 Kubernetes API 创建一个秘密。
-
你为你的 Pod 定义和请求秘密。
-
秘密不是写在磁盘上,而是存储在
tmpfs里。 -
当需要该秘密的 Pod 被删除时,该秘密也被从
tmpfs节点中删除。 -
机密存储在一个名称空间中,使得它们只能由同一名称空间中的 pod 访问。
除了这些与应用和集群相关的安全概念之外,最好还了解以下内容:
-
Azure Kubernetes 服务的 Azure 安全基线
-
针对 Azure Kubernetes 服务(AKS)的 Azure 策略法规遵从性控制
(见
https://docs.microsoft.com/en-us/azure/aks/security-controls-policy)。)
蓝色库柏服务清单
此清单包含一些在使用 AKS 时要遵循的最佳实践。它不是一种要遵循的圣经,而只是在涉及到安全性时要遵循的最佳实践
图 5-3
Kubernetes Secrets 和 Azure KeyVault 图标
- 避免将敏感信息注入图像,使用秘密代替。如上所述,避免将密码等敏感信息直接输入到图像或清单中。相反,总是使用秘密 Kubernetes Secrets 或 Azure Key vault——来存储这类信息。见图 5-3 。
图 5-4
一名开发人员创建了一个 Pod,它使用托管身份来请求访问 Azure SQL 数据库图片来源:Microsoft 文档
-
执行 Pod 身份识别。不要在 Pod 映像中存储固定的凭据。相反,您可以使用 Pod 身份,它使用 Azure 身份解决方案来访问所需的(Azure)资源。这些凭证可以是用于与其他 Azure 服务对话的任何凭证,如 Azure SQL 或 Azure Storage。您可以在 Kubernetes Secrets 中定义它们,但它需要手动管理。在这里,您可能会错过轮换正在使用的机密的最佳实践。
Azure 资源的 Pod 管理的身份可用于通过 Azure AD 进行访问请求。图 5-4 描述了请求流程。
Note
在写这本书的时候,AK 的 Pod 管理的身份是预览版。
图 5-5
AKS 集群中的命名空间示例图像源:Microsoft 文档
- 使用 Kubernetes 名称空间。名称空间是资源的逻辑分区。它们不仅加强了资源的分离,还限制了允许的用户范围。为了便于理解,不同的业务单位或组可以有不同的名称空间。您应该使用 Kubernetes 名称空间来隔离您的 Kubernetes 资源。见图 5-5 。
创建 AKS 集群时,可以使用以下命名空间:
-
Default:当没有给定名称空间时,这是创建窗格的地方。 -
kube-system:有核心资源的地方。 -
任何用户都可以查看这些资源。
Important
避免使用默认名称空间。
-
为 Pod 指定正确的安全上下文。这是决定 Pod 访问控制设置的一个重要因素。如果没有设置上下文,Pod 将获得默认的上下文,这将为它提供更多的权限。
-
体现最佳实践。确保清单的配置遵循最佳做法。一个好的清单代表一个好的集群。&# x1f 609;
-
对构建的图像进行静态分析。将 DevSecOps 引入到环境中,以促进主动安全模式,开始将责任转移到左边。azure Defender for container registries 可以在这里使用。
-
执行合规 打造形象。您必须浏览 Azure Kubernetes 服务的 Azure 策略内置定义;见
https://docs.microsoft.com/en-us/azure/aks/policy-reference?ref=akschecklist。
Note
收藏以下网址: https://www.the-aks-checklist.com/ 。前面解释的七条戒律是这个论坛的一部分,它们会根据新的环境不断变化。
安全概念:结论
AKS 的安全方面可以在他们自己的一整本书中涵盖。然而,考虑到本章的范围,我试图总结出在使用基于 AKS 的应用时应该知道的事情。当讨论基于 AKS 的应用安全性时,请将这些答案视为您期望从面试官那里得到的答案。
下一节涵盖了另一个重要的领域,监控。
监控概念
您的应用是安全的,但需要一直保持运行和可用。保护不可用的应用是没有用的。因此,监控是你需要认识的一个重要领域。这一节将向您展示监控基于 AKS 的应用以及使用 Azure Monitor 监控 AKS 的细节。
容器洞察
可以监视生成性能指标和资源日志的资源的健康和性能。和其他 Azure 资源一样,Azure Kubernetes 服务也有日志。
Azure Monitor 有一个名为 Container Insights 的特性,它为托管在 AKS 上的托管 Kubernetes 运行这些检查。它之所以受欢迎,是因为它能够呈现来自不同监控场景的数据的交互式视图。它与 Azure Kubernetes 服务进行了本机集成,有助于收集关键日志、发送警报和可视化。图 5-6 展示了 Azure 门户中的容器洞察。
图 5-6
Container insightsImage 的功能来源:Microsoft 文档
以下是使用 Azure Monitor 为 AKS 集群配置监控所需的步骤:
图 5-7
使用 Container Insights 配置 Prometheus 指标的抓取图片来源:微软文档
-
创建日志分析工作区。您必须有一个日志分析工作区,以便从 AKS 集群收集遥测数据。Container Insights 需要至少一个日志分析工作区。
-
启用容器洞察。启用容器洞察取决于您正在使用的 AKS 集群。AKS 集群已经存在还是新创建的?启用后,将部署日志分析代理的容器化版本,它将数据发送到 Azure Monitor。
-
配置普罗米修斯的收藏。使用 Container Insights 允许您收集 Prometheus 指标,而不需要 Prometheus 服务器。这使得该组合对于 E2E 监测是成功的。参见图 5-7 ,该图描绘了 Container Insights 和 Prometheus 的工作情况。
图 5-8
用于在 Azure 门户中配置诊断设置的屏幕
- 收集资源日志。这些是 Azure 中实现的 AKS 控制平面组件的日志。您需要有一个诊断设置来收集这些日志。你可以把它放在日志分析工作区或者 Azure 存储中。图 5-8 显示了配置诊断设置的屏幕。
Azure 监视器功能
有两种方式可以查看 AKS 集群的 Azure Monitor 功能:
图 5-9
Azure 门户中 Kubernetes 服务屏幕的洞察选项
- 转到 Azure 门户➤ Kubernetes 服务,并从左侧窗格中选择监视器部分。这主要是针对单个 AKS 集群的。参见图 5-9 。
图 5-10
Azure Portal 监视器屏幕中的容器细节窗格
-
转到 Azure 门户网站。在搜索框中键入 Monitor ,然后选择 Insights Section ➤容器。
图 5-10 显示了订阅中的所有 AKS 集群。
图 5-11 是 Azure Portal 中 Monitor 的新屏幕视图。它是监控集群、创建警报和许多更酷的实现的入口点。
图 5-11
在 Azure Portal 的监控下容器 新鲜画面
*Azure Kubernetes 服务监控具有不同的实现和独特的需求。这种方法依赖于这些要求。它处理从基础设施到应用的不同层,并根据层提出不同的监控要求。
考虑自下而上的方法,这些层可以如图 5-12 所示列出。
图 5-12
AKSImage 源的层:微软文档
为了保持本章的范围和简洁,我将讨论第 4 级,即监控应用层,它包括在 AKS 集群中运行的应用工作负载。
这一层主要关注监控微服务应用和识别应用故障,以及请求率、响应时间、遇到的任何异常等信息。对于在 AKS 上运行的应用的完整监控,您可以使用应用洞察,如图 5-13 所示。
图 5-13
应用洞察图标
根据您的应用堆栈,您需要配置基于代码的监控来收集所需的数据。它可以是任何东西——Java、Python、.Net 或任何其他平台。在这个例子中,我对 ASP.NET 核心应用更感兴趣。
您需要一个有效的 Application Insights 工具密钥,并创建 Application Insight 资源。
若要创建一个,请转到 Azure 订阅。在搜索中键入 Application Insights ,然后单击新建。您将看到一个屏幕,添加创建服务所需的基本强制细节。输入所有详细信息,然后单击“查看+创建”。参见图 5-14 。
图 5-14
在 Azure 门户中创建应用洞察的屏幕
验证完成后,单击 Create 完成服务创建。
转到新创建的服务屏幕,在 Overview 部分下找到检测密钥、连接字符串和其他详细信息。参见图 5-15 中突出显示的部分。
图 5-15
Azure 门户中应用洞察的工具键
Tip
强烈建议使用连接字符串而不是检测密钥,因为新的 Azure 区域需要连接字符串。无论哪种情况,您都需要创建服务。
接下来,您需要在您的 IDE 中启用应用洞察。我最喜欢的 IDE 是 Visual Studio,但是你也可以使用其他 IDE,比如可视化代码。使用 ide 启用 Application Insights 服务器端遥测后,选择 nu get packages➤Microsoft . application insights . aspnetcore 下载 SDK 的最新稳定版本。参见图 15-16 。
图 15-16
NuGet 包中的 SDK 图片来源:Microsoft 文档
通过向应用添加几行代码,它将从遥测数据开始,并可以在 Azure Portal 的 Applications Insights 屏幕中呈现。可以对这些数据进行分析,并根据应用的状态创建警报。
代码和其他选项请参考 https://docs.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core 。
摘要
本章介绍了关于保护和监控基于 AKS 的应用您应该知道的事情。通过提供的链接,确保您对这些问题有适当的实践经验。这一章结束了这本书的理论部分。下一章使用一个实用的分步方法来实现 Azure Kubernetes 基于服务的应用的 CICD。直到那时,快乐的蔚蓝学习。*
六、AK 的 CI/CD
介绍
你现在在这本书的最后一章。到目前为止,您已经了解了微服务和 Azure Kubernetes 服务的设计考虑事项。您几乎已经准备好监控和保护一个基于 Azure Kubernetes 服务的应用。在这最后一章中,您将了解应用交付的一个重要方面,持续集成和持续部署,重点是基于 Azure Kubernetes 服务的应用。
快速浏览 DevOps
我假设您对这个主题并不陌生,但是在开始这一章之前,我先简单介绍一下 DevOps。
DevOps 将人员、流程和技术结合在一起,自动化软件交付,为您的用户提供持续的价值。DevOps 自动化并加速软件交付。它使您的过程和产品更加可靠。
DevOps 是一个过程,一种实践,一套工具或所有工具的总和。它共同致力于一个组织所采用的更快的软件/产品交付。它在很大程度上放大了团队的统一性,有助于使开发阶段无缝衔接。它受欢迎的主要原因是交付速度更快。您在存储库中编码和添加,CI 用最新的更改构建应用,并向它提供一个可部署的工件。这个工件现在被获取并实时推送,所有这些都是 CD 流程的一部分。这可以在您工作的所有环境中进行。同样的工件可以被提升到更高的环境,比如从开发到 QA 到 UAT 到生产。
Note
如果你是 DevOps 概念的初学者,最好浏览一下在 https://docs.microsoft.com/en-us/learn/modules/get-started-with-devops/2-what-is-devops 找到的文档。
为了让这最后一章更有趣,我用一步一步的方法来介绍这个练习。理论少,实际应用多。我相信这不仅会使你的学习变得有趣,而且会帮助你更容易理解这个话题。& # x1F60A
作为以下练习的先决条件的一部分,您需要在您的计算机上安装有效的 Microsoft Azure 订阅、Visual Studio 作为 IDE、Azure DevOps 项目和 Docker Desktop for Windows。该练习使用 GitHub 作为源代码库。
本次练习的目标
以下是本次练习的日程安排:
-
使用 Azure Portal 创建 Azure Kubernetes 服务。
-
使用 Azure Portal 创建 Azure 容器实例。
-
使用 Visual Studio 构建示例应用。
您可以使用各种工具实现 CI/CD,但如果您是微软云爱好者,以下工具是最佳选择:
-
Azure DevOps
-
GitHub 动作
本章向您介绍了使用 Azure DevOps 的步骤。对于 GitHub 动作,你会得到一个参考链接,你可以把它作为本章的第一个练习。本章中的大多数详细步骤都是不言自明的,但是我会在需要的地方包含更多的细节。
所以做好准备,按照这些步骤来做吧!& # x1F60A
使用 Azure 门户创建 Azure Kubernetes 服务
图 6-1
图像细节步骤 1
- 从
http://portal.azure.com/打开微软 Azure 门户,点击创建资源链接,如图 6-1 所示。
图 6-2
图像细节步骤 2
- 在搜索框中搜索 Kubernetes 服务,或者导航到计算➤ Kubernetes 服务,点击列出的服务,如图 6-2 所示。
图 6-3
图像细节步骤 3
- 您将看到输入基本细节的屏幕。详细信息,如选择您的订阅、资源组、集群名称、区域等。这个例子使用的是 Kubernetes 版本 1.19.11。输入所有必需的详细信息,然后单击节点池的下一步。见图 6-3 。
图 6-4
图像细节步骤 04
- 现在,您将添加一个节点池。单击+添加节点池按钮。您会看到多个选项,如图 6-4 所示。
图 6-5
图像细节步骤 5
- 给出节点池名称,然后选择虚拟机大小,如图 6-5 所示。您不必选择与图中所示相同的虚拟机大小。
图 6-6
图像细节步骤 6
- 将列出新创建的节点。单击“下一步”转到身份验证。见图 6-6 。
图 6-7
图像细节步骤 7
- 选择认证方式和 RBAC 角色,如图 6-7 所示。单击下一步。
图 6-8
图像细节步骤 8
- 选择网络配置为 Azure CNI 等必填字段,如图 6-8 所示。
图 6-9
图像细节步骤 9
- 确保选择 Azure 作为网络策略,如图 6-9 所示。
图 6-10
图像细节步骤 10
- 单击“下一步”并显示集成细节。我会照原样去。点击'审核+创建',如图 6-10 所示。
图 6-11
图像细节步骤 11
- 验证通过后,点击【创建】,如图 6-11 所示。
图 6-12
图像细节步骤 12
- 这将导致显示部署进度的屏幕。部署成功后,点击【转到资源】,如图 6-12 所示。
图 6-13
图像细节步骤 13
- 您将看到新创建的 Kubernetes 集群,如图 6-13 所示。
使用 Azure 门户创建 Azure 容器实例
图 6-14
图像细节步骤 14
- 遵循图 6-14 所示的步骤。
图 6-15
图像细节步骤 15
- 遵循图 6-15 所示的步骤。
图 6-16
图像细节步骤 16
- 在基本屏幕上输入必需的详细信息,其余的设置为默认值。点击审核+创建,如图 6-16 所示。
图 6-17
图像细节步骤 17
- 看到验证通过后,单击创建。见图 6-17
图 6-18
图像细节步骤 18
- 等待部署完成。点击进入资源,如图 6-18 所示。
图 6-19
图像细节步骤 19
- 从左侧刀片中选择门禁,如图 6-19 所示。
图 6-20
图像细节步骤 20
- 点击添加新的角色分配,如图 6-20 所示。
图 6-21
图像细节步骤 21
- 选择呈现用户管理身份的Á远程角色,然后选择新创建的池,如图 6-21 所示。
图 6-22
图像细节步骤 22
- 遵循图 6-22 所示的步骤。
图 6-23
图像细节步骤 23
- 从左侧刀片,进入设置部分下的访问键,如图 6-23 所示。
图 6-24
图像细节步骤 24
- 点击 Toggle 以管理员用户身份启用按键,如图 6-24 所示。
使用 Visual Studio 构建示例应用
图 6-25
图像细节步骤 25
- 在打开 IDE 之前,先去下面的链接下载 Docker 桌面,用默认设置安装:
https://www.docker.com/products/docker-desktop(见图 6-25 )。
图 6-26
图像细节步骤 26
- 图 6-26 显示 Docker 已启动并运行。
图 6-27
图像细节步骤 27
- 现在打开 Visual Studio,选择新建一个项目,如图 6-27 所示。
图 6-28
图像细节步骤 28
- 遵循图 6-28 所示的步骤。
图 6-29
图像细节步骤 29
- 选择应用的名称,如图 6-29 所示。
图 6-30
图像细节步骤 30
- 确保启用 Docker 并选择 Windows 作为 Docker OS,如图 6-30 所示。
图 6-31
图像细节步骤 31
- 您可以看到创建的应用,如图 6-31 所示。
图 6-32
图像细节步骤 32
- 选择运行➤ Kubernetes 应用,如图 6-32 所示。
图 6-33
图像细节步骤 33
- 点击运行应用,如图 6-33 所示。
图 6-34
图像细节步骤 34
- 确保应用运行良好,没有错误。见图 6-34 。
图 6-35
图像细节步骤 35
- 现在,通过右键单击并选择“添加➤新文件”来添加一个新文件。见图 6-35 。
图 6-36
图像细节步骤 36
- 您必须添加这个 YAML 文件,因为它定义了 Kubernetes 中容器的部署细节。见图 6-36
图 6-37
图像细节步骤 37
- 您可以删除这个默认代码,并在下一步添加脚本。见图 6-37 。
图 6-38
图像细节步骤 38
- 以下脚本定义了容器映像的详细信息、它必须创建的副本数量、要公开的端口、缩放指标和更新策略。见图 6-38
图 6-39
图像细节步骤 39
- 遵循图 6-39 所示的步骤。
图 6-40
图像细节步骤 40
- 这个完整的脚本有助于构建容器应用。这是默认脚本,您可以根据需要更改它。见图 6-40
图 6-41
图像细节步骤 41
- 用图 6-41 中的脚本替换默认脚本。该脚本以 dotnet 核心容器映像为基础,构建容器应用。
您已经完成了对应用的必要更改。现在,您将构建用于设置 CI/CD 的管道。
使用 Azure DevOps 的 CI/CD
图 6-42
图像细节步骤 42
- 打开团队资源管理器,并遵循图 6-42 中所示的步骤。
图 6-43
图像细节步骤 43
- 按照图 6-43 所示的步骤连接到 GitHub 存储库。
图 6-44
图像细节步骤 44
- 认证你的 GitHub 凭证,如图 6-44 所示。
图 6-45
图像细节步骤 45
- 一旦授权成功,您将看到如图 6-45 所示的信息。
图 6-46
图像细节步骤 46
- 遵循图 6-46 所示的步骤。
图 6-47
图像细节步骤 47
- 遵循图 6-47 所示的步骤。
图 6-48
图像细节步骤 48
- 遵循图 6-48 所示的步骤。
图 6-49
图像细节步骤 49
- 您创建的应用现在是您 repo 的一部分,并且可以看到文件,如图 6-49 所示。
图 6-50
图像细节步骤 50
- 进入
https://devops.azure.com/,如图 6-50 。
图 6-51
图像细节步骤 51
- 按照图 6-51 所示的步骤创建一个新项目。
图 6-52
图像细节步骤 52
- 遵循图 6-52 所示的步骤。
图 6-53
图像细节步骤 53
- 按照图 6-53 所示步骤启动管道。
图 6-54
图像细节步骤 54
- 点击【创建管道】,如图 6-54 所示。
图 6-55
图像细节步骤 55
- 挑选你的代码;本例使用经典编辑器,如图 6-55 所示。
图 6-56
图像细节步骤 56
- 选择 GitHub,用你的 GitHub 凭证授权,如图 6-56 所示。
图 6-57
图像细节步骤 57
- 选择存放您的应用文件的仓库,如图 6-57 所示。
图 6-58
图像细节步骤 58
- 遵循图 6-58 所示的步骤。
图 6-59
图像细节步骤 59
- 点击继续,如图 6-59 所示。
图 6-60
图像细节步骤 60
- 添加新任务。这是一个 DevOps 管道任务,可以帮助您构建和推送容器映像。您需要使用此任务或任何其他此类任务来构建容器应用。见图 6-60
图 6-61
图像细节步骤 61
- 遵循图 6-61 所示的步骤。
图 6-62
图像细节步骤 62
- 遵循图 6-62 所示的步骤。
图 6-63
图像细节步骤 63
- 遵循图 6-63 中的步骤。
图 6-64
图像细节步骤 64
- 授权您的订阅,如图 6-64 所示。
图 6-65
图像细节步骤 65
- 遵循图 6-65 所示的步骤。
图 6-66
图像细节步骤 66
- 选择路径,如图 6-66 所示。
图 6-67
图像细节步骤 67
- 最好为每个构建创建一个新版本的容器,因为代码中的每个新变化都会构建一个容器。因此,为了保持映像版本的唯一性,请使用管道的构建 ID,该 ID 是管道每次运行构建操作时唯一生成的。图 6-67 中显示的前面带有$的值是 DevOps 管道中的一个变量。
图 6-68
图像细节步骤 68
- 遵循图 6-68 所示的步骤。
图 6-69
图像细节步骤 69
- 这与前面提到的 Docker 映像的构建任务相同。您需要为将要推入 ACR 的 Docker 映像提供一个唯一的版本。因此,使用图 6-69 所示的变量。
图 6-70
图像细节步骤 70
- 我们可以使用替换令牌任务来替换 Azure 容器注册表的 URL,它将用于存储容器图像。您不需要在源代码中对注册中心的 URL 进行硬编码,而是在 YAML 文件中创建一个变量,这个变量最初是为了定义部署到 Kubernetes 中的容器配置而添加的。每次运行时,您可以在管道中提供一个变量,以便在管道运行时,您可以定义容器注册表的详细信息。见图 6-70
图 6-71
图像细节步骤 71
- 遵循图 6-71 所示的步骤。
图 6-72
图像细节步骤 72
- 选择路径,如图 6-72 所示。
图 6-73
图像细节步骤 73
- 在这里,您列出了要替换变量的文件的详细信息,该变量是容器注册表名称。见图 6-73 。
图 6-74
图像细节步骤 74
- 转到变量,点击添加按钮,如图 6-74 所示。
图 6-75
图像细节步骤 75
- 添加ÁCR 作为新的变量名,添加来自 Azure 门户的 ACR 登录服务器 URL 作为值,如图 6-75 所示。
图 6-76
图像细节步骤 76
- 在 Azure Portal 中,获取需要的 URL,如图 6-76 。
图 6-77
图像细节步骤 77
- 粘贴变量名 ACR 的值,如图 6-77 所示。
图 6-79
图像细节步骤 79
图 6-78
图像细节步骤 78
-
添加名为复制文件的新任务名称。遵循图 6-78 所示的步骤。
-
这是一个构建管道,用于构建您的代码,构建的工件将被提供给发布管道以发布代码。使用复制文件任务复制构建的工件。但是在这里,您没有构建任何工件,因为您在构建管道中将图像发送到容器注册表。您需要 YAML,因此您使用这个任务复制它,并将其作为工件发布,以便在发布管道中使用。参见图 7-79 。
图 6-80
图像细节步骤 80
- 添加另一个名为发布构建工件的任务名称。遵循图 6-80 所示的步骤。
图 6-81
图像细节步骤 81
- 按照图 6-81 所示的步骤进行发布任务。
图 6-82
图像细节步骤 82
- 进入触发器部分,通过勾选选项启用持续集成,如图 6-82 所示。
图 6-83
图像细节步骤 83
- 遵循图 6-83 所示的步骤。
图 6-84
图像细节步骤 84
- 现在你将创建释放管道,如图 6-84 所示。
图 6-85
图像细节步骤 85
- 部署到一个 Kubernetes 集群任务,如图 6-85 所示。
图 6-86
图像细节步骤 86
- 给它起个名字,如图 6-86 所示。
图 6-87
图像细节步骤 87
- 遵循图 6-87 所示的步骤。
图 6-88
图像细节步骤 88
- 选择构建,并以您在前面步骤中创建的构建管道作为源来呈现它。参见图 6-88 。
图 6-89
图像细节步骤 89
- 点击高亮图标,启用持续部署触发器,如图 6-89 所示。
图 6-90
图像细节步骤 90
- 使用开关将其激活,如图 6-90 所示。
图 6-91
图像细节步骤 91
- 在“阶段”下,单击任务链接继续。见图 6-91 。
图 6-92
图像细节步骤 92
- 针对该任务,单击 New 创建新的服务连接。见图 6-92 。
图 6-93
图像细节步骤 93
- 选择 Azure 订阅作为身份验证方法,并选择订阅、资源组和命名空间作为默认值。输入服务连接的名称,然后单击保存。见图 6-93 。
图 6-94
图像细节步骤 94
- 继续细节,如图 6-94 所示。
图 6-95
图像细节步骤 95
- 这项任务将把容器部署到 Kubernetes 中,这可以使用您在构建管道中发布的 YAML 文件中编写的指令来完成。提供您在构建任务中复制的 YAML 文件的路径,而不是文件路径。见图 6-95 。
图 6-96
图像细节步骤 96
- 输入秘密详情,如图 6-96 所示。
图 6-97
图像细节步骤 97
- 选择最新版本以确保部署工作正常。见图 6-97 。
图 6-98
图像细节步骤 98
- 当通过更改应用的源代码将容器应用的下一个版本部署到 Kubernetes 中时,您应该获得最新的容器应用。要做到这一点,可以使用 Kubectl
set命令来设置容器的版本;见图 6-98 。
图 6-99
图像细节步骤 99
- 增加如图 6-99 所示的强制细节。
图 6-100
图像细节步骤 100
- 因为每次构建都会创建一个新版本的容器,所以使用带有 Kubectl
set命令的构建 ID 变量来设置构建的镜像的相同版本,作为要在 Kubernetes 中部署的镜像的最新版本。参见图 6-100 。
图 6-101
图像细节步骤 101
- 转到变量部分,添加名为 ACR 的变量名。使用相同的 ACR 服务器 DNS。参见图 6-101 。
图 6-102
图像细节步骤 102
- 遵循图 6-102 所示的步骤。
图 6-103
图像细节步骤 103
- 现在你将对应用做一个小小的改动,如图 6-103 所示。
图 6-104
图像细节步骤 104
- 对
Index.chtml文件进行更改;参见图 6-104 。
图 6-105
图像细节步骤 105
- 添加相关注释,然后提交并推送更改,如图 6-105 所示。
图 6-106
图像细节步骤 106
- 您可以在 Pipelines 部分下查看添加的注释和更改,如图 6-106 所示。
图 6-107
图像细节步骤 107
- 验证更改。参见图 6-107 。
图 6-108
图像细节步骤 108
- 单击并检查状态。参见图 6-108 。
图 6-109
图像细节步骤 109
- 您可以查看所有任务的执行情况;参见图 6-109 。
图 6-110
图像细节步骤 110
- 转到 Azure Portal 并验证用标签推送的更改。它们可以通过选择容器注册➤服务➤仓库看到。参见图 6-110 。
图 6-111
图像细节步骤 111
- 现在在 Azure DevOps 门户中,在 Release 下,可以看到需要部署的相关变更的细节。参见图 6-111 。
图 6-112
图像细节步骤 112
- 可以查看部署进度。参见图 6-112 。
图 6-113
图像细节步骤 113
- 通过点击日志,您可以看到正在执行的步骤。参见图 6-113 。
图 6-114
图像细节步骤 114
- 从 Azure 门户中,选择 Kubernetes 服务。在 Kubernetes 资源部分下,选择工作负载。在“部署”下,将列出最新的部署。参见图 6-114 。
图 6-115
图像细节步骤 115
- 单击列出的部署以查看更多详细信息。参见图 6-115 。
图 6-117
图像细节步骤 117
图 6-116
图像细节步骤 116
-
单击概述,然后单击连接,查看使用 Azure CLI 和示例命令连接群集的方式。按照图 6-116 所示步骤,使用云壳连接 AKS。
-
复制并输入如图 6-117 所示的命令。您可以托管外部 IP。
图 6-118
图像细节步骤 118
- 在浏览器中输入 IP 并查看托管的应用。参见图 6-118 。
图 6-119
图像细节步骤 119
- 现在,一旦验证了 CI/CD 实施。参见图 6-119 。
图 6-120
图像细节步骤 120
- 对
index文件做小改动,如图 6-120 所示。
图 6-121
图像细节步骤 121
- 提交并推动新的变革。参见图 6-121 。
图 6-122
图像细节步骤 122
- 在 GitHub 上也可以看到变化,如图 6-122 。
图 6-123
图像细节步骤 123
- 当然,你可以在 Azure DevOps Portal 中的 Pipelines 下查看这些变化,如图 6-123 所示。
图 6-124
图像细节步骤 124
- 在 Releases 下,您可以看到部署已经成功。这是因为我启用了持续部署触发器。参见图 6-124 。
图 6-125
图像细节步骤 125
- 在浏览器中,刷新页面以验证更改。参见图 6-125 。
您可以看到,应用已经启动并运行良好,只是做了一些更改。& # x1F60A
摘要
如果您遵循了本章中的步骤,CI/CD 将在您的 web 应用中成功实现。这是一个好主意,密切遵循这些步骤两到三次。现在,作为练习的一部分,尝试部署一个 web API,而不是 Web 应用。在构建过程中,您只需更改很少的几个步骤。让我知道你是如何通过本章和其他章节的循序渐进的方法来学习的。我希望这本书加快了你对 Azure Kubernetes 服务的学习之旅。感谢您在学习过程中阅读本书。祝你好运,祝你 Azure 学习愉快。