以前的文章里咱们为了成功使用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
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
是否是成功了?