如何为Coreos kubernetes aws集群创建工作者证书

时间:2016-08-25 09:46:07

标签: amazon-web-services ssl kubernetes coreos

好的,所以我挑衅地不是安全专家,而且现在与它斗争了几天,

我正在使用Coreos kube-aws云形成模板制作商,我想将我的群集部署到生产中,但由于这个小小的评论:

  

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

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

所以我的要求是这样的:

  1. 我想证明/密钥持续X年(很长一段时间)
  2. 我希望它们对整个域* .company.com有效(我不关心kubectl的管理密钥的内部)
  3. 我想重复这个过程2次(一次用于制作,一次用于质量保证/舞台演出),最终有两套凭据
  4. 覆盖默认凭据并使用kube-aws up --export获取我需要的userdata群集
  5. 我的问题是:

    1. 如何使管理员证书对* .company.com有效
    2. 在文档中他们说你需要为集群中的每个节点创建一个key-pair ......什么! kube-aws render只会产生一名工作人员key-pair,所以最后会发生这种情况!
    3. 现在好的“有趣”部分:

      $ 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?
      

      在此之后创建管理密钥对是直截了当的。

      请帮忙!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我相信你的alt-name应该有* .mycompany.com。或者您可以指定所有可能的变体,例如manual

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

我没有在亚马逊上做过这个,但我确实在裸机上使用所有ssh键和配置手动部署kubernetes。你可以查看我的博客文章here。希望它会有所帮助。

相关问题