发现.kubelet
discovery.kubelet
从指定的 Kubelet 上发现运行的 Kubernetes pods,并将它们暴露为抓取目标。
用法
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.kubelet
在 url
后附加 /pods
路径来请求可用的 pods。您可以在 url
中有额外的路径。例如,如果 url
是 https://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_connect_header
仅在配置了 proxy_url
或 proxy_from_environment
时应进行配置。
块
以下块在 discovery.kubelet
定义内部受支持
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
基本认证 | 基本认证 | 为端点认证配置基本认证。 | 否 |
授权 | 授权 | 为端点配置通用授权。 | 否 |
OAuth2 | OAuth2 | 为端点认证配置 OAuth2。 | 否 |
oauth2 > tls_config | tls_config | 配置连接到端点的 TLS 设置。 | 否 |
tls_config | tls_config | 配置连接到端点的 TLS 设置。 | 否 |
>
符号表示嵌套的更深层级。例如,oauth2 > tls_config
指的是在 oauth2
块内部定义的 tls_config
块。
基本认证块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
密码文件 | 字符串 | 包含基本认证密码的文件。 | 否 | |
密码 | 秘密 | 基本认证密码。 | 否 | |
用户名 | 字符串 | 基本认证用户名。 | 否 |
password
和 password_file
是互相排斥的,在 basic_auth
块内只能提供其中一个。
授权块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
凭证文件 | 字符串 | 包含密钥值的文件。 | 否 | |
凭证 | 秘密 | 密钥值。 | 否 | |
类型 | 字符串 | 授权类型,例如,“Bearer”。 | 否 |
credential
和 credentials_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_secret
和 client_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_url
或 proxy_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_pem
和ca_file
cert_pem
和cert_file
key_pem
和key_file
在配置客户端认证时,必须提供客户端证书(使用 cert_pem
或 cert_file
)和客户端密钥(使用 key_pem
或 key_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的就绪状态设置为true
或false
。__meta_kubernetes_pod_phase
:在生命周期中设置为Pending
、Running
、Succeeded
、Failed
或Unknown
。__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进行认证
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的命名空间
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
具有可以被以下组件消费的导出数据
- 消耗目标的组件
注意
连接某些组件可能不合理或组件可能需要进一步配置才能使连接正确工作。有关更多详细信息,请参阅链接的文档。