菜单
正式发布 (GA) 开源

discovery.kubelet

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

用法

alloy
discovery.kubelet "LABEL" {
}

要求

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

参数

您可以在 discovery.kubelet 中使用以下参数

名称类型描述默认值必需
urlstringKubelet 服务器的 URL。"https://:10250"
refresh_intervaldurationKubelet 应该多久轮询一次以获取抓取目标5s
namespaceslist(string)从中提取目标 Pod 的命名空间列表
bearer_token_filestring包含用于认证的 bearer token 的文件。
bearer_tokensecret用于认证的 Bearer token。
enable_http2bool请求是否支持 HTTP2。true
follow_redirectsbool是否应遵循服务器返回的重定向。true
http_headersmap(list(secret))每个请求要发送的自定义 HTTP 头。map 键是头名称。
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring要从代理中排除的 IP 地址、CIDR 表示法和域名列表,用逗号分隔。
proxy_from_environmentbool使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的头。

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

discovery.kubelet 会在 url 后附加 /pods 路径来请求可用的 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_connect_header 只能在配置了 proxy_urlproxy_from_environment 时配置。

您可以在 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

The authorization block configures generic authorization to the endpoint.

名称类型描述默认值必需
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)要附加到 token URL 的可选参数。
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring要从代理中排除的 IP 地址、CIDR 表示法和域名列表,用逗号分隔。
proxy_from_environmentbool使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的头。
scopeslist(string)用于认证的 scope 列表。
token_urlstring用于获取 token 的 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_connect_header 只能在配置了 proxy_urlproxy_from_environment 时配置。

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,因此不能保证不同版本的 Kubelet 返回的响应中的数据一致。

组件健康状态

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

调试信息

discovery.kubelet 不会暴露任何组件特定的调试信息。

调试指标

discovery.kubelet 不会暴露任何组件特定的调试指标。

示例

Bearer token 文件认证

此示例使用 bearer token 文件对 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 进行认证的密码。

兼容组件

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

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确建立连接。请参阅链接的文档以获取更多详细信息。