Kubernetes Secrets 提供程序

编辑

提供对 Kubernetes Secrets API 的访问。

使用格式 ${kubernetes_secrets.<default>.<somesecret>.<value>} 来引用 Kubernetes Secrets 变量,其中 default 是 Secret 的命名空间,somesecret 是 Secret 的名称,value 是要访问的 Secret 字段。

为了获取 Secrets 的值,会向 API Server 发出请求。为了避免对同一 Secret 发出多个请求,并且不使 API Server 过载,默认情况下会使用缓存来存储这些值。可以使用变量 cache_* 设置此配置(请参见下文)。

该提供程序需要一个 kubeconfig 文件来建立与 Kubernetes API 的连接。如果在 InCluster 环境中运行(Elastic Agent 作为 Pod 运行),它可以自动访问 API。

providers.kubernetes_secrets:
  #kube_config: /Users/elastic-agent/.kube/config
  #kube_client_options:
  #  qps: 5
  #  burst: 10
  #cache_disable: false
  #cache_refresh_interval: 60s
  #cache_ttl: 1h
  #cache_request_timeout: 5s
kube_config
(可选) 使用给定的配置文件作为 Kubernetes 客户端的配置。如果未设置 kube_config,则会检查 KUBECONFIG 环境变量,如果不存在,则回退到 InCluster。
kube_client_options
(可选) 为 Kubernetes 客户端配置其他选项。支持的选项为 qpsburst。如果未设置,则使用 Kubernetes 客户端的默认 QPS 和突发设置。
cache_disable
(可选) 禁用 Secrets 的缓存。当禁用时,即设置为 true 时,代码会向 API Server 发出请求以获取值。要继续使用缓存,请将变量设置为 false。默认值为 false
cache_refresh_interval
(可选) 定义更新缓存中所有 Secret 值的周期。默认为 60s
cache_ttl
(可选) 定义如果未请求,Secret 在缓存中应保留多长时间。默认为 1h
cache_request_timeout
(可选) 定义 API Server 为给定 Secret 提供值所需的时间。默认为 5s

如果在 Kubernetes 上运行 Agent,则需要在 ClusterRole 中设置正确的规则,以便为 Elastic Agent Pod 提供对 Secrets API 的访问权限

- apiGroups: [""]
  resources:
    - secrets
  verbs: ["get"]

上述规则将授予 Elastic Agent Pod 访问 Kubernetes Secrets API 的权限。任何具有 Elastic Agent Pod 访问权限的人(例如 kubectl exec)也将具有对 Kubernetes Secrets API 的访问权限。这允许访问特定 Secret,而不管它属于哪个命名空间。应仔细考虑此选项。