你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用最低特权操作已启用 Azure Arc 的数据服务
使用最低特权运行已启用 Arc 的数据服务是一种安全最佳做法。 仅向用户和服务帐户授予执行所需任务所需的特定权限。 Azure 和 Kubernetes 都提供基于角色的访问控制模型,可用于授予这些特定权限。 本文介绍应应用最低特权安全性的某些常见方案。
注意
在本文中,将使用 arc
的命名空间名称。 如果选择使用其他名称,请在整个过程中都使用相同的名称。
在本文中, kubectl
CLI 实用工具用作示例。 不过,可以使用任何使用 Kubernetes API 的工具或系统。
部署 Azure Arc 数据控制器
部署 Azure Arc 数据控制器需要一些权限,这些权限可以被视为高特权,例如创建 Kubernetes 命名空间或创建群集角色。 可以遵循以下步骤将数据控制器的部署分为多个步骤,每个步骤都可以由具有所需权限的用户或服务帐户执行。 这种职责分离可确保进程中的每个用户或服务帐户仅具有所需的权限。
部署命名空间以便在其中创建数据控制器
此步骤将创建一个新的专用 Kubernetes 命名空间,在其中部署 Arc 数据控制器。 首先必须执行此步骤,因为以下步骤将使用新的命名空间作为授予的权限的范围。
执行此操作所需的权限:
- 命名空间
- 创建
- 编辑(如果需要 OpenShift 群集)
运行与下面类似的命令来创建新的专用命名空间,数据控制器将在该命名空间中进行创建。
kubectl create namespace arc
如果你使用的是 OpenShift,则需要使用 kubectl edit namespace <name of namespace>
编辑命名空间上的 openshift.io/sa.scc.supplemental-groups
和 openshift.io/sa.scc.uid-range
注释。 更改这些现有注释以匹配这些特定的 UID 和 fsGroup ID/范围。
openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000
向部署服务帐户和用户/组分配权限
此步骤将创建一个服务帐户,并将角色和群集角色分配给服务帐户,以便服务帐户可用于在作业中部署具有最低权限的 Arc 数据控制器。
执行此操作所需的权限:
- 服务帐户
- 创建
- 角色
- 创建
- 角色绑定
- 创建
- 群集角色
- 创建
- 群集角色绑定
- 创建
- 向服务帐户授予的所有权限(请参阅下面的 arcdata-deployer.yaml,了解详细信息)
保存 arcdata-deployer.yaml 的副本,并将文件中的占位符 {{NAMESPACE}}
替换为上一步中创建的命名空间,例如:arc
。 运行以下命令,使用编辑后的文件创建部署程序服务帐户。
kubectl apply --namespace arc -f arcdata-deployer.yaml
向用户授予创建引导程序作业和数据控制器的权限
执行此操作所需的权限:
- 角色
- 创建
- 角色绑定
- 创建
保存 arcdata-installer.yaml 的副本,并将文件中的占位符 {{INSTALLER_USERNAME}}
替换为要授予权限的用户名称,例如:john@contoso.com
。 根据需要添加其他角色绑定主题,例如其他用户或组。 运行以下命令,使用编辑后的文件创建安装程序权限。
kubectl apply --namespace arc -f arcdata-installer.yaml
部署引导程序作业
执行此操作所需的权限:
- 在上一步中分配给 arcdata-installer-role 角色的用户
运行以下命令以创建引导程序作业,该作业将运行准备步骤以部署数据控制器。
kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/deploy/yaml/bootstrapper.yaml
创建 Azure Arc 数据控制器
现在,可开始创建数据控制器。
首先,在计算机上本地创建模板文件的副本,以便可以修改某些设置。
创建指标和日志仪表板用户名和密码
在该文件开头,你可以作为管理员指定用于向指标和日志仪表板进行身份验证的用户名和密码。 请选择安全的密码,并只与需要拥有这些特权的人共享。
Kubernetes 机密以 base64 编码的字符串形式存储 - 一个用于用户名,另一个用于密码。
echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64
(可选)你可以为日志和指标仪表板创建 SSL/TLS 证书。 按照在部署 Kubernetes 原生工具期间指定 SSL/TLS 证书中的说明操作。
编辑数据控制器配置
根据需要编辑数据控制器配置:
必需
location
:将其更改为存储有关数据控制器的元数据的 Azure 位置。 请参阅可用区域列表。logsui-certificate-secret
:在 Kubernetes 群集上为日志 UI 证书创建的机密的名称。metricsui-certificate-secret
:在 Kubernetes 群集上为指标 UI 证书创建的机密的名称。
建议:查看并在可能的情况下更改默认值
查看这些值,并更新部署:
storage..className
:用于数据控制器数据和日志文件的存储类。 如果不确定 Kubernetes 群集中可用的存储类,可以运行以下命令:kubectl get storageclass
。 默认值为 default,它假定存在一个被命名为 default 的存储类,而不是存在一个默认的存储类。 注意:需要将两个 className 设置设为所需的存储类 - 一个用于数据,一个用于日志。serviceType
:如果使用的不是 LoadBalancer,请将服务类型更改为 NodePort。Security:对于 Azure Red Hat OpenShift 或 Red Hat OpenShift 容器平台,将安全性设置替换为数据控制器 yaml 文件中的以下值。
security: allowDumps: false allowNodeMetricsCollection: false allowPodMetricsCollection: false
可选
以下设置是可选的。
name
:数据控制器的默认名称为 arc,但可以根据需要对其进行更改。displayName
:将此值设置为与文件顶部的 name 特性相同的值。registry
:Microsoft 容器注册表是默认值。 如果要从 Microsoft Container Registry 拉取映像并将其推送到专用容器注册表,请在此处输入注册表的 IP 地址或 DNS 名称。dockerRegistry
:必要时用于从专用容器注册表中拉取映像的机密。repository
:Microsoft 容器注册表中的默认存储库是 arcdata。 如果使用的是专用容器注册表,请输入文件夹/存储库的路径(其中包含已启用 Azure Arc 的数据服务容器映像)。imageTag
:模板中默认使用当前最新版本标记,但如果想使用较旧的版本,可对其进行更改。logsui-certificate-secret
:在 Kubernetes 群集上为日志 UI 证书创建的机密的名称。metricsui-certificate-secret
:在 Kubernetes 群集上为指标 UI 证书创建的机密的名称。
下面的示例显示了一个完整的数据控制器 yaml 文件。
apiVersion: v1
data:
password: <your base64 encoded password>
username: <your base64 encoded username>
kind: Secret
metadata:
name: metricsui-admin-secret
type: Opaque
---
apiVersion: v1
data:
password: <your base64 encoded password>
username: <your base64 encoded username>
kind: Secret
metadata:
name: logsui-admin-secret
type: Opaque
---
apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
name: arc-dc
spec:
credentials:
dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
serviceAccount: sa-arc-controller
docker:
imagePullPolicy: Always
imageTag: v1.34.0_2024-10-08
registry: mcr.microsoft.com
repository: arcdata
infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
security:
allowDumps: true # Set this to false if deploying on OpenShift
allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
services:
- name: controller
port: 30080
serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
settings:
ElasticSearch:
vm.max_map_count: "-1"
azure:
connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
location: eastus # Choose a different Azure location if you want
resourceGroup: <your resource group>
subscription: <your subscription GUID>
controller:
displayName: arc-dc
enableBilling: true
logs.rotation.days: "7"
logs.rotation.size: "5000"
storage:
data:
accessMode: ReadWriteOnce
className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
size: 15Gi
logs:
accessMode: ReadWriteOnce
className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
size: 10Gi
将编辑后的文件保存在本地计算机上,并运行以下命令以创建数据控制器:
kubectl create --namespace arc -f <path to your data controller file>
#Example
kubectl create --namespace arc -f data-controller.yaml
监视创建状态
创建控制器需要几分钟才能完成。 可使用以下命令在另一个终端窗口中监视进度:
kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc
还可运行如下命令来检查任何特定 Pod 的创建状态或日志。 这对于排查问题特别有用。
kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc
#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc
相关内容
可使用其他几个选项来创建 Azure Arc 数据控制器:
想尝试一下吗? 在 AKS、Amazon EKS、GKE 上或在 Azure VM 中使用 Azure Arc Jumpstart 可快速入门。