kubernetes如何使用https的webapi

2017-12-30 11:33:54来源:oschina作者:xiaomin0322人点击

分享
kubernetes如何使用https的webapi 博客分类: Kubernetes
1.证书

之前的文章里我们为了成功使用heapster而自建了证书:进入master机器的/var/run/kubernetes/目录,执行如下的几个命令:


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不要相同,亲测相同的情况下证书是签名无效的。在该机器上执行:


echo$HOSTNAME

就知道要写什么了。


apiserver的启动参数中加入:


--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的启动参数中加入:


--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 --cacert ca.crt -X GET https://vm-56-65:6443/api/v1/namespaces/default/pods -v

会提示:


unauthorized.

这说明我们还需要token。

2.token

token的形式有多种,可以参考这两篇:http://wangzhezhe.github.io/b...http://segmentfault.com/a/119...这里就介绍最简单的一种。进入master,在任意一个地方创建一个token文件如:


/etc/kubernetes.io/heapster/token

编辑这个token,我们只需简单写三个字符串:


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

是不是成功了?


https://segmentfault.com/a/1190000003115642

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台