标签: confd

在docker环境中重新启动postgres

我有麻烦重新启动dockerized postgres数据库(我使用Core OS).使用该命令在bash脚本中启动数据库

# boot.sh
sudo -i -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

哪个有效.我有另一个由confd调用的脚本,当一些etcd键改变时运行(这部分没问题,文件被正确调用)并且必须重启postgres(不重新加载,因为一些配置更改需要重启).以下是我尝试的主要选项,但失败了...

# restart.sh
sudo -u postgres /usr/lib/postgresql/9.3/bin/pg_ctl --pgdata=/var/lib/postgresql/9.3/main restart
Run Code Online (Sandbox Code Playgroud)

系统地引发错误:

%FATAL:  lock file "postmaster.pid" already exists
%HINT:  Is another postmaster (PID 273) running in data directory "/var/lib/postgresql/9.3/main"?
Run Code Online (Sandbox Code Playgroud)

此外,

# restart.sh
rm /var/lib/postgresql/9.3/main/postmaster.pid
sudo -i -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

,

rm /var/lib/postgresql/9.3/main/postmaster.pid
/etc/init.d/postgresql start
Run Code Online (Sandbox Code Playgroud)

,

/etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)

exec su postgres -c "/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf"
Run Code Online (Sandbox Code Playgroud)

失败了

ERROR exit status 1
Run Code Online (Sandbox Code Playgroud)

任何想法?先感谢您!

postgresql docker coreos confd

9
推荐指数
1
解决办法
6423
查看次数

使用kubernetes使用敏感信息填充Docker容器

我有一个运行容器的容器,需要访问API密钥和数据库密码等敏感信息.现在,这些敏感值嵌入在控制器定义中,如下所示:

env:
- name: DB_PASSWORD
  value: password
Run Code Online (Sandbox Code Playgroud)

然后在Docker容器中作为$DB_PASSWORD环境变量可用.一切都相当容易.

但是,阅读他们关于Secrets的文档,他们明确表示将敏感配置值放入您的定义中会违反最佳实践,并且可能是一个安全问题.我能想到的唯一其他策略如下:

  • 为每个用户社区或命名空间创建一个OpenPGP密钥
  • 使用crypt将配置值设置为etcd(使用私钥加密)
  • 创建一个包含私钥的kubernetes秘密,就像这样
  • 将该秘密与容器相关联(意味着私钥可以作为卷安装访问),就像这样
  • 当容器启动时,它将访问私有密钥的卷挂载内的文件,并使用它来解密从etcd返回的conf值
  • 然后可以将其合并到confd中,confd根据模板定义(例如Apache或WordPress配置文件)填充本地文件

这似乎相当复杂,但更安全和灵活,因为值不再是静态的并以明文形式存储.

所以我的问题,我知道这不是一个完全客观的问题,这是否完全是必要的?只有管​​理员才能首先查看和执行RC定义; 所以,如果有人违反了kubernetes大师,你还有其他问题需要担心.我看到的唯一好处是没有明文提交到文件系统的秘密的危险......

有没有其他方法以安全的方式使用秘密信息填充Docker容器?

security docker kubernetes confd

9
推荐指数
1
解决办法
1291
查看次数

在Kubernetes清单中使用动态值

我有两个独立的Kubernetes集群,分别用于登台和生产环境.我希望我将向每个集群提交Kubernetes API对象的YAML清单,但是某些对象在两个环境之间的配置会略有不同.

想象一下,在每个集群上运行一个内部Docker注册表,一个使用S3作为存储后端,一个使用GCS后端.注册表容器可以接受这些配置值作为环境变量或从文件中读取,这两个Kubernetes都表示支持,但是我应该如何为每个环境填充这些值?

基本上我想要的是一种让清单看起来像这样的方法,其中$()语法是在提交清单时在服务器上发生的变量插值:

---
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: foo
      env:
        - name: bar
          value: $(etcdctl get /path/to/bar)
Run Code Online (Sandbox Code Playgroud)

我可以编写使用占位符作为值的模板,然后处理模板,从一些外部源中提取实际值,以生成实际提交给集群的最终清单.但是,我想我先问一个这样做的工具已经存在,或者有一些我不知道的Kubernetes祝福方式.这似乎是许多人为了使用Kubernetes而需要做的事情.

我曾经有过的其他想法包括在主机节点上使用etcd,confd和scripts的某些组合,但是这开始进入主机配置管理领域,我想以几乎所有成本避免这些领域.我正在使用CoreOS,主机完全通过coreos-cloudinit进行配置.换句话说,在创建节点时未定义的主机系统上没有任何操作,因此像Ansible这样的传统配置管理工具已经完成.

我知道Kubernetes的秘密系统,但其中一些变量值可能非常大,而且大多数都不是秘密.

kubernetes confd

9
推荐指数
1
解决办法
8395
查看次数

当 Hashicorp Vault 中的密钥更新时,如何重新启动 Kubernetes pod?

已成功使用 Kubernetes 实施 Vault,并且在 K8s 中运行的应用程序正在从 HashicorpVault 获取环境变量。一切都很好!但是,想要向前迈出一步,每当对 Vault 中的密钥进行更改时都希望重新启动 pod,到目前为止,每当我们对 Vault 密钥进行更改时,我们都必须手动重新启动 pod 以重置环境变量。如何实现这一目标?听说过confd,但不知道如何实现它!

kubernetes hashicorp-vault confd

6
推荐指数
1
解决办法
4514
查看次数

如何在键中使用正斜杠设置环境变量

有没有办法在名称中使用斜杠导出环境变量,例如:

export /myapp/db/username=someval

这篇文章表明它应该是可能的,但我无法弄清楚这样做的有效语法.

背景:

我使用confd从模板和密钥库生成配置文件.典型的商店(consul,etcd)使用分层键,例如/myapp/db/username.我希望透明地允许在使用基于环境变量的提供程序和利用分层键的配置存储之间进行切换.

bash shell environment-variables confd

5
推荐指数
1
解决办法
2857
查看次数