【问题标题】:Instance attributes are not available in metadata实例属性在元数据中不可用
【发布时间】:2019-09-04 19:51:50
【问题描述】:

我正在 GKE 上设置一个新的 K8S 集群 (1.13.7-gke.8),我希望 Google 云日志记录 API 能够正确报告命名空间和实例名称。

这是在启用了工作负载身份的新 GKE 集群中执行的。

我启动了工作负载容器来测试对元数据服务的访问,结果如下:

kubectl run -it --generator=run-pod/v1 --image google/cloud-sdk --namespace prod --rm workload-identity-test

并从容器中执行后:

curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/" -H "Metadata-Flavor: Google"

我希望输出 cluster-name、container-name 和 namespace-id,但实际输出的只是 cluster-name。

【问题讨论】:

    标签: kubernetes google-kubernetes-engine google-cloud-logging


    【解决方案1】:

    我得到了同样的结果,但是当我运行以下元数据时出现了:

    gcloud beta container node-pools create [NODEPOOL_NAME] \
      --cluster=[CLUSTER_NAME] \
      --workload-metadata-from-node=EXPOSED
    

    但是,您只能从元数据中获得cluster-name。例如,

    root@workload-identity-test:/# curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/" -H "Metadata-Flavor: Google"
    cluster-location
    cluster-name
    cluster-uid
    configure-sh
    created-by
    disable-legacy-endpoints
    enable-oslogin
    gci-ensure-gke-docker
    gci-update-strategy
    google-compute-enable-pcid
    instance-template
    kube-env
    kube-labels
    kubelet-config
    user-data
    

    如果您正在考虑获取命名空间和容器,我建议您直接与Kubernetes API 交谈,这基本上就是 GKE 上的“工作负载”选项卡所做的事情。我不太确定您要使用“Google 云日志记录 API”做什么,但也许您可以详细说明一个不同的问题。

    【讨论】:

    • 谷歌云日志 API 需要元数据属性 cluster-name、container-name 和 namespace-id 才能在控制台中正确构建日志,据我所知应该由 stackdriver 代理自动填充正在使用 Kubernetes API。我怀疑它与这个问题有关github.com/Stackdriver/kubernetes-configs/issues/25,但我找不到任何日志。
    • --workload-metadata-from-node=EXPOSED is deprecated 似乎是正确的参数 GCE_METADATA
    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 2019-03-31
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多