【问题标题】:How to create worker cert for Coreos kubernetes aws cluster如何为 Coreos kubernetes aws 集群创建工作人员证书
【发布时间】:2016-08-25 09:46:06
【问题描述】:

好的,所以我绝对不是安全专家,并且与这个问题斗争了几天,

我正在使用 Coreos kube-aws cloud-formation 模板制作工具,我想将我的集群部署到生产环境中,但是因为这个小评论:

生产注意事项:不应使用 kube-aws 生成的 TLS 密钥和证书来部署生产 Kubernetes 集群。每个组件证书的有效期仅为 90 天,而 CA 的有效期为 365 天。如果部署生产 Kubernetes 集群,请考虑先独立于该工具建立 PKI

我需要生成自己的密钥,但我似乎不明白如何做到这一点,如果您不熟悉,他们的文档(恕我直言,作为非专家的人)是非常离谱的。

所以我的要求是这样的:

  1. 我希望证书/密钥可以使用 X 年(长时间)
  2. 我希望它们对整个域 *.company.com 都有效(我不关心 kubectl 的管理密钥的内部结构)
  3. 我想重复该过程 2 次(一次用于生产,一次用于 QA/Staging)并最终获得 2 组凭据
  4. 覆盖默认凭据并使用kube-aws up --export 获取我的集群所需的userdata

我的问题是:

  1. 如何使管理员证书对 *.company.com 有效
  2. 在文档中他们说您需要为集群中的每个节点创建一个key-pair...什么! kube-aws render 只生成 1 个工作人员 key-pair 那是怎么回事!

现在是“有趣”的部分:

$ openssl genrsa -out ca-key.pem 2048
$ openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca"

我猜-days 10000 解决了我的第一个过期问题。很酷

API-SERVER 密钥对

openssl.cnf

  [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = kubernetes
    DNS.2 = kubernetes.default
    DNS.3 = kubernetes.default.svc
    DNS.4 = kubernetes.default.svc.cluster.local
    is it
    DNS.5 = mycompany.com
    or
    DNS.5 = *.mycompany.com
    IP.1 = 10.3.0.1
    IP.2 = 10.0.0.50

并运行命令

$ openssl genrsa -out apiserver-key.pem 2048
$ openssl req -new -key apiserver-key.pem -out apiserver.csr -subj "/CN=kube-apiserver" -config openssl.cnf
$ openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out apiserver.pem -days 3650 -extensions v3_req -extfile openssl.cnf

很好,除了我不知道如何使用的 subjectAltName 之外,我还可以尝试一下看看有什么用。

工作人员密钥对

这就是我真正陷入困境的地方,我该怎么处理这句话:

This procedure generates a unique TLS certificate for every Kubernetes worker node in your cluster

良好的安全性,但在亚马逊自动缩放组上,这真的是不切实际和矫枉过正的 IMO

因此,如果我不想为每个节点都拥有一个密钥,而是为所有节点拥有一个密钥,那么我的 worker-openssl.cnf 应该是什么样子????

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = $ENV::WORKER_IP <- what am i supposed to do here?

在此之后创建管理密钥对就很简单了。

请帮忙!

【问题讨论】:

  • 这里完全相同的问题。如果您在 SO 之外找到答案,请告诉我!
  • 是的,我今天会发布解决方案
  • 有幸找到解决方案@Gleeb?

标签: amazon-web-services ssl kubernetes coreos


【解决方案1】:

我能够使用 相同的证书为所有工作人员使用此 worker-openssl.conf。可能不是最安全的设置。

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.*.cluster.internal

【讨论】:

    【解决方案2】:

    我相信您的替代名称中应该包含 *.mycompany.com。或者您可以指定所有可能的变体,例如 manual

    由于您正在运行 CoreOS,您只需配置 cloud-config 即可生成您的密钥。您不需要为每个节点手动生成它,自动缩放应该可以正常工作。

    我没有在 amazon 上这样做,但我确实使用所有 ssh 密钥和配置在裸机上手动部署了 kubernetes。你可以查看我的博客文章here。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2021-09-19
      • 2021-07-08
      • 2019-12-16
      • 1970-01-01
      • 2016-05-02
      • 2018-10-27
      • 2021-03-08
      • 1970-01-01
      相关资源
      最近更新 更多