【问题标题】:nixos etcd.pem (kubernetes)nixos etcd.pem (kubernetes)
【发布时间】:2020-04-06 17:29:34
【问题描述】:

尝试在 nixos 上安装 Kubernetes 时,使用以下节:

services.kubernetes.masterAddress = "XXXXXX";
users.users.XXXXXX.extraGroups = [ "kubernetes" ];

services.kubernetes = {
  roles = ["master" "node"];
};

我遇到了以下问题:

open /var/lib/kubernetes/secrets/etcd.pem: no such file or directory

我将其识别为 TLS/SSL 证书,但我应该如何生成该文件?

【问题讨论】:

  • 请详细描述。 “安装 Kubernetes”是什么意思?有几种安装方法。你是用minikubekubeadm 做的还是从头开始做的,称为“艰难的方式”?
  • 公平点,我已经添加了一些细节 - 我希望这是你所追求的。我想这算是“艰难的道路”。
  • 您是否遵循过类似github.com/kelseyhightower/kubernetes-the-hard-way 的任何教程?我猜你错过了配置中的一些重要步骤。尝试通过它并仔细检查您是否没有错过任何重要的事情。首先我会检查这个部分github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/…
  • 实际上,我是从这个rzetterberg.github.io/kubernetes-nixos.html 开始的,因为它明确适用于 nixos 上的 kubernetes。很明显它已经有几年的历史了,但我希望它可以通过小的修改来工作——例如,生成 etcd.pem 文件。

标签: ssl kubernetes etcd nixos


【解决方案1】:

您使用的文章确实很旧。它是在差不多 2.5 年前发布的 2017-07-21。您可以确定它已经过时了这段时间很多。

所以,在熟悉了一点之后......我发现这实际上是另一种安装 kubernetes 集群的方法,它与我在中提到的“硬方法”无关我之前的评论。相反,这是我见过的最简单的 kubernetes 集群设置。实际上,您无需执行任何操作,只需在 configuration.nix 中添加一个条目,然后运行 ​​nixos-rebuild switch,您就可以期待一切正常运行。但 NixOS 真正关心的事情真的很多,而不仅仅是几件事情。生成正确的证书只是 Kubernetes 集群设置所涉及的众多步骤之一。请记住,从头开始安装 Kubernetes 是一项非常复杂的任务。看一下this 文章,你就会明白我的意思。对于教育目的来说,这真是太神奇了,因为可能没有比从头开始构建更好的方法来深入理解某些东西了,可能是最手动的方式。

另一方面,如果您只是需要相对快速地设置一个工作的 Kubernetes 集群,那么 Kubernetes the Hard Way 将不是您的选择。幸运的是,有一些解决方案可以让您相对快速而简单地设置 Kubernetes 集群。

其中一个是Minikube。 另一个可以让您设置多节点 Kubernetes 集群的方法是 kubeadm

回到 NixOS,只要一切都按预期工作,在这个系统上设置 kubernetes 集群是多么简单,这给我留下了深刻的印象。但如果不是(这主要是您的问题所在)怎么办?您可以尝试自己调试它并尝试寻找解决问题的方法,或者只是在 NixOS 项目 github page 上创建一个问题,例如 this one。如您所见,有人已经报告了与您完全相同的问题。他们说在 18.09 版本上它可以正常工作,所以您可能正在使用像 19.03 这样的较新版本。您可以进一步阅读到有一些重大变化,例如在 19.03 中迁移到强制 pki。

如果您对在 NixOS 上运行 kubernetes 特别感兴趣,请仔细查看此问题,因为其中描述了一些建议和解决方法:

https://github.com/NixOS/nixpkgs/issues/59364#issuecomment-485122860 https://github.com/NixOS/nixpkgs/issues/59364#issuecomment-485249797

首先确保您的masterAddress 设置正确,即作为主机名,而不是IP 地址。正如你所说的那样,只有"XXXXXX" 我猜不出那里目前设置了什么。很有可能当你设置它时,例如到localhost,将正确生成适当的证书:

services.kubernetes = {
   roles = ["master"];
   masterAddress = "localhost";
  };

您可能还想熟悉与 Kubernetes 相关的 NixOS 文档中的 this 信息。

如果有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 2014-07-07
    • 1970-01-01
    • 2014-12-07
    • 2021-02-26
    • 2018-01-28
    • 2018-08-27
    • 2016-11-20
    • 2019-03-03
    相关资源
    最近更新 更多