你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Kubernetes 服务 (AKS) 中使用服务连接器
Azure Kubernetes 服务 (AKS) 是服务连接器支持的计算服务之一。 本文旨在帮助你了解:
- 创建服务连接时,会在群集上进行哪些操作。
- 如何使用服务连接器创建的 Kubernetes 资源。
- 如何对 AKS 群集中的服务连接器进行故障排除并查看其日志。
先决条件
- 本指南假定你已了解服务连接器基本概念。
服务连接器在 AKS 群集上执行的操作
根据在创建服务连接时选择的不同目标服务和身份验证类型,服务连接器会在 AKS 群集上执行不同的操作。 下面列出了服务连接器可能执行的操作。
添加服务连接器 Kubernetes 扩展
第一次创建服务连接时,会将名为 sc-extension
的 kubernetes 扩展添加到群集。 随后,每当有服务连接请求传入服务连接器时,该扩展都将帮助在用户的群集中创建 kubernetes 资源。 你可以在 Azure 门户打开自己的 AKS 群集,然后在“扩展 + 应用程序”菜单中找到该扩展。
该扩展也是存储群集连接元数据的位置。 卸载该扩展会使群集中的所有连接都不可用。 扩展运算符托管在群集命名空间 sc-system
中。
创建 Kubernetes 资源
服务连接器会在创建服务连接时,在用户指定的命名空间中创建一些 Kubernetes 资源。 Kubernetes 资源将存储连接信息,用户的工作负载定义或应用程序代码需要使用这些信息才能与目标服务通信。 根据不同的身份验证类型,会创建不同的 Kubernetes 资源。 对于 Connection String
和 Service Principal
身份验证类型,将创建 Kubernetes 机密。 对于 Workload Identity
身份验证类型,除了 Kubernetes 机密之外,还会创建 Kubernetes 服务帐户。
你可以在 Azure 门户中打开自己的 Kubernetes 资源,然后在“服务连接器”菜单中找到由服务连接器为每个服务连接创建的 Kubernetes 资源。
删除服务连接不会删除关联的 Kubernetes 资源。 如有必要,请手动移除资源(例如使用 kubectl delete 命令)。
启用 azureKeyvaultSecretsProvider
加载项
如果目标服务是 Azure 密钥保管库,并且在创建服务连接时启用了机密存储 CSI 驱动程序,则服务连接器将为群集启用 azureKeyvaultSecretsProvider
加载项。
按照使用 CSI 驱动程序连接到 Azure 密钥保管库教程,使用机密存储 CSI 驱动程序设置与 Azure 密钥保管库的连接。
启用工作负载标识和 OpenID Connect (OIDC) 颁发者
如果在创建服务连接时的身份验证类型为 Workload Identity
,则服务连接器将为群集启用工作负载标识和 OIDC 颁发者。
当身份验证类型为 Workload Identity
时,需要具有用户分配的托管标识才能创建联合标识凭据。 请通过什么是工作负载标识一文了解详情,或按照教程来使用工作负载标识设置与 Azure 存储的连接。
使用服务连接器创建的 Kubernetes 资源
服务连接器根据目标服务类型和身份验证类型创建各种 Kubernetes 资源。 下文介绍如何在群集工作负载定义和应用程序代码中使用服务连接器创建的 Kubernetes 资源。
Kubernetes 机密
当身份验证类型设置为 Connection String
或 Service Principal
时,将创建 Kubernetes 机密。 群集工作负载定义可以直接引用该机密。 以下代码片段提供了一个示例。
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
spec:
template:
spec:
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
应用程序代码可以使用来自环境变量机密的连接字符串。 请查看下文的示例代码,详细了解环境变量名称以及如何在应用程序代码中使用它们对不同的目标服务进行身份验证。
kubernetes 服务帐户
当身份验证类型为 Workload Identity
时,会同时创建 Kubernetes 服务帐户和机密。 群集工作负载定义可以引用该服务帐户和机密,以通过工作负载标识进行身份验证。 以下代码片段提供了一个示例。
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
labels:
azure.workload.identity/use: "true"
spec:
template:
spec:
serviceAccountName: <ServiceAccountCreatedByServiceConnector>
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
请查看以下教程,了解如何使用工作负载标识连接到 Azure 存储。
故障排除和查看日志
如果在创建服务连接时出现错误,且重试后仍然无法解决错误,那么以下方法可以帮助收集详细信息以进行故障排除。
检查服务连接器 Kubernetes 扩展
服务连接器 Kubernetes 扩展是基于已启用 Azure Arc 的 Kubernetes 群集扩展构建的。 使用以下命令检查安装扩展时或更新过程中发生的错误。
安装
k8s-extension
Azure CLI 扩展。az extension add --name k8s-extension
检索服务连接器扩展的状态。 检查命令输出中的
statuses
属性以识别错误。az k8s-extension show \ --resource-group MyClusterResourceGroup \ --cluster-name MyCluster \ --cluster-type managedClusters \ --name sc-extension
查看 Kubernetes 群集日志
如果在扩展安装过程中发生错误,并且 statuses
属性中的错误消息未提供足够的信息,则可根据用以下步骤查看 Kubernetes 日志来进一步调查。
连接到 AKS 群集。
az aks get-credentials \ --resource-group MyClusterResourceGroup \ --name MyCluster
服务连接器扩展使用 Helm 图表安装在
sc-system
命名空间中。 使用以下命令检查命名空间和 Helm 版本。检查命名空间是否存在。
kubectl get ns
检查 helm 发布状态。
helm list -n sc-system
在扩展安装或更新期间,名为
sc-job
的 Kubernetes 作业会为服务连接创建 Kubernetes 资源。 作业执行失败通常会导致扩展失败。 请运行以下命令来检查作业状态。 如果sc-job
不存在于sc-system
命名空间中,则代表已成功执行。 此作业设计为在成功执行后自动删除。检查作业是否存在。
kubectl get job -n sc-system
获取作业状态。
kubectl describe job/sc-job -n sc-system
查看作业日志。
kubectl logs job/sc-job -n sc-system
常见错误和缓解措施
扩展创建错误
错误消息:
Unable to get a response from the agent in time
。
缓解:
请参阅扩展创建错误
Helm 错误
错误消息:
Timed out waiting for resource readiness
Unable to download the Helm chart from the repo URL
Helm chart rendering failed with given values
Resource already exists in your cluster
Operation is already in progress for Helm
缓解:
请参阅 Helm 错误
冲突
错误消息:
Operation returned an invalid status code: Conflict
。
原因:
当 Azure Kubernetes 服务 (AKS) 群集处于更新状态时,尝试创建服务连接通常会引发此错误。 服务连接更新与正在进行的更新相冲突。 如果未向 Microsoft.KubernetesConfiguration
资源提供程序注册订阅,也会发生此错误。
缓解:
确保你的群集处于“成功”状态,然后重试创建。
运行以下命令,确保订阅已注册到
Microsoft.KubernetesConfiguration
资源提供程序。az provider register -n Microsoft.KubernetesConfiguration
未经授权的资源访问
错误消息:
You do not have permission to perform ... If access was recently granted, please refresh your credentials
。
原因:
服务连接器需要有待连接 Azure 资源的操作权限,这样才能代表你执行连接操作。 此错误表示对某些 Azure 资源缺少所需的权限。
缓解:
检查错误消息所指 Azure 资源的权限。 获取所需的权限并重试创建。
缺少订阅注册
错误消息:
The subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration'
原因:
服务连接器要求在 Microsoft.KubernetesConfiguration
上注册订阅,它是 已启用 Azure Arc 的 Kubernetes 群集扩展的资源提供程序。
缓解:
运行以下命令以注册 Microsoft.KubernetesConfiguration
资源提供程序。 有关资源提供程序注册错误的详细信息,请参阅解决资源提供程序注册的错误。
az provider register -n Microsoft.KubernetesConfiguration
下一步
了解如何集成不同的目标服务并了解其配置设置和身份验证方法。