我正在尝试在 k8s 中将 postfix 作为容器运行。容器启动(包括 svcs),但我的配置映射和机密无法正常使用。我尝试了以下操作:
- 以明文形式设置带有用户和密码的配置图结果:有效
postmap -q someuser@localhost mysql:./virtual_mailbox.cf
- 使用 base64 加密密码和用户名(按照 k8s 说明),将这些加密值读入容器的环境变量(
envFrom:- secretRef: name: postfix-db-access
),尝试使用连接到数据库postmap
对于这种情况,配置图如下所示:
1 apiVersion: v1
2 kind: ConfigMap
3 metadata:
4 name: postfix-db-configs
5 namespace: mailserver
6 data:
7 virtual_mailbox.cf: |
8 user=$(echo ${POSTFIX_USER} | base64 -d)
9 password=$(echo ${POSTFIX_PASS} | base64 -d)
10 hosts=database.default.svc.cluster.local
11 dbname=postfix
12 query=SELECT mail FROM generic_map WHERE local_mail='%s' AND active=1;
结果:失败。用户“$(echo ${POSTFIX_USER} | base64 -d)”无权访问数据库。
- 将 Postfix 用户的用户名和密码以明文形式存储在 secret 中,如下所示:
1 apiVersion: v1
2 kind: Secret
3 metadata:
4 name: postfix-db-access
5 namespace: mailserver
6 type: Opaque
7 stringData:
8 POSTFIX_USER: PostfixUser
9 POSTFIX_PASS: somePassword
以及配置图中的相应行
user=$(echo ${POSTFIX_USER})
结果:失败用户 'echo ${POSTFIX_USER}) 无权访问数据库'。该请求未处理已正确设置的环境变量。
使用该命令可以很好地连接数据库并进行查询mysql -h database.default.svc.cluster.local -u postfix -p -e 'use postfix;SELECT mail FROM generic_map WHERE local_mail='someuser@localhost' AND active=1;
。我得到了我需要和期望的所有结果。
问题是:我如何设置秘密和配置图,以便这个过程能够正常工作并按预期建立与数据库的连接?
真影
答案1
这是为提高可见性而发布的社区 wiki 答案。请随意扩展它。
@mdaniel 提出的可能解决方案:
POSTFIX_USER
要使用、等的预处理值POSTFIX_PASS
,您可以使用初始化容器使用 Volume,由 init 容器和应用程序容器共享。
更多信息请访问Kubernetes 网站