discovery.kubelet
discovery.kubelet
发现指定 Kubelet 上运行的 Kubernetes Pod,并将它们作为抓取目标暴露出来。
用法
discovery.kubelet "LABEL" {
}
要求
- 必须可以从
alloy
Pod 网络访问 Kubelet。 - 遵循Kubelet 授权文档来配置 Kubelet API 的认证。
参数
您可以在 discovery.kubelet
中使用以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
url | string | Kubelet 服务器的 URL。 | "https://:10250" | 否 |
refresh_interval | duration | Kubelet 应该多久轮询一次以获取抓取目标 | 5s | 否 |
namespaces | list(string) | 从中提取目标 Pod 的命名空间列表 | 否 | |
bearer_token_file | string | 包含用于认证的 bearer token 的文件。 | 否 | |
bearer_token | secret | 用于认证的 Bearer token。 | 否 | |
enable_http2 | bool | 请求是否支持 HTTP2。 | true | 否 |
follow_redirects | bool | 是否应遵循服务器返回的重定向。 | true | 否 |
http_headers | map(list(secret)) | 每个请求要发送的自定义 HTTP 头。map 键是头名称。 | 否 | |
proxy_url | string | 用于发送请求的 HTTP 代理。 | 否 | |
no_proxy | string | 要从代理中排除的 IP 地址、CIDR 表示法和域名列表,用逗号分隔。 | 否 | |
proxy_from_environment | bool | 使用环境变量指示的代理 URL。 | false | 否 |
proxy_connect_header | map(list(secret)) | 指定在 CONNECT 请求期间发送到代理的头。 | 否 |
namespaces
列表限制了发现资源的命名空间。如果省略,将搜索所有命名空间。
discovery.kubelet
会在 url
后附加 /pods
路径来请求可用的 Pod。您可以在 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_from_environment
,则不能配置 proxy_url
和 no_proxy
。
proxy_connect_header
只能在配置了 proxy_url
或 proxy_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_file | string | 包含秘密值的文件。 | 否 | |
credentials | secret | 秘密值。 | 否 | |
type | string | 授权类型,例如“Bearer”。 | 否 |
credential
和 credentials_file
是互斥的,在 authorization
块内部只能提供其中一个。
basic_auth
basic_auth
块配置到端点的基本认证。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
password_file | string | 包含基本认证密码的文件。 | 否 | |
password | secret | 基本认证密码。 | 否 | |
username | string | 基本认证用户名。 | 否 |
password
和 password_file
是互斥的,在 basic_auth
块内部只能提供其中一个。
oauth2
oauth
块配置到端点的 OAuth 2.0 认证。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
client_id | string | OAuth2 客户端 ID。 | 否 | |
client_secret_file | string | 包含 OAuth2 客户端密钥的文件。 | 否 | |
client_secret | secret | OAuth2 客户端密钥。 | 否 | |
endpoint_params | map(string) | 要附加到 token URL 的可选参数。 | 否 | |
proxy_url | string | 用于发送请求的 HTTP 代理。 | 否 | |
no_proxy | string | 要从代理中排除的 IP 地址、CIDR 表示法和域名列表,用逗号分隔。 | 否 | |
proxy_from_environment | bool | 使用环境变量指示的代理 URL。 | false | 否 |
proxy_connect_header | map(list(secret)) | 指定在 CONNECT 请求期间发送到代理的头。 | 否 | |
scopes | list(string) | 用于认证的 scope 列表。 | 否 | |
token_url | string | 用于获取 token 的 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_from_environment
,则不能配置 proxy_url
和 no_proxy
。
proxy_connect_header
只能在配置了 proxy_url
或 proxy_from_environment
时配置。
tls_config
tls_config
块配置连接到端点的 TLS 设置。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
ca_pem | string | 用于验证服务器的 CA PEM 编码文本。 | 否 | |
ca_file | string | 用于验证服务器的 CA 证书文件。 | 否 | |
cert_pem | string | 用于客户端认证的证书 PEM 编码文本。 | 否 | |
cert_file | string | 用于客户端认证的证书文件。 | 否 | |
insecure_skip_verify | bool | 禁用服务器证书验证。 | 否 | |
key_file | string | 用于客户端认证的密钥文件。 | 否 | |
key_pem | secret | 用于客户端认证的密钥 PEM 编码文本。 | 否 | |
min_version | string | 可接受的最低 TLS 版本。 | 否 | |
server_name | string | 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)
导出字段
以下字段已导出,可供其他组件引用
名称 | 类型 | 描述 |
---|---|---|
targets | 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,因此不能保证不同版本的 Kubelet 返回的响应中的数据一致。
组件健康状态
当配置无效时,discovery.kubelet
会报告不健康。在这种情况下,导出字段会保留其最后一次健康时的值。
调试信息
discovery.kubelet
不会暴露任何组件特定的调试信息。
调试指标
discovery.kubelet
不会暴露任何组件特定的调试指标。
示例
Bearer token 文件认证
此示例使用 bearer token 文件对 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>
:用于对remote_write
API 进行认证的用户名。<PASSWORD>
:用于对remote_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>
:用于对remote_write
API 进行认证的用户名。<PASSWORD>
:用于对remote_write
API 进行认证的密码。
兼容组件
discovery.kubelet
具有可供以下组件使用的导出项
- 消费 目标 (Targets) 的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确建立连接。请参阅链接的文档以获取更多详细信息。