我正在尝试将Vault作为Kubernetes上的StatefulSet运行。
我有一个基于此的工作领事群集: https://github.com/kelseyhightower/consul-on-kubernetes
我的Vault的sts文件如下所示:
kind: StatefulSet
metadata:
name: vault
spec:
serviceName: vault
replicas: 2
template:
metadata:
labels:
app: vault
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- vault
topologyKey: kubernetes.io/hostname
containers:
- name: vault
image: "vault:0.9.0"
ports:
- containerPort: 8200
name: http
- containerPort: 8201
name: backend
args:
- "server -config=/vault/config/vault-server.json"
securityContext:
capabilities:
add:
- IPC_LOCK
volumeMounts:
- name: config
mountPath: /vault/config
- name: tls
mountPath: /etc/tls
volumes:
- name: config
configMap:
name: vault
- name: tls
secret:
secretName: vault
我的配置文件看起来像这样
{
"disable_mlock": true,
"listener": [
{
"tcp": {
"tls_disable": true
}
}
],
"storage": {
"consul": {
"address": "consul.default.svc.cluster.local:8500",
"path": "vault",
"token": "7e21f292-e7e7-f879-210c-4af2ae483cac"
}
}
}
当我应用StatefulSet时,我收到绑定错误
Error initializing listener of type tcp: listen tcp 127.0.0.1:8200: bind: address already in use
我尝试使用不同的端口添加127.0.0.1和0.0.0.0的侦听器。 pod正在读取配置文件,因为在我禁用之前我收到了TLS警告。
关于pod上绑定到localhost的内容的任何想法?任何疑难解答帮助将不胜感激
答案 0 :(得分:3)
问题是Docker容器以开发模式启动库
来自https://github.com/hashicorp/docker-vault/blob/master/0.X/Dockerfile#L69
# By default you'll get a single-node development server that stores everything
# in RAM and bootstraps itself. Don't use this configuration for production.
CMD ["server", "-dev"]
我将statefulSet yaml中的cmd和参数行添加/更改为
command: ["vault", "server"]
args:
- "-config=/vault/config/vault-server.json"
这摆脱了开发模式并使用服务器模式。
请注意,这不是一个生产就绪的例子,它仅用于学习
答案 1 :(得分:0)
您可以尝试一下
替换为:
args:
- "server -config=/vault/config/vault-server.json"
将此添加到您的yaml文件中
command: ["vault", "server", "-config", "/vault/config/config.json"]