你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:部署已连接注册表 Arc 扩展(预览)

在本快速入门中,你将了解如何使用 CLI UX 和默认的安全设置部署已连接注册表 Arc 扩展,以确保可靠的安全性和操作完整性。

已连接注册表是边缘客户的关键工具,无论是在本地还是远程站点上,都能够进行高效管理并访问容器化工作负载。 通过与 Azure Arc 集成,该服务可确保为基于 Kubernetes 的容器化工作负载提供无缝和统一的生命周期管理体验。 在已启用 Arc 的 Kubernetes 群集上已连接注册表 Arc 扩展简化了这些工作负载的管理和访问。

先决条件

  • 设置 Azure CLI 以连接到 Azure 和 Kubernetes。

  • 通过快速入门创建或使用现有的 Azure 容器注册表 (ACR)。

  • 通过启用专用数据终结点,设置 ACR 与已连接注册表之间的防火墙访问和通信。

  • 参考教程创建或使用现有的 Azure KubernetesService (AKS) 群集。

  • 按照快速入门中的说明设置 Kubernetescluster 与 Azure Arc 之间的连接。

  • 使用 k8s-extension 命令管理 Kubernetesextensions。

    az extension add --name k8s-extension
    
  • 在订阅中注册所需的 Azure 资源提供程序,并使用已启用 Azure Arc 的 Kubernetes:

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

    Azure 资源提供程序是 REST 操作的集,可实现特定 Azure 服务的功能。

  • ACR 注册表中的存储库,用于与已连接注册表同步。

    az acr import --name myacrregistry --source mcr.microsoft.com/mcr/hello-world:latest --image hello-world:latest
    

    在 ACR 注册表 myacrregistry 中创建的存储库 hello-world,用于与已连接注册表同步。

使用默认的安全设置部署已连接注册表 Arc 扩展

满足先决条件和必要的条件和组件后,按照简化的方法,使用以下设置在已启用 Arc 的 Kubernetes 群集上安全地部署已连接注册表扩展。 这些设置使用 HTTPS、只读、信任分发和证书管理器服务定义以下配置。 按照以下步骤成功完成部署:

  1. 创建已连接注册表。
  2. 部署已连接注册表 Arc 扩展。
  3. 验证已连接注册表扩展部署。
  4. 部署使用已连接注册表映像的 Pod。

创建已连接注册表并与 ACR 同步

创建要与 ACR 同步的已连接注册表是部署已连接注册表 Arc 扩展的基础步骤。

  1. 创建已连接注册表,该注册表会与 ACR 注册表同步:

    若要创建一个已连接注册表 myconnectedregistry,用于在资源组 myresourcegroup 和存储库 hello-world 中与 ACR 注册表 myacrregistry 同步,请运行 az acr connected-registry create 命令:

    az acr connected-registry create --registry myacrregistry \ 
    --name myconnectedregistry \
    --resource-group myresourcegroup \ 
    --repository "hello-world"
    

将已连接注册表 Arc 扩展部署到已启用 Arc 的 Kubernetes 群集

通过部署已连接注册表 Arc 扩展,可以将容器映像和其他开放容器计划 (OCI) 项目与 ACR 注册表同步。 部署有助于加快对注册表项目的访问速度,并启用高级方案生成功能。 扩展部署可确保已连接注册表与群集中的所有客户端节点之间的安全信任分发,并安装传输层安全性 (TLS) 加密的证书管理器服务。

  1. 生成连接字符串和受保护的设置 JSON 文件

    若要安全部署连接的注册表扩展,请生成连接字符串,包括新的密码、传输协议,并使用 az acr connected-registry get-settings 命令创建扩展部署所需的 protected-settings-extension.json 文件:

    cat << EOF > protected-settings-extension.json
    {
      "connectionString": "$(az acr connected-registry get-settings \
      --name myconnectedregistry \
      --registry myacrregistry \
      --parent-protocol https \
      --generate-password 1 \
      --query ACR_REGISTRY_CONNECTION_STRING --output tsv --yes)"
    }
    EOF
    cat << EOF > protected-settings-extension.json
    {
      "connectionString": "$(az acr connected-registry get-settings \
      --name myconnectedregistry \
      --registry myacrregistry \
      --parent-protocol https \
      --generate-password 1 \
      --query ACR_REGISTRY_CONNECTION_STRING --output tsv --yes)"
    }
    EOF
    echo "{\"connectionString\":\"$(az acr connected-registry get-settings \
    --name myconnectedregistry \
    --registry myacrregistry \
    --parent-protocol https \
    --generate-password 1 \
    --query ACR_REGISTRY_CONNECTION_STRING \
    --output tsv \
    --yes | tr -d '\r')\" }" > settings.json

注意

cat 和 echo 命令会使用连接字符串详细信息创建 protected-settings-extension.json 文件,将连接字符串的内容注入 protected-settings-extension.json 文件中,这是扩展部署的必要步骤。 az acr connected-registry get-settings 命令会生成连接字符串,包括创建新密码和传输协议规范。

  1. 部署已连接注册表扩展

    通过 az k8s-extension create 命令使用指定的配置详细信息部署已连接注册表扩展:

  az k8s-extension create --cluster-name myarck8scluster \ 
  --cluster-type connectedClusters \
  --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \
  --name myconnectedregistry \
  --resource-group myresourcegroup \ 
  --config service.clusterIP=192.100.100.1 \ 
  --config-protected-file protected-settings-extension.json  
  • az k8s-extension create 命令会使用提供的配置参数和受保护的设置文件在 Kubernetes 群集上部署已连接注册表扩展。
  • 扩展部署可确保已连接注册表与群集中的所有客户端节点之间的安全信任分发,并安装传输层安全性 (TLS) 加密的证书管理器服务。
  • clusterIP 必须来自 AKS 群集子网 IP 范围。 service.clusterIP 参数指定群集中已连接注册表服务的 IP 地址。 在 Kubernetescluster 的有效服务 IP 范围内设置 service.clusterIP 至关重要。 确保为 service.clusterIP 指定的 IP 地址位于群集初始配置期间定义的指定服务 IP 范围内,该配置通常位于群集的网络设置中。 如果 service.clusterIP 不在此范围内,则必须将其更新为同时在有效范围内且当前未被其他服务使用的 IP 地址。

验证已连接注册表扩展部署

若要验证在已启用 Arc 的 Kubernetescluster 上部署的已连接注册表扩展,请执行以下步骤:

  1. 验证部署状态

    运行 az k8s-extension show 命令来检查已连接注册表扩展的部署状态:

  az k8s-extension show --name myconnectedregistry \ 
  --cluster-name myarck8scluster \
  --resource-group myresourcegroup \
  --cluster-type connectedClusters

示例输出

    {
    "aksAssignedIdentity": null,
    "autoUpgradeMinorVersion": true,
    "configurationProtectedSettings": {
      "connectionString": ""
    },
    "configurationSettings": {
      "pvc.storageClassName": "standard",
      "pvc.storageRequest": "250Gi",
      "service.clusterIP": "[your service cluster ip]"
    },
    "currentVersion": "0.11.0",
    "customLocationSettings": null,
    "errorInfo": null,
    "extensionType": "microsoft.containerregistry.connectedregistry",
    "id": "/subscriptions/[your subscription id]/resourceGroups/[your resource group name]/providers/Microsoft.Kubernetes/connectedClusters/[your arc cluster name]/providers/Microsoft.KubernetesConfiguration/extensions/[your extension name]",
    "identity": {
      "principalId": "[identity principal id]",
      "tenantId": null,
      "type": "SystemAssigned"
    },
    "isSystemExtension": false,
    "name": "[your extension name]",
    "packageUri": null,
    "plan": null,
    "provisioningState": "Succeeded",
    "releaseTrain": "preview",
    "resourceGroup": "[your resource group]",
    "scope": {
      "cluster": {
        "releaseNamespace": "connected-registry"
      },
      "namespace": null
    },
    "statuses": [],
    "systemData": {
      "createdAt": "2024-07-12T18:17:51.364427+00:00",
      "createdBy": null,
      "createdByType": null,
      "lastModifiedAt": "2024-07-12T18:22:42.156799+00:00",
      "lastModifiedBy": null,
      "lastModifiedByType": null
    },
    "type": "Microsoft.KubernetesConfiguration/extensions",
    "version": null
  }
  1. 验证已连接注册表的状态

    对于每个已连接注册表,可以使用 az acr connected-registry list 命令查看已连接注册表的状态:

        az acr connected-registry list --registry myacrregistry \
        --output table
    

示例输出

    | NAME | MODE | CONNECTION STATE | PARENT | LOGIN SERVER | LAST SYNC(UTC) |
    |------|------|------------------|--------|--------------|----------------|
    | myconnectedregistry | ReadWrite | online | myacrregistry | myacrregistry.azurecr.io | 2024-05-09 12:00:00 |
    | myreadonlyacr | ReadOnly | offline | myacrregistry | myacrregistry.azurecr.io | 2024-05-09 12:00:00 |
  1. 验证特定的已连接注册表详细信息

    有关特定已连接注册表的详细信息,请使用 az acr connected-registry show 命令:

  az acr connected-registry show --registry myacrregistry \
  --name myreadonlyacr \ 
  --output table

示例输出

   | NAME                | MODE      | CONNECTION STATE | PARENT        | LOGIN SERVER             | LAST SYNC(UTC)      | SYNC SCHEDULE | SYNC WINDOW       |
   | ------------------- | --------- | ---------------- | ------------- | ------------------------ | ------------------- | ------------- | ----------------- |
   | myconnectedregistry | ReadWrite | online           | myacrregistry | myacrregistry.azurecr.io | 2024-05-09 12:00:00 | 0 0 * * *     | 00:00:00-23:59:59 |
  • az k8s-extension show 命令会验证扩展部署的状态。
  • 该命令还提供有关已连接注册表的连接状态、上次同步、同步窗口、同步计划等的详细信息。

部署使用已连接注册表映像的 Pod

若要部署使用群集中已连接注册表映像的 Pod,必须在群集节点本身执行该操作。 执行以下步骤:

  1. 在群集中创建机密,以使用已连接注册表进行身份验证:

运行 kubectl 创建机密 docker-registry 命令,在群集中创建机密,以便使用已连接注册表进行身份验证:

kubectl create secret docker-registry regcred --docker-server=192.100.100.1 --docker-username=mytoken --docker-password=mypassword
  1. 使用已连接注册表的 service.clusterIP 地址 192.100.100.1 的值和包含标记 latest 的映像名称 hello-world 来部署使用来自已连接注册表的映像的 pod:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-world-deployment
      labels:
        app: hello-world
    spec:
      selector:
        matchLabels:
          app: hello-world
      replicas: 1
      template:
        metadata:
          labels:
            app: hello-world
        spec:
          imagePullSecrets:
            - name: regcred
          containers:
            - name: hello-world
              image: 192.100.100.1/hello-world:latest
    EOF
    

清理资源

通过删除已部署的已连接注册表扩展,可以删除相应的已连接注册表 Pod 和配置设置。

  1. 删除已连接注册表扩展

    运行 az-k8s-extension delete 命令以删除已连接注册表扩展:

    az k8s-extension delete --name myconnectedregistry 
    --cluster-name myarcakscluster \ 
    --resource-group myresourcegroup \ 
    --cluster-type connectedClusters
    

通过删除已部署的已连接注册表,可以删除已连接注册表云实例及其配置详细信息。

  1. 删除已连接注册表

    运行 az acr connected-registry delete 命令以删除已连接注册表:

    az acr connected-registry delete --registry myacrregistry \
    --name myconnectedregistry \
    --resource-group myresourcegroup 
    

后续步骤