菜单
通用可用性 (GA)

discovery.kubelet

discovery.kubelet 发现指定 Kubelet 上运行的 Kubernetes Pod,并将它们作为抓取目标公开。

用法

alloy
discovery.kubelet "LABEL" {
}

要求

  • Kubelet 必须可从 alloy Pod 网络访问。
  • 请遵循 Kubelet 授权 文档来配置 Kubelet API 的身份验证。

参数

您可以将以下参数与 discovery.kubelet 一起使用

名称类型描述默认值必需
urlstringKubelet 服务器的 URL。"https://127.0.0.1:10250"
refresh_intervalduration轮询 Kubelet 以获取抓取目标的频率5 秒
namespaceslist(string)从中提取目标 Pod 的命名空间列表
bearer_token_filestring包含用于身份验证的 Bearer 令牌的文件。
bearer_tokensecret用于身份验证的 Bearer 令牌。
enable_http2bool是否支持请求的 HTTP2。true
follow_redirectsbool是否应跟随服务器返回的重定向。true
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring以逗号分隔的 IP 地址、CIDR 表示法和域名列表,以排除代理。
proxy_from_environmentbool使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的标头。

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

discovery.kubelet/pods 路径附加到 url 以请求可用的 Pod。您可以在 url 中添加其他路径。例如,如果 urlhttps://kubernetes.default.svc.cluster.local:443/api/v1/nodes/cluster-node-1/proxy,则 discovery.kubelet 会在 https://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_from_environment,则不得配置 proxy_urlno_proxy

只有在配置了 proxy_urlproxy_from_environment 的情况下,才应配置 proxy_connect_header

您可以将以下块与 discovery.kubelet 一起使用

描述必需
authorization配置到端点的通用授权。
basic_auth配置 basic_auth 以向端点进行身份验证。
oauth2配置 OAuth 2.0 以向端点进行身份验证。
oauth2 > tls_config配置用于连接到端点的 TLS 设置。
tls_config配置用于连接到端点的 TLS 设置。

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

authorization

authorization 块配置到端点的通用授权。

名称类型描述默认值必需
credentials_filestring包含密钥值的文件。
credentialssecret密钥值。
typestring授权类型,例如 “Bearer”。

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

basic_auth

basic_auth 块配置到端点的基本身份验证。

名称类型描述默认值必需
password_filestring包含基本身份验证密码的文件。
passwordsecret基本身份验证密码。
usernamestring基本身份验证用户名。

passwordpassword_file 是互斥的,并且在 basic_auth 块内只能提供一个。

oauth2

oauth 块配置到端点的 OAuth 2.0 身份验证。

名称类型描述默认值必需
client_idstringOAuth2 客户端 ID。
client_secret_filestring包含 OAuth2 客户端密钥的文件。
client_secretsecretOAuth2 客户端密钥。
endpoint_paramsmap(string)要附加到令牌 URL 的可选参数。
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring以逗号分隔的 IP 地址、CIDR 表示法和域名列表,以排除代理。
proxy_from_environmentbool使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的标头。
scopeslist(string)要进行身份验证的作用域列表。
token_urlstring从中获取令牌的 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_from_environment,则不得配置 proxy_urlno_proxy

只有在配置了 proxy_urlproxy_from_environment 的情况下,才应配置 proxy_connect_header

tls_config

tls_config 块配置用于连接到端点的 TLS 设置。

名称类型描述默认值必需
ca_pemstring用于验证服务器的 CA PEM 编码文本。
ca_filestring用于验证服务器的 CA 证书。
cert_pemstring用于客户端身份验证的证书 PEM 编码文本。
cert_filestring用于客户端身份验证的证书文件。
insecure_skip_verifybool禁用服务器证书的验证。
key_filestring用于客户端身份验证的密钥文件。
key_pemsecret用于客户端身份验证的密钥 PEM 编码文本。
min_versionstring最低可接受的 TLS 版本。
server_namestringServerName 扩展,用于指示服务器的名称。

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

  • 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)

导出的字段

以下字段已导出,可供其他组件引用

名称类型描述
targetslist(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>:用于向 remote_write API 进行身份验证的用户名。
  • <PASSWORD>:用于向 remote_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>:用于向 remote_write API 进行身份验证的用户名。
  • <PASSWORD>:用于向 remote_write API 进行身份验证的密码。

Compatible components

discovery.kubelet 具有可供以下组件使用的导出

注意

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