如何在配置映射中秘密添加 API 密钥?
How to add API key confidentially inside config map?
我是 K8s 新手。我正在尝试将 Datadog 代理部署到我的集群以收集日志,这是通过 ConfigMap 实现的。
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-cm
data:
fluent-bit.conf: |
[SERVICE]
Parsers_File parsers.conf
[INPUT]
name tail
path /tmp/app.log
parser nginx
[OUTPUT]
Name datadog
Match *
Host http-intake.logs.datadoghq.com
TLS off
apikey <API key to be used confidentially>
dd_service abcd
dd_source abcd
dd_tags env:dev
parsers.conf: |
[PARSER]
Name nginx
Format regex
Regex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*))" "(?<agent>[^\"]*)"(?: "(?<target>[^\"]*))"$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
我不想将 API 键添加为纯文本。我可以使用秘密吗?请提出实现这一目标的方法。
P.S: 我需要使用config map来添加Datadog agent,因此无法替换config map。
理论上您可以Secret as a environment variable,然后使用 ConfigMap 将其传递给 Pod。
apiVersion: v1
kind: Secret
metadata:
name: fluentbit-secret-test
type: Opaque
data:
apikey: <base64 encoded api key>
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-cm
data:
fluent-bit.conf: |
...
apikey $FLUENTBIT_API_KEY
...
apiVersion: v1
kind: Pod
metadata:
name: secret-env-test
spec:
containers:
- name: test
image: nginx
env:
- name: FLUENTBIT_API_KEY
valueFrom:
secretKeyRef:
name: fluentbit-secret-test
key: apikey
但是,您必须记住,Kubernetes Secrets 默认情况下不加密,仅进行 base64 编码。具有 API 访问权限的任何人都可以检索或修改 Secret,任何具有 etcd
访问权限的人也可以
我是 K8s 新手。我正在尝试将 Datadog 代理部署到我的集群以收集日志,这是通过 ConfigMap 实现的。
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-cm
data:
fluent-bit.conf: |
[SERVICE]
Parsers_File parsers.conf
[INPUT]
name tail
path /tmp/app.log
parser nginx
[OUTPUT]
Name datadog
Match *
Host http-intake.logs.datadoghq.com
TLS off
apikey <API key to be used confidentially>
dd_service abcd
dd_source abcd
dd_tags env:dev
parsers.conf: |
[PARSER]
Name nginx
Format regex
Regex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*))" "(?<agent>[^\"]*)"(?: "(?<target>[^\"]*))"$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
我不想将 API 键添加为纯文本。我可以使用秘密吗?请提出实现这一目标的方法。
P.S: 我需要使用config map来添加Datadog agent,因此无法替换config map。
理论上您可以Secret as a environment variable,然后使用 ConfigMap 将其传递给 Pod。
apiVersion: v1
kind: Secret
metadata:
name: fluentbit-secret-test
type: Opaque
data:
apikey: <base64 encoded api key>
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-cm
data:
fluent-bit.conf: |
...
apikey $FLUENTBIT_API_KEY
...
apiVersion: v1
kind: Pod
metadata:
name: secret-env-test
spec:
containers:
- name: test
image: nginx
env:
- name: FLUENTBIT_API_KEY
valueFrom:
secretKeyRef:
name: fluentbit-secret-test
key: apikey
但是,您必须记住,Kubernetes Secrets 默认情况下不加密,仅进行 base64 编码。具有 API 访问权限的任何人都可以检索或修改 Secret,任何具有 etcd
访问权限的人也可以