菜单
开源

发现.kubelet

discovery.kubelet 从指定的 Kubelet 上发现运行的 Kubernetes pods,并将它们暴露为抓取目标。

用法

alloy
discovery.kubelet "LABEL" {
}

要求

  • Kubelet 必须可从 alloy pod 网络访问。
  • 按照 Kubelet 授权 文档配置对 Kubelet API 的身份验证。

参数

支持以下参数

名称类型描述默认值必需
url字符串Kubelet 服务器 URL。“https://127.0.0.1:10250”
refresh_interval持续时间抓取目标轮询 Kubelet 的频率5s
namespaces列表(字符串)从中提取目标 pods 的命名空间列表
bearer_token_file字符串包含用于认证的 bearer token 的文件。
bearer_token秘密用于认证的 bearer token。
enable_http2布尔值请求是否支持 HTTP2。true
follow_redirects布尔值是否应跟随服务器返回的重定向。true
proxy_url字符串通过它发送请求的 HTTP 代理。
no_proxy字符串逗号分隔的 IP 地址、CIDR 表记和域名列表,不包括代理。
proxy_from_environment布尔值使用由环境变量指示的代理 URL。false
proxy_connect_header映射(列表(秘密))在连接请求期间发送到代理的头部。

namespaces 列表限制了要发现资源的命名空间。如果省略,则搜索所有命名空间。

discovery.kubeleturl 后附加 /pods 路径来请求可用的 pods。您可以在 url 中有额外的路径。例如,如果 urlhttps://kubernetes.default.svc.cluster.local:443/api/v1/nodes/cluster-node-1/proxy,则 discovery.kubelethttps://kubernetes.default.svc.cluster.local:443/api/v1/nodes/cluster-node-1/proxy/pods 发送请求。

以下项中最多只能提供一个

no_proxy 可以包含 IP、CIDR 表记和域名。IP 和域名可以包含端口号。如果配置了 no_proxy,则必须配置 proxy_url

proxy_from_environment 使用环境变量 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY(或其小写形式)。除非被 NO_PROXY 排除,否则请求将使用与其方案匹配的环境变量中的代理。

proxy_connect_header 仅在配置了 proxy_urlproxy_from_environment 时应进行配置。

以下块在 discovery.kubelet 定义内部受支持

层次结构描述必需
基本认证基本认证为端点认证配置基本认证。
授权授权为端点配置通用授权。
OAuth2OAuth2为端点认证配置 OAuth2。
oauth2 > tls_configtls_config配置连接到端点的 TLS 设置。
tls_configtls_config配置连接到端点的 TLS 设置。

> 符号表示嵌套的更深层级。例如,oauth2 > tls_config 指的是在 oauth2 块内部定义的 tls_config 块。

基本认证块

名称类型描述默认值必需
密码文件字符串包含基本认证密码的文件。
密码秘密基本认证密码。
用户名字符串基本认证用户名。

passwordpassword_file 是互相排斥的,在 basic_auth 块内只能提供其中一个。

授权块

名称类型描述默认值必需
凭证文件字符串包含密钥值的文件。
凭证秘密密钥值。
类型字符串授权类型,例如,“Bearer”。

credentialcredentials_file 是互相排斥的,且在 authorization 块内只能提供一个。

OAuth2 块

名称类型描述默认值必需
客户端 ID字符串OAuth2 客户端 ID。
客户端密钥文件字符串包含 OAuth2 客户端密钥的文件。
客户端密钥秘密OAuth2 客户端密钥。
端点参数map(string)追加到令牌 URL 的可选参数。
proxy_url字符串通过它发送请求的 HTTP 代理。
no_proxy字符串逗号分隔的 IP 地址、CIDR 表记和域名列表,不包括代理。
proxy_from_environment布尔值使用由环境变量指示的代理 URL。false
proxy_connect_header映射(列表(秘密))在连接请求期间发送到代理的头部。
作用域列表(字符串)用于认证的作用域列表。
令牌 URL字符串获取令牌的 URL。

client_secretclient_secret_file 是互相排斥的,且在 oauth2 块内只能提供一个。

oauth2 块还可以包含一个单独的 tls_config 子块。

no_proxy 可以包含 IP、CIDR 表记和域名。IP 和域名可以包含端口号。如果配置了 no_proxy,则必须配置 proxy_url

proxy_from_environment 使用环境变量 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY(或其小写形式)。除非被 NO_PROXY 排除,否则请求将使用与其方案匹配的环境变量中的代理。

proxy_connect_header 仅在配置了 proxy_urlproxy_from_environment 时应进行配置。

tls_config 块

名称类型描述默认值必需
ca_pem字符串用于验证服务器的 CA PEM 编码文本。
ca_file字符串用于验证服务器的 CA 证书。
cert_pem字符串用于客户端认证的证书 PEM 编码文本。
cert_file字符串用于客户端认证的证书文件。
insecure_skip_verify布尔值禁用对服务器证书的验证。
密钥文件字符串用于客户端认证的密钥文件。
密钥_pem秘密用于客户端认证的密钥 PEM 编码文本。
min_version字符串最小可接受的 TLS 版本。
server_name字符串ServerName 扩展,用于指示服务器名称。

以下参数对是互相排斥的,不能同时设置

  • ca_pemca_file
  • cert_pemcert_file
  • key_pemkey_file

在配置客户端认证时,必须提供客户端证书(使用 cert_pemcert_file)和客户端密钥(使用 key_pemkey_file)。

如果没有提供 min_version,最小可接受的 TLS 版本是 Go 默认最小版本,TLS 1.2。

  • 如果提供了 min_version,它必须设置为以下字符串之一
  • "TLS10"(TLS 1.0)
  • "TLS11"(TLS 1.1)
  • "TLS12"(TLS 1.2)

"TLS13"(TLS 1.3)

导出字段

名称类型描述
以下字段是被导出的,可以由其他组件引用目标list(map(string))

从 Kubelet API 发现的目标集。

  • __address__:从Pod IP和容器端口推导出的目标地址。
  • __meta_kubernetes_namespace:Pod对象的命名空间。
  • __meta_kubernetes_pod_name:Pod对象的名称。
  • __meta_kubernetes_pod_ip:Pod对象的Pod IP。
  • __meta_kubernetes_pod_label_<labelname>:Pod对象的每个标签。
  • __meta_kubernetes_pod_labelpresent_<labelname>:对于Pod对象的每个标签,值为true
  • __meta_kubernetes_pod_annotation_<annotationname>:Pod对象的每个注解。
  • __meta_kubernetes_pod_annotationpresent_<annotationname>:对于Pod对象的每个注解,值为true
  • __meta_kubernetes_pod_container_init:如果容器是InitContainer,则值为true
  • __meta_kubernetes_pod_container_name:目标地址指向的容器的名称。
  • __meta_kubernetes_pod_container_id:目标地址指向的容器的ID。ID的格式为<type>://<container_id>
  • __meta_kubernetes_pod_container_image:容器正在使用的镜像。
  • __meta_kubernetes_pod_container_port_name:容器端口的名称。
  • __meta_kubernetes_pod_container_port_number:容器端口号。
  • __meta_kubernetes_pod_container_port_protocol:容器端口的协议。
  • __meta_kubernetes_pod_ready:Pod的就绪状态设置为truefalse
  • __meta_kubernetes_pod_phase:在生命周期中设置为PendingRunningSucceededFailedUnknown
  • __meta_kubernetes_pod_node_name:Pod被调度到的节点的名称。
  • __meta_kubernetes_pod_host_ip:Pod对象的当前主机IP。
  • __meta_kubernetes_pod_uid:Pod对象的UID。
  • __meta_kubernetes_pod_controller_kind:Pod控制器的对象类型。
  • __meta_kubernetes_pod_controller_name:Pod控制器的名称。

注意

此组件使用的Kubelet API是一个内部API,因此从API返回的数据在不同版本的Kubelet之间不能保证。

组件健康

当提供无效配置时,discovery.kubelet报告为不健康。在这些情况下,导出的字段保留其最后一个健康值。

调试信息

discovery.kubelet不公开任何特定于组件的调试信息。

调试指标

discovery.kubelet不公开任何特定于组件的调试指标。

示例

Bearer令牌文件认证

此示例使用Bearer令牌文件对Kubelet API进行认证

alloy
discovery.kubelet "k8s_pods" {
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
}

prometheus.scrape "demo" {
  targets    = discovery.kubelet.k8s_pods.targets
  forward_to = [prometheus.remote_write.demo.receiver]
}

prometheus.remote_write "demo" {
  endpoint {
    url = PROMETHEUS_REMOTE_WRITE_URL

    basic_auth {
      username = USERNAME
      password = PASSWORD
    }
  }
}

替换以下内容

  • PROMETHEUS_REMOTE_WRITE_URL:将指标发送到Prometheus remote_write兼容服务器的URL。
  • USERNAME:用于远程_write API认证的用户名。
  • PASSWORD:用于远程_write API认证的密码。

限制搜索的命名空间

此示例使用namespaces参数限制发现Pod的命名空间

alloy
discovery.kubelet "k8s_pods" {
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  namespaces = ["default", "kube-system"]
}

prometheus.scrape "demo" {
  targets    = discovery.kubelet.k8s_pods.targets
  forward_to = [prometheus.remote_write.demo.receiver]
}

prometheus.remote_write "demo" {
  endpoint {
    url = PROMETHEUS_REMOTE_WRITE_URL

    basic_auth {
      username = USERNAME
      password = PASSWORD
    }
  }
}

替换以下内容

  • PROMETHEUS_REMOTE_WRITE_URL:将指标发送到Prometheus remote_write兼容服务器的URL。
  • USERNAME:用于远程_write API认证的用户名。
  • PASSWORD:用于远程_write API认证的密码。

兼容组件

discovery.kubelet具有可以被以下组件消费的导出数据

注意

连接某些组件可能不合理或组件可能需要进一步配置才能使连接正确工作。有关更多详细信息,请参阅链接的文档。