如何从集群中运行的容器/实例访问Kubernetes worker节点标签?在工作节点上设置标签,因为针对此Azure AKS工作节点启动的此kubectl命令的yaml输出显示:
$ kubectl get nodes aks-agentpool-39829229-vmss000000 -o yaml
apiVersion: v1
kind: Node
metadata:
annotations:
node.alpha.kubernetes.io/ttl: "0"
volumes.kubernetes.io/controller-managed-attach-detach: "true"
creationTimestamp: "2021-10-15T16:09:20Z"
labels:
agentpool: agentpool
beta.kubernetes.io/arch: amd64
beta.kubernetes.io/instance-type: Standard_DS2_v2
beta.kubernetes.io/os: linux
failure-domain.beta.kubernetes.io/region: eastus
failure-domain.beta.kubernetes.io/zone: eastus-1
kubernetes.azure.com/agentpool: agentpool
kubernetes.azure.com/cluster: xxxx
kubernetes.azure.com/mode: system
kubernetes.azure.com/node-image-version: AKSUbuntu-1804gen2containerd-2021.10.02
kubernetes.azure.com/os-sku: Ubuntu
kubernetes.azure.com/role: agent
kubernetes.azure.com/storageprofile: managed
kubernetes.azure.com/storagetier: Premium_LRS
kubernetes.io/arch: amd64
kubernetes.io/hostname: aks-agentpool-39829229-vmss000000
kubernetes.io/os: linux
kubernetes.io/role: agent
node-role.kubernetes.io/agent: ""
node.kubernetes.io/instance-type: Standard_DS2_v2
storageprofile: managed
storagetier: Premium_LRS
topology.kubernetes.io/region: eastus
topology.kubernetes.io/zone: eastus-1
name: aks-agentpool-39829229-vmss000000
resourceVersion: "233717"
selfLink: /api/v1/nodes/aks-agentpool-39829229-vmss000000
uid: 0241eb22-4d1b-4d65-870f-fcc51dac1c70
注意:我拥有的pod/Container是以非root访问权限运行的,它没有特权用户。
有没有办法从worker节点本身访问这些标签?
发布于 2021-10-16 13:35:29
在AKS集群中,
kubectl创建ns get-labels
kubectl create sa get-labels -n get-labels
kubectl create clusterrole get-labels-clusterrole --=nodes --verb=get,list
kubectl create rolebinding get-labels-rolebinding -n get-labels --clusterrole get-labels--clusterrole --serviceaccount kubectl
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: get-labels命名空间: get-labels规范: serviceAccountName: get-labels containers:- image: centos:7名称: get-labels命令:- /bin/bash - -c - tail -f /dev/null EOF
kubectl exec -it get-labels -n get-labels -- bash
容器中的
jq
工具:yum安装epel-release -y && yum更新-y && yum安装jq -y
服务器地址https://kubernetes.default.svc# ServiceAccount令牌SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount的路径#读取此Pod的命名空间NAMESPACE=$(cat ${ ServiceAccount }/namespace) #读取SERVICEACCOUNT承载令牌TOKEN=$(cat ${SERVICEACCOUNT}/token) #引用内部证书颁发机构(CA) API
curl --cacert ${CACERT} --header“授权:持有者${TOKEN}”-X GET ${APISERVER}/api/v1/nodes | jq '.items[].metadata |{.metadata,labels}‘
否则,如果您希望标签对应于特定节点,则使用:
curl --cacert ${CACERT} --header“授权:持有者${TOKEN}”-X GET ${APISERVER}/api/v1/nodes/ | jq '.metadata.labels'
请将<nodename>
替换为目标节点的名称。
N.B.您可以选择将jq
工具的安装包含在从中构建容器映像的Dockerfile中,并将environment variables用于外壳变量。为了解释这种方法的工作原理,我们在本答案中没有使用这两种方法。
https://stackoverflow.com/questions/69598409
复制