我尝试使用 helm.elastic.com 中的图表将使用 Azure Repository Plugin 的快照存储库添加到通过 helm 部署的在 Azure(使用 K8s)上运行的 elasticsearch 实例。该图表已修补以使用包含 Azure 存储库插件的自建映像myprivaterepo:elasticsearch-azure:7.9.2
,现在我无法将 Azure 凭据添加到 elasticsearch-keystore。
我向 elasticsearch statefulset 添加了一个包含 azure 凭据和第二个 init-container 的秘密,以从该秘密中填充密钥库:
- command:
- sh
- -c
- |
whoami
echo $AZURE_ACCOUNT | bin/elasticsearch-keystore add --stdin --force azure.client.default.account
echo $AZURE_SAS_TOKEN | bin/elasticsearch-keystore add --stdin --force azure.client.default.sas_token
ls -l config
bin/elasticsearch-keystore list
env:
- name: AZURE_ACCOUNT
valueFrom:
secretKeyRef:
key: account
name: snapshot-secret
- name: AZURE_SAS_TOKEN
valueFrom:
secretKeyRef:
key: sas
name: snapshot-secret
image: myprivateregistry/elasticsearch-azure-7.9.2
imagePullPolicy: IfNotPresent
name: update-keystore
resources: {}
securityContext:
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
command
略微扩展以检查许可问题。Init Container 成功运行,产生以下输出。
$ kubectl logs elasticsearch-master-2 -c update-keystore
elasticsearch
total 32
-rw-rw---- 1 elasticsearch elasticsearch 428 Mar 24 09:01 elasticsearch.keystore
-rw-rw---- 1 elasticsearch root 53 Sep 23 00:49 elasticsearch.yml
-rw-rw---- 1 elasticsearch root 2301 Sep 23 00:43 jvm.options
drwxrwxr-x 2 elasticsearch root 4096 Sep 23 00:47 jvm.options.d
-rw-rw---- 1 elasticsearch root 7734 Sep 23 00:49 log4j2.properties
-rw-rw---- 1 elasticsearch root 473 Sep 23 00:47 role_mapping.yml
-rw-rw---- 1 elasticsearch root 197 Sep 23 00:47 roles.yml
-rw-rw---- 1 elasticsearch root 0 Sep 23 00:47 users
-rw-rw---- 1 elasticsearch root 0 Sep 23 00:47 users_roles
azure.client.default.account
azure.client.default.sas_token
keystore.seed
第一行是运行命令的用户,列表显示/usr/share/elasticsearch/config
后跟bin/elasticsearch-keystore list
正确显示添加键的输出。
我的问题是在运行的elasticsearch容器中,keystore是空的
$ kubectl exec -ti elasticsearch-master-2 -- bin/elasticsearch-keystore list
keystore.seed
-master-0
和相同-master-1
。
我查看了几个博客和howtos,都以相同的方式进行操作,但我找不到错误。有些人使用弹性搜索控制器,目前没有选择,不应该真的是这里的佼佼者。
elasticsearch 用户无法访问由 initContainer 创建的Elasticsearch 快照密钥库文件指南#3332
我也将图表部署到运行 elasticsearch 7.11.2 的私有 K8s 集群中,结果相同。
解决了。我忽略了 InitContainer 和真实容器需要挂载一个卷来共享生成的秘密。
通过像这样添加卷并将其正确安装到容器中,密钥库在容器中具有预期值。