amazon-web-services - 如何为 Coreos kubernetes aws 集群创建工作证书

标签 amazon-web-services ssl kubernetes coreos

好吧,我肯定不是安全专家,现在已经为此奋斗了几天,

我正在使用 Coreos kube-aws cloud-formation template maker,我想将我的集群部署到生产环境中,但因为这个小评论:

PRODUCTION NOTE: the TLS keys and certificates generated by kube-aws should not be used to deploy a production Kubernetes cluster. Each component certificate is only valid for 90 days, while the CA is valid for 365 days. If deploying a production Kubernetes cluster, consider establishing PKI independently of this tool first

我需要生成自己的 key ,但我似乎不明白该怎么做,如果您不熟悉,他们的文档(恕我直言,作为非专家的人)是非常离谱的。

所以我的要求是这样的:

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

我的问题是:

  1. 如何使管理员证书对 *.company.com 有效
  2. 在文档中他们说您需要为集群中的每个节点创建一个 key 对...什么! kube-aws render 只生成 1 个 worker 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 key 对

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 之外,我本可以尝试几次,看看它有什么用。

worker key 对

这是我真正卡住的地方,我应该如何处理这句话:

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

很好的安全性,但在亚马逊自动缩放组上,这真的是不现实的,而且是矫枉过正的 IMO

因此,如果我不想为每个节点设置一个 key ,而是为所有节点设置一个 key ,我的 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?

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

请帮忙!

最佳答案

我能够使用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

关于amazon-web-services - 如何为 Coreos kubernetes aws 集群创建工作证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39141877/

相关文章:

python - 无法在 AWS Rest API 请求中使用 "Filter"

php - ubuntu 14.04 php 7 curl 无法获得颁发者证书

Java:使用自签名证书的 SSL 客户端身份验证

kubernetes - 将 MFA 与 EKS kubectl 和 aws-iam-authenticator 结合使用

kubernetes - GCP Kubernetes 规模太高

caching - 我的缓存守护进程应该驻留在哪里?

amazon-web-services - 为什么没有在 CloudFormation Stack 中创建此安全组?

amazon-web-services - AWS Fargate 资源初始化错误 : unable to pull secrets or registry auth: pull command failed: : signal: killed

asp.net - 从 ASP.NET 应用程序和连接管理调用 Web 服务

windows-10 - Windows 持久卷上的 Kubernetes