65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure Arc 启用的 Kubernetes(第一部分):设置 Azure Arc 启用的 Kubernetes

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2022 年 6 月 6 日

CPOL

7分钟阅读

viewsIcon

4070

在本系列文章的第一篇中,我们将探讨如何将 Azure Arc 连接到托管在云中的 Kubernetes 集群并应用策略。

混合和多云工作负载的设置和管理历来令人头痛。Azure Arc 将您的多云、多数据中心和边缘管理整合到一个解决方案中,提供统一的可见性和控制。

在本文中,我们将演示如何将非 Azure 托管的 Kubernetes 集群连接到 Azure Arc。使用 Azure Arc,我们可以在 Azure 门户中管理非 Azure 托管的 Kubernetes 集群,从而实现对预先存在的 Kubernetes 集群和其他服务器的集中管理。

必备组件

要学习本教程,您需要

  • 具有管理员权限的本地环境
  • 本地环境必须安装并配置以下工具
  • 一个具有足够权限创建 SSH 密钥并 SSH 到远程虚拟机 (VM) 的本地终端
  • 访问您想要管理的 Kubernetes 云集群(或者按照以下说明设置新的 Kubernetes 集群)
  • 一个具有足够权限的有效 Azure 订阅,或者设置一个免费的 Azure 帐户并获得 200 美元的信用额度和免费服务。在本系列中使用的大部分 Azure Arc Kubernetes 功能都是免费的(尽管本系列后续文章将使用日志分析工作区和存储帐户等服务来存储策略等。这些服务确实会产生费用)。

托管 Kubernetes 集群

我们将从设置一个新的 Kubernetes 集群开始,然后将其链接到 Azure Arc。我们可以连接到任何 Kubernetes 集群,但为了简单起见,我们将使用托管 Kubernetes 服务。

我们在本次演示中使用提供商DigitalOcean,但您可以使用任何您选择的云提供商。请确保为此集群配置至少两个 CPU。否则,Pod 将无法全部运行,导致 Azure Arc 连接失败。

我们创建了一个名为 **Azure-Arc** 的项目,并在该项目中创建了名为 **k8s-1-21-5-do-0-ams3-azure-arc** 的 Kubernetes 集群。

我们选择新创建的集群。这样做会带我们进入“**入门**”屏幕,其中会指导我们完成设置和安装管理集群所需的工具。然后,我们将配置下载到本地环境以连接到集群,并安装可选的第三方应用程序来管理集群。

安装和配置 doctl

除了 kubectl,我们还需要 Digital Ocean 的命令行工具 doctl。GitHub 仓库提供了在各种环境中安装它的详细说明。我们只介绍在 Linux 中安装的快速步骤,因为这是我们的本地管理员正在运行的环境。

首先,使用以下命令下载最新版本的 doctl

cd ~
wget https://github.com/digitalocean/doctl/releases/download/v<version>/doctl-<version>-linux-amd64.tar.gz

我们需要将版本号放入 <version> 占位符中。我们将使用版本 1.65.0。

接下来,我们解压二进制文件

tar xf ~/doctl-<version>-linux-amd64.tar.gz

然后,我们将二进制文件移动到我们的本地 bin 文件夹

sudo mv ~/doctl /usr/local/bin

然后我们对集群进行身份验证

doctl auth init --context <Your Cluster Name>

请注意,我们需要一个访问令牌来对集群进行身份验证。我们通过遵循标题为“如何创建个人访问令牌”的指南来生成此令牌。

接下来,我们切换身份验证

doctl auth list
doctl switch --context <ClusterName>

现在,我们验证我们可以连接到我们的集群

doctl account get
doctl compute droplet create --region tor1 --image ubuntu-18-04-x64 --size s-1vcpu-1gb <DROPLET-NAME>
doctl compute droplet delete <DROPLET-ID>

我们使用以下命令连接到 Kubernetes 集群,或者按照云提供商的说明操作。

doctl kubernetes cluster kubeconfig save <ClusterName>

将 Kubernetes 集群连接到 Azure Arc

我们的 Kubernetes 集群已准备就绪。现在我们需要使用 Arc Kubernetes 代理连接到 Azure Arc。

我们将使用 Azure CLI 将刚刚创建的 Kubernetes 集群连接到 Azure。我们必须安装 connectedk8s Azure CLI 扩展,因此我们运行此命令

az extension add --name connectedk8s
az extension add --name k8s-configuration

此安装可能需要几秒钟。扩展安装完成后,我们就可以继续了。从现在开始,我们必须登录到我们的 Azure 订阅。从 CLI,我们使用此命令登录

az login

此命令会在我们的互联网浏览器中打开一个页面,要求我们登录到我们的 Microsoft 帐户。登录后,CLI 会列出我们所有的订阅。

我们在上图中已将识别信息进行了 redaction,但我们需要确保我们使用的是正确的订阅。isDefault 标志标记当前活动的订阅。如果这不是正确的订阅,您可以使用以下命令和订阅名称或 ID 进行切换。

az account set --subscription

登录并确认我们处于正确的订阅后,我们运行以下命令来注册 Azure Arc 启用 Kubernetes 的提供程序

az provider register --namespace Microsoft.Kubernetes
az provider register --namespace Microsoft.KubernetesConfiguration
az provider register --namespace Microsoft.ExtendedLocation

虽然此过程可能需要长达 10 分钟,但我们可以使用以下命令监视进度

az provider show -n Microsoft.Kubernetes -o table
az provider show -n Microsoft.KubernetesConfiguration -o table
az provider show -n Microsoft.ExtendedLocation -o table

注册完成后,注册状态会变为“**已注册**”。

我们必须将 Kubernetes 集群分配给一个资源组。因此,让我们使用以下命令快速创建一个

az group create --name AzureArc --location WestEurope --output table

现在我们将 Kubernetes 集群连接到 Azure Arc

az connectedk8s connect --name k8s-1-21-5-do-0-ams3-azure-arc --resource-group AzureArc

此操作将需要一段时间才能完成。此命令还有一个条件集,规定所有 Pod 都必须正在运行。

命令成功后,CLI 会显示我们集群的详细信息。

验证连接

我们可以使用以下命令验证连接

az connectedk8s list --resource-group AzureArc --output table

我们也可以通过登录 **Azure Portal** 并搜索和选择 **Kubernetes - Azure Arc** 来验证连接。

此操作会将我们带到“**Kubernetes - Azure Arc**”部分,该部分显示我们新连接的集群。

或者,我们可以在外部 Kubernetes 集群上通过检查 **azure-arc** 命名空间下的 Pod 来验证连接。

kubectl get pods -n azure-arc

此命令会显示连接到 Azure Arc 所需的 Kubernetes 集群的所有 Pod。

使用 Azure 策略管理 Arc 启用的 Kubernetes 集群

连接集群到 Azure Arc 后,我们可以执行和安装各种扩展来管理集群或添加监控工具。其中大部分超出了本文的范围,但我们将在本系列的第二篇文章中添加安全和监控,并在第三篇文章中部署容器。在这里,我们想演示如何在 Azure Arc 中的 Kubernetes 集群上应用策略。

我们通常出于两个原因应用策略:以集中、一致的方式强制执行和保护我们的 Kubernetes 集群,并在规模上将 GitOps 配置应用于我们的 Kubernetes 集群。

要应用 Azure 策略,我们首先需要注册 Microsoft.PolicyInsights 命名空间

az provider register --namespace 'Microsoft.PolicyInsights'

我们还需要创建一个服务主体以与这些策略一起使用。此命令创建一个名为 **AzArcK8s** 的服务主体

az ad sp create-for-rbac -n "AzArcK8s"

注意:您需要足够的 Azure Active Directory 权限才能创建上述服务主体。如果您没有足够的权限,请联系您的管理员为您创建服务主体。

我们可以使用此命令将仓库添加到 Helm Kubernetes 包管理器

helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-charts

然后,我们可以使用 Helm 安装 azure-policy 附加组件。这将把所有必需的 Pod 安装到我们的 Kubernetes 集群中,位于 kube-system 和 gatekeeper-system 命名空间下。我们必须使用之前创建的服务主体的详细信息。

helm install azure-policy-addon azure-policy/azure-policy-addon-arc-clusters ¶    --set azurepolicy.env.resourceid=<AzureArcClusterResourceId> \
    --set azurepolicy.env.clientid=<ServicePrincipalAppId> \¶    --set azurepolicy.env.clientsecret=<ServicePrincipalPassword> \
    --set azurepolicy.env.tenantid=<ServicePrincipalTenantId>

安装附加组件后,我们就可以将策略应用于 Arc 启用的 Kubernetes 集群。

我们通过运行以下命令来验证附加组件的安装,并确保策略下的 Pod 在 kube-system 命名空间中运行,gatekeeper 在 gatekeeper-system 命名空间中运行。

kubectl get pods -n kube-system
kubectl get pods -n gatekeeper-system

为 Azure Arc Kubernetes 集群分配策略

我们现在将为我们的 Kubernetes 集群分配一个策略。目前,Microsoft 限制我们只能分配内置策略。

要使用 Azure 门户分配策略,我们在“**Kubernetes - Azure Arc**”下选择我们的 Arc 启用集群,然后在“**设置**”部分选择“**策略**”。

请注意,Azure 指出我们应该启用 Azure Arc 启用 Kubernetes 集群的 Azure 策略。该消息还为我们提供了 Azure 策略的链接。我们点击该链接进入“**合规性**”页面。

我们在“**合规性**”页面上选择“**分配策略**”,这会带我们进入“**分配策略**”页面。

在“**策略定义**”旁边,我们选择蓝色的省略号(**...**)以打开内置定义。

然后,我们在“**搜索**”框中输入 **Kubernetes** 来细化搜索。现在我们可以看到所有可用于 Kubernetes 的策略。

选择策略 **[预览]:Azure Arc 启用的 Kubernetes 集群应安装 Azure Defender 的扩展**,然后单击“**选择**”按钮。此操作将填充“**策略定义**”和“**分配名称**”字段。然后我们单击“**审阅 + 创建**”。

在审阅页面上确保所有策略信息均正确,然后单击“**创建**”。

Azure 成功创建策略后,它会将我们带回到“**合规性**”页面,该页面现在列出了我们新创建的策略。默认情况下,其“**合规性状态**”为“**未开始**”。

此设置大约在 15 分钟后更新。

后续步骤

现在我们已经托管了一个 Kubernetes 集群并安装了其 CLI 工具。我们将集群连接到 Azure Arc 并安装了策略附加组件以在我们的集群上启用策略。

您还可以阅读 What the Hack 系列中的 Arc 启用的 Kubernetes 部分以获取更多信息。

注册以试用 Azure Arc,供您或您的组织使用,或继续阅读本系列的第二部分,了解如何为您的 Kubernetes 集群添加安全和监控

要了解有关如何开始使用 Azure Arc 启用 Kubernetes 或 Azure Arc 启用 Kubernetes 如何允许您附加和配置在任何地方运行的 Kubernetes 集群的更多信息,请查看我们关于 Azure Arc 启用 Kubernetes 的资源页面

© . All rights reserved.