kubernetes如何使用https的webapi

1.證書

以前的文章裏咱們爲了成功使用heapster而自建了證書:進入master機器的/var/run/kubernetes/目錄,執行以下的幾個命令:node

openssl genrsa -out ca.key 2048

openssl req -x509 -new -nodes -key ca.key -subj "/CN=abc.com" -days 5000 -out ca.crt

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj "/CN=kubernetes" -out server.csr

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

其中第一個subj裏/CN能夠隨便寫一個,而第二個subj中的/CN必須是apiserver所在機器的hostname(若是僅用於內部的service,這裏能夠填kubernetes),這裏建議兩個/CN不要相同,親測相同的狀況下證書是簽名無效的。在該機器上執行:git

echo $HOSTNAME

就知道要寫什麼了。github

apiserver的啓動參數中加入:segmentfault

--admission_control=ServiceAccount(加入這個參數後,k8s會給每一個namespace都設置至少一個secret,secret做爲一個存儲介質,能夠存儲證書,token,甚至配置文件)
--client_ca_file=/var/run/kubernetes/ca.crt(加入這個參數後,每一個namespace的默認的secret中都會記錄ca.crt)  
--tls-private-key-file=/var/run/kubernetes/server.key 
--tls-cert-file=/var/run/kubernetes/server.crt

controller-manager的啓動參數中加入:api

--service_account_private_key_file=/var/run/kubernetes/server.key
--root-ca-file="/var/run/kubernetes/ca.crt"

咱們要實現的目的是在任意一臺機器上(ping獲得master)能夠執行apiserver的https API。這裏咱們必須:
1.將ca.crt複製到該機器上;
2.在該機器上添加一條master機器的hostname到其IP的hosts。
這種狀況下,咱們訪問https的api:curl

curl --cacert ca.crt -X GET https://vm-56-65:6443/api/v1/namespaces/default/pods   -v

會提示:url

unauthorized.

這說明咱們還須要token。spa

2.token

token的形式有多種,能夠參考這兩篇:
http://wangzhezhe.github.io/b...
http://segmentfault.com/a/119...
這裏就介紹最簡單的一種。
進入master,在任意一個地方建立一個token文件如:code

/etc/kubernetes.io/heapster/token

編輯這個token,咱們只需簡單寫三個字符串:server

huang123,huang,huang

從新啓動apiserver,啓動時加入這個參數:

--token_auth_file=/etc/kubernetes.io/heapster/token

在其餘機子上,咱們再次執行curl命令,並加上-H:

curl --cacert ca.crt -X GET https://vm-56-65:6443/api/v1/namespaces/default/pods  -H 'Authorization: Bearer huang123' -v

是否是成功了?

相關文章
相關標籤/搜索