0
点赞
收藏
分享

微信扫一扫

在AKS中使用pod identity获取token - 实践

unadlib 2022-02-21 阅读 164

下边开始来实际跑个demo,看下具体在使用时pod identity能达到什么样的效果,这是pod identity官方给的一个sample,要做的工作主要分为几个步骤

  1. 部署pod identity
  2. 创建Azure user assigned identity
  3. 准备yaml文件,部署Azure identity和Azure identity binding
  4. 部署测试用的yaml


环境准备

需要准备的实验环境很简单,主要包括以下资源和工具

  1. 使用Azure CNI网络模型的AKS集群
  2. kubectl
  3. Azure CLI

实践环节

准备环境变量

$RESOURCE_GROUP='Apache'
$CLUSTER_NAME='SSLAKS'
$IDENTITY_RESOURCE_GROUP="$(az aks show -g $RESOURCE_GROUP -n $CLUSTER_NAME --query nodeResourceGroup -o tsv)"
$IDENTITY_NAME="demo"

在AKS中使用pod identity获取token - 实践_Cloud


部署pod identity component

pod identity的部署基本和其他产品差不多,完全通过yaml文件直接部署即可

kubectl apply -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
# For AKS clusters, deploy the MIC and AKS add-on exception by running -
kubectl apply -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/mic-exception.yaml

在AKS中使用pod identity获取token - 实践_K8S_02

部署完成之后,即可看到系统中的crd资源

kubectl get crd -A

在AKS中使用pod identity获取token - 实践_Azure_03

也出现了新的API Resource

kubectl api-resources|?{$_ -like '*identity*'}

在AKS中使用pod identity获取token - 实践_Pod_04

还会部署mic和nmi两个核心组件的pod

在AKS中使用pod identity获取token - 实践_K8S_05


创建user assigned identity

pod identity本身并不会知道应该给谁获取什么样的权限,而是需要用户告诉pod identity希望获取什么样的权限,而要做到这点,就需要指定在pod identity中要是用的是service principal,还是managed identity,然后把对应的信息写在Azure identity的yaml文件里

因为是个sample的环境,所以我们直接新创建一个user assigned identity来给pod identity用

az identity create -g $IDENTITY_RESOURCE_GROUP -n $IDENTITY_NAME

在AKS中使用pod identity获取token - 实践_Azure_06

其实就是个user assigned managed identity

在AKS中使用pod identity获取token - 实践_Pod_07


获取client id和resource id

$IDENTITY_CLIENT_ID="$(az identity show -g $IDENTITY_RESOURCE_GROUP -n $IDENTITY_NAME --query clientId -o tsv)"
$IDENTITY_RESOURCE_ID="$(az identity show -g $IDENTITY_RESOURCE_GROUP -n $IDENTITY_NAME --query id -o tsv)"

准备工作做好之后,即可开始准备pod identity测试用的部署文件

创建Azure identity

apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzureIdentity
metadata:
name: ${IDENTITY_NAME}
spec:
type: 0
resourceID: ${IDENTITY_RESOURCE_ID}
clientID: ${IDENTITY_CLIENT_ID}

Type 可以有多种取值范围,分别代表不同含义,部署用的就是0,也就是user assigned identity:

  • type: 0 user-assigned MSI
  • type: 1 Service Principal with client secret
  • type: 2 Service Principal with certificate
kubectl apply -f "D:\UserData\Desktop\Pod Identity\AzureIdentitySample.yml"
kubectl get azureidentity

在AKS中使用pod identity获取token - 实践_Pod_08


创建AzureIdentityBinding

准备yaml文件,把变量替换为实际环境的值

apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzureIdentityBinding
metadata:
name: ${IDENTITY_NAME}-binding
spec:
azureIdentity: ${IDENTITY_NAME}
selector: ${IDENTITY_NAME}
kubectl apply -f "D:\UserData\Desktop\Pod Identity\AzureIdentityBindingSample.yml"
kubectl get azureidentitybinding

在AKS中使用pod identity获取token - 实践_K8S_09


部署测试用pod

准备yaml文件,把变量替换为实际环境的值

哪些pod可以使用identitybinding是靠pod中aadpodidbinding这个字段去区分的,这个字段的值就是之前identitybinding yaml文件中selector字段对应的值,两者要匹配起来

apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: $IDENTITY_NAME
spec:
containers:
- name: demo
image: mcr.microsoft.com/oss/azure/aad-pod-identity/demo:v1.8.4
args:
- --subscription-id=${SUBSCRIPTION_ID}
- --resource-group=${IDENTITY_RESOURCE_GROUP}
- --identity-client-id=${IDENTITY_CLIENT_ID}
nodeSelector:
kubernetes.io/os: linux

开始部署

kubectl apply -f "D:\UserData\Desktop\Pod Identity\AzureIdentitySamplePod.yml"
kubectl get po|?{$_ -like 'pod*'}

在AKS中使用pod identity获取token - 实践_Pod_10

查看部署pod的log,可以找到获取到token这种字眼

kubectl logs pod-identity-demo

在AKS中使用pod identity获取token - 实践_Cloud_11

举报

相关推荐

0 条评论