首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从容器/pod访问Kubernetes worker节点标签

从容器/pod访问Kubernetes worker节点标签
EN

Stack Overflow用户
提问于 2021-10-16 18:19:22
回答 1查看 326关注 0票数 0

如何从集群中运行的容器/实例访问Kubernetes worker节点标签?在工作节点上设置标签,因为针对此Azure AKS工作节点启动的此kubectl命令的yaml输出显示:

代码语言:javascript
复制
$ 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节点本身访问这些标签?

EN

回答 1

Stack Overflow用户

发布于 2021-10-16 21:35:29

在AKS集群中,

  1. 创建如下名称空间:

kubectl创建ns get-labels

  1. 在命名空间中创建服务帐户,如下所示:

kubectl create sa get-labels -n get-labels

  1. 创建群集角色,如下所示:

kubectl create clusterrole get-labels-clusterrole --=nodes --verb=get,list

  1. 创建角色绑定,如下所示:

kubectl create rolebinding get-labels-rolebinding -n get-labels --clusterrole get-labels--clusterrole --serviceaccount kubectl

  1. 在您创建的名称空间中运行pod:

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

  1. 在运行的容器中执行一个外壳程序,如下所示:

kubectl exec -it get-labels -n get-labels -- bash

容器中的

  1. Install jq工具:

yum安装epel-release -y && yum更新-y && yum安装jq -y

  1. 设置外壳变量: CACERT=${SERVICEACCOUNT}/ca.crt

服务器地址https://kubernetes.default.svc# ServiceAccount令牌SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount的路径#读取此Pod的命名空间NAMESPACE=$(cat ${ ServiceAccount }/namespace) #读取SERVICEACCOUNT承载令牌TOKEN=$(cat ${SERVICEACCOUNT}/token) #引用内部证书颁发机构(CA) API

  1. 如果要获取所有节点及其对应标签的列表,请使用以下命令:

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用于外壳变量。为了解释这种方法的工作原理,我们在本答案中没有使用这两种方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69598409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档