【问题标题】:Kubernetes 1.2.2: api-server fails: can't find mounted certs for TLS on etcdKubernetes 1.2.2:api-server 失败:无法在 etcd 上找到已安装的 TLS 证书
【发布时间】:2016-08-13 23:44:41
【问题描述】:

我一直在努力让 api-server 1.2.2 与使用 TLS 保护的 etcd 一起运行。

我正在从 1.1.2 升级到 1.2.2

1.1.2 中,我使用了--etcd-config 标志并且有一个看起来像这样的文件:

{
  "cluster": {
    "machines": [
      "https://XXX.XXX.XXX.XXX:2379",
      "https://XXX.XXX.XXX.XXY:2379",
      "https://XXX.XXX.XXX.XXZ:2379"
    ]
  },
  "config": {
    "certFile": "/etc/ssl/etcd/etcd-peer.cert.pem",
    "keyFile": "/etc/ssl/etcd/private/etcd-peer.key.pem",
    "caCertFiles": [
      "/etc/ssl/etcd/ca-chain.cert.pem"
    ],
    "consistency": "STRONG_CONSISTENCY"
  }
}

现在不再支持此功能,我转而使用标志:

--etcd-cafile="/etc/ssl/etcd/ca-chain.cert.pem"
--etcd-certfile="/etc/ssl/etcd/etcd-peer.cert.pem"
--etcd-keyfile="/etc/ssl/etcd/private/etcd-peer.key.pem"    
--etcd-servers="https://XXX.XXX.XXX.XXX:2379, https://XXX.XXX.XXX.XXY:2379,https://XXX.XXX.XXX.XXZ:2379"

现在我收到此错误:

F0421 00:54:40.133777       1 server.go:291] Invalid storage version or misconfigured etcd: open "/etc/ssl/etcd/etcd-peer<nodeIP>.cert.pem": no such file or directory

所以,它似乎找不到证书文件。 文件路径和名称和之前一样,挂载hostPath和v1.1.2完全一样,所以我不明白为什么api-server找不到它们。

我一直试图通过简单地从 pod 中切换 command 来弄清楚文件路径发生了什么

- /hyperkube
- api-server
...

- /bin/sleep
- 60

kubelet 出于某种我不明白的原因不会启动此 pod。

它与yaml文件名或其他什么有关吗?

我不明白为什么kubelet 无法使用此命令运行。

对此的任何帮助将不胜感激。

谢谢

更新

/hyperkube scheduler替换命令后,我能够进入正在运行的容器

我可以 cat apiserver 抱怨的文件,所以我不明白为什么找不到它们。

【问题讨论】:

标签: ssl docker kubernetes coreos etcd


【解决方案1】:

好吧,罪魁祸首就是“”

--etcd-cafile="/etc/ssl/etcd/ca-chain.cert.pem"
--etcd-certfile="/etc/ssl/etcd/etcd-peer.cert.pem"
--etcd-keyfile="/etc/ssl/etcd/private/etcd-peer.key.pem"    
--etcd-servers="https://XXX.XXX.XXX.XXX:2379, https://XXX.XXX.XXX.XXY:2379,https://XXX.XXX.XXX.XXZ:2379"

错了

但这有效:

--etcd-cafile=/etc/ssl/etcd/ca-chain.cert.pem
--etcd-certfile=/etc/ssl/etcd/etcd-peer.cert.pem
--etcd-keyfile=/etc/ssl/etcd/private/etcd-peer.key.pem   
--etcd-servers=https://XXX.XXX.XXX.XXX:2379,https://XXX.XXX.XXX.XXY:2379,https://XXX.XXX.XXX.XXZ:237

【讨论】:

  • 如果您在终端中运行它们,shell 会帮助您删除引号,因此 apiserver 实际上会看到两者的调用相同。如果您从非 shell 环境启动(例如容器命令数组中的 args),则应省略引号
  • 谢谢...很高兴知道,但不幸的是并不明显。
猜你喜欢
  • 2015-12-23
  • 2015-12-30
  • 2014-12-03
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多