在 Azure Kubernetes 服务 (AKS) 上创建 OpenID Connect 提供程序
OpenID Connect (OIDC) 扩展了 OAuth 2.0 授权协议,以用作 Microsoft Entra ID 颁发的其他身份验证协议。 在你的 Azure Kubernetes 服务 (AKS) 群集上,可以使用 OIDC 通过称为“ID 令牌”的安全令牌在启用了 OAuth 的应用程序之间启用单一登录 (SSO)。 借助 AKS 群集,可以启用 OpenID Connect (OIDC) 颁发者,从而允许 Microsoft Entra ID 或其他云提供商身份和访问管理平台发现 API 服务器的公用签名密钥。
AKS 自动定期轮换密钥。 如果不想等待,可以即刻手动轮换密钥。 OIDC 提供程序颁发的令牌的最长生命周期为一天。
警告
在现有群集上启用 OIDC 颁发者会将当前服务帐户令牌颁发者更改为新值,这会导致停机并重启 API 服务器。 如果在启用 OIDC 颁发者后,使用服务令牌的应用程序 Pod 仍处于失败状态,我们建议手动重启 Pod。
本文介绍了如何为群集创建、更新和管理 OIDC 颁发者。
先决条件
- Azure CLI 版本 2.8.0 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - AKS 支持 1.22 及更高版本的 OIDC 颁发者。
创建使用 OIDC 颁发者的 AKS 群集
可以使用带有 --enable-oidc-issuer
参数的 az aks create 命令创建 AKS 群集,以启用 OIDC 颁发者。 以下示例创建名为“myAKSCluster”的群集,其中一个节点位于 myResourceGroup 中:
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 1 \
--enable-oidc-issuer \
--generate-ssh-keys
使用 OIDC 颁发者更新 AKS 群集
可以使用带有 --enable-oidc-issuer
参数的 az aks update 命令更新 AKS 群集,以启用 OIDC 颁发者。 以下示例更新名为 myAKSCluster 的群集:
az aks update --resource-group myResourceGroup --name myAKSCluster --enable-oidc-issuer
显示 OIDC 颁发者 URL
若要获取 OIDC 颁发者 URL,请运行 az aks show 命令。 替换群集名称和资源组名称的默认值。
az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv
默认情况下,颁发者设置为使用基 URL https://{region}.oic.prod-aks.azure.com
,其中 {region}
的值与部署 AKS 群集的位置相匹配。
轮换 OIDC 密钥
若要轮换 OIDC 密钥,请运行 az aks oidc-issuer 命令。 替换群集名称和资源组名称的默认值。
az aks oidc-issuer rotate-signing-keys --name myAKSCluster --resource-group myResourceGroup
重要
轮换密钥后,旧密钥 (key1) 会在 24 小时后过期。 旧密钥 (key1) 和新密钥 (key2) 在轮换后的 24 小时内都有效。 如果要立即使旧密钥 (key1) 失效,则必须需要轮换 OIDC 密钥两次,然后使用投影的服务帐户令牌重启 Pod。 经过此过程,有效的是 key2 和 key3,而 key1 无效。
检查 OIDC 密钥
获取 OIDC 颁发者 URL
若要获取 OIDC 颁发者 URL,请运行 az aks show 命令。 替换群集名称和资源组名称的默认值。
az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv
输出应如下所示:
https://chinaeast2.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/
默认情况下,颁发者设置为使用基 URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}
,其中 {region}
的值与部署 AKS 群集的位置相匹配。 值 {uuid}
表示 OIDC 密钥,它是为每个群集随机生成的不可变的 guid。
获取发现文档
要获取发现文档,请复制 URL https://(OIDC issuer URL).well-known/openid-configuration
并在浏览器中将其打开。
输出应如下所示:
{
"issuer": "https://chinaeast2.oic.prod-aks.azure.com/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/00000000-0000-0000-0000-000000000000/",
"jwks_uri": "https://chinaeast2.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks",
"response_types_supported": [
"id_token"
],
"subject_types_supported": [
"public"
],
"id_token_signing_alg_values_supported": [
"RS256"
]
}
获取 JWK 集文档
要获取 JWK 集文档,请从发现文档复制 jwks_uri
,并将其粘贴到浏览器的地址栏中。
输出应如下所示:
{
"keys": [
{
"use": "sig",
"kty": "RSA",
"kid": "xxx",
"alg": "RS256",
"n": "xxxx",
"e": "AQAB"
},
{
"use": "sig",
"kty": "RSA",
"kid": "xxx",
"alg": "RS256",
"n": "xxxx",
"e": "AQAB"
}
]
}
在密钥轮换期间,发现文档中存在一个其他密钥。
后续步骤
- 请参阅配置在应用和外部标识提供者之间创建信任关系,了解联合标识凭据如何在群集上的应用程序与外部标识提供者之间创建信任关系。
- 查看Microsoft Entra 工作负载 ID(预览版)。 此身份验证方法与 Kubernetes 本机功能集成,以代表应用程序与任何外部标识提供者联合。
- 请参阅保护 Pod 网络流量,了解如何使用网络策略引擎并创建 Kubernetes 网络策略来控制 AKS 中 Pod 之间的流量流。