2016-08-25 111 views
1

好了,所以我挑釁不是安全專家,並與此爭奪現在幾天,如何創建工作者證書的Coreos kubernetes AWS集羣

我使用Coreos kube-aws雲的形成模板製造商,和我想我的部署集羣生產,但因爲這個小評論:

生產注:KUBE-AWS生成的TLS密鑰和證書不應該被用來部署生產Kubernetes集羣。每個組件證書僅有效期爲90天,而CA有效期爲365天。如果部署生產Kubernetes集羣,考慮建立獨立於本工具第一

我需要生成我自己的鑰匙PKI,但我似乎不知道如何做到這一點,它們的文檔(恕我直言的人誰不一個專家)如果你不熟悉,那麼這個人真是太離譜了。

所以,我的要求是,像這樣:

  1. 我想CERT /鍵,持續X年(長時間)
  2. 我想他們整個域的有效* .company.com(我不在乎內核僅用於kubectl的管理密鑰)
  3. 我想重複這個過程2次(一次用於生產,一次用於QA /暫存)並最終擁有2組憑證
  4. 覆蓋默認憑證ntials並使用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-服務器密鑰對

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 

精細保障,一切但這的確是不現實的,矯枉過正國際海事組織一個亞馬遜自動縮放組

因此,如果我不想爲每個節點有一個密鑰,但1個密鑰的所有,我的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? 

在這之後創建的管理員密鑰對是直線前進。

請幫忙!

+0

在這裏完全相同的問題。請讓我知道如果你在外面找到答案請! –

+0

是的,我有我今天會發佈一個解決方案 – Gleeb

+0

任何運氣找到解決方案@Gleeb? – fiunchinho

回答

0

我相信你應該在你的alt-name中有* .mycompany.com。或者您可以指定所有可能的變體,如manual

由於您運行的是CoreOS,因此您只需配置cloud-config即可生成密鑰。您不需要爲每個節點手動生成它,並且自動調整應該可以正常工作。

我沒有在亞馬遜上這樣做,但我確實在baremetal上用所有ssh密鑰和配置手動部署了kubernetes。你可以看看我的博客文章here。希望它會有所幫助。

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 
相關問題