Kubernetes 密钥提供程序

编辑

提供对 Kubernetes 密钥 API 的访问。

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

为了获取密钥的值,会向 API 服务器发出请求。为了避免对同一密钥的多次请求,并且不使 API 服务器不堪重负,默认情况下使用缓存来存储这些值。可以通过使用变量 cache_*(见下文)来设置此配置。

提供程序需要一个 kubeconfig 文件来建立与 Kubernetes API 的连接。如果它在集群内环境(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 环境变量,如果不存在,则回退到集群内。
kube_client_options
(可选)配置 Kubernetes 客户端的其他选项。支持的选项是 qpsburst。如果未设置,则使用 Kubernetes 客户端的默认 QPS 和 burst 设置。
cache_disable
(可选)禁用密钥的缓存。禁用时,即设置为 true,代码会向 API 服务器发出请求以获取值。要继续使用缓存,请将变量设置为 false。默认为 false
cache_refresh_interval
(可选)定义更新缓存中保存的所有密钥值的周期。默认为 60s
cache_ttl
(可选)定义如果密钥未被请求,应在缓存中保留多长时间。默认为 1h
cache_request_timeout
(可选)定义 API 服务器可以花费多长时间来提供给定密钥的值。默认为 5s

如果在 Kubernetes 上运行 agent,则需要在 ClusterRole 中提供适当的规则,以提供对 Secrets API 中 Elastic Agent pod 的访问权限

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

上面的规则将允许 Elastic Agent pod 访问 Kubernetes 密钥 API。任何有权访问 Elastic Agent pod 的人(例如 kubectl exec)也将有权访问 Kubernetes 密钥 API。这允许访问特定的密钥,而不管它属于哪个命名空间。应仔细考虑此选项。