本文介绍如何为Azure Kubernetes 服务 (AKS)群集创建和管理 OpenID Connect (OIDC) 颁发者。 OIDC 颁发者使 AKS 群集能够与标识提供者(如 Microsoft Entra ID)集成,以便安全地对群集中运行的应用程序进行身份验证并提供单一登录(SSO)功能。
关于 AKS 上的 OpenID Connect (OIDC)
OpenID Connect (OIDC) 扩展了 OAuth 2.0 授权协议,以用作 Microsoft Entra ID 颁发的其他身份验证协议。 可以使用 OIDC 在 Azure Kubernetes 服务(AKS)群集上使用名为 ID 令牌的安全令牌在已启用 OAuth 的应用程序之间启用单一登录(SSO)。 可以在 AKS 群集上启用 OIDC 颁发者,该群集允许Microsoft Entra ID(或其他云提供商的标识和访问管理平台)来发现 API 服务器的公钥签名密钥。
先决条件
平台要求:
- Azure CLI版本 2.42.0 或更高版本(
az --version如果需要检查版本、安装或升级Azure CLI)。 - Kubernetes 版本 1.22 或更高版本。
版本特定行为(AKS 标准):
- 默认情况下,在 Kubernetes 版本 1.34 或更高版本上为新创建的 AKS 群集启用 OIDC 颁发者(不需要
--enable-oidc-issuer标志)。 - 对于现有群集,默认情况下不会启用 OIDC,无论 Kubernetes 版本如何,都需要手动启用。
- 对于 Kubernetes 1.30.0 及更高版本,令牌自动扩展已禁用(
--service-account-extend-token-expiration=false)。 - 如果以前未配置 OIDC 颁发者,则需要对低于 1.34 的 Kubernetes 版本进行手动启用。
- Kubernetes 1.30 或更高版本的集群需要使用投射式服务账户令牌。
重要注意事项:
- 启用 OIDC 颁发者后,无法禁用。
- 在现有群集上启用 OIDC 颁发者需要 API 服务器重启(短暂停机)。
- 最大令牌生存期为 24 小时(一天)。
创建一个具有 OIDC 提供者的 AKS 集群
使用带参数的az aks create--enable-oidc-issuer命令创建 AKS 标准群集。
# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>
# Create the AKS Standard cluster with OIDC issuer enabled
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--enable-oidc-issuer \
--generate-ssh-keys
注释
在使用 Kubernetes 版本 1.34 或更高版本创建的 AKS 标准群集上,默认为新群集启用 OIDC 颁发者。
在现有 AKS 标准群集上启用 OIDC 颁发程序
在现有 AKS 标准群集上,使用带有 az aks update 参数的 --enable-oidc-issuer 命令启用 OIDC 颁发程序。
# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>
# Enable the OIDC issuer on the existing AKS Standard cluster
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-oidc-issuer
获取 OIDC 发行方的 URL
使用 az aks show 命令获取 OIDC 颁发者 URL。
# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>
# Get the OIDC issuer URL
az aks show \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--query "oidcIssuerProfile.issuerUrl" \
-o tsv
默认情况下,颁发者使用基 URL https://{region}.oic.prod-aks.azure.com,其中的值 {region} 与部署 AKS 群集的位置匹配。
轮换 OIDC 签名密钥
重要
轮换 OIDC 签名密钥时,请记住以下注意事项:
- 如果要在密钥轮换后立即使旧密钥失效,则必须轮换 OIDC 密钥两次,并使用投影的服务帐户令牌重启 Pod。
- 旧密钥和新密钥在轮换后仍有效 24 小时。
- 需要每隔 24 小时手动刷新令牌(除非使用Azure标识客户端库,否则会自动刷新)。
使用 az aks oidc-issuer 命令轮换 OIDC 密钥。
# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>
# Rotate the OIDC signing keys
az aks oidc-issuer rotate-signing-keys \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP
获取发现文档
在浏览器中打开您的OIDC 颁发者 URL,并在该 URL 后添加/.well-known/openid-configuration。
示例: https://eastus.oic.prod-aks.azure.com/.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 集合文档
在浏览器中,访问发现文档中的jwks_uri。
例如:https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks
输出应类似于以下示例输出:
{
"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 概述
- 保护 Pod 网络流量