内容简介:原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢! 原文链接地址:kubernetes最复杂的就是认证和授权,这次从头搭建另外一套3个虚机的kubernetes,还是通过vagrant来进行搭建,具体vagrant的配置信息查看源码:3台虚拟机还是通过vagrant来生成对应的虚拟机。vagrant已经安装了 对应的docker。
原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢! 原文链接地址: 『高级篇』docker之kubernetes搭建集群添加认证授权(上)(38)
kubernetes最复杂的就是认证和授权,这次从头搭建另外一套3个虚机的kubernetes,还是通过vagrant来进行搭建,具体vagrant的配置信息查看源码: github.com/limingios/m… k8s分支
预先环境准备
-
虚拟机介绍和安装
3台虚拟机还是通过vagrant来生成对应的虚拟机。vagrant已经安装了 对应的docker。
系统类型IP地址节点角色CPUMemoryHostnameCentos7192.168.68.101master24Gserver01Centos7192.168.68.102worker12Gserver02Centos7192.168.68.103worker12Gserver03
-
三台机器mac开通远程登录root用户下
#设置 PasswordAuthentication yes vi /etc/ssh/sshd_config sudo systemctl restart sshd复制代码
-
三台机器接受所有ip的数据包转发
vi /lib/systemd/system/docker.service #找到ExecStart=xxx,在这行上面加入一行,内容如下:(k8s的网络需要) ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT复制代码
-
三台机器启动服务
systemctl daemon-reload service docker restart复制代码
image.png
系统设置(所有节点)
关闭、禁用防火墙(让所有机器之间都可以通过任意端口建立连接)
systemctl stop firewalld systemctl disable firewalld #查看状态 systemctl status firewalld复制代码
设置系统参数 - 允许路由转发,不对bridge的数据进行处理
#写入配置文件 cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF #生效配置文件 sysctl -p /etc/sysctl.d/k8s.conf复制代码
配置host文件
#配置host,使每个Node都可以通过名字解析到ip地址 vi /etc/hosts #加入如下片段(ip地址和servername替换成自己的) 192.168.68.101 server01 192.168.68.102 server02 192.168.68.103 server03复制代码
准备二进制文件(所有节点)
kubernetes的安装有几种方式,不管是kube-admin还是社区贡献的部署方案都离不开这几种方式:
-
使用现成的二进制文件
直接从官方或其他第三方下载,就是kubernetes各个组件的可执行文件。拿来就可以直接运行了。不管是centos,ubuntu还是其他的 linux 发行版本,只要gcc编译环境没有太大的区别就可以直接运行的。使用较新的系统一般不会有什么跨平台的问题。
-
使用源码编译安装
编译结果也是各个组件的二进制文件,所以如果能直接下载到需要的二进制文件基本没有什么编译的必要性了。
-
使用镜像的方式运行
同样一个功能使用二进制文件提供的服务,也可以选择使用镜像的方式。就像nginx,像mysql,我们可以使用安装版,搞一个可执行文件运行起来,也可以使用它们的镜像运行起来,提供同样的服务。kubernetes也是一样的道理,二进制文件提供的服务镜像也一样可以提供。
从上面的三种方式中其实使用镜像是比较优雅的方案,容器的好处自然不用多说。但从初学者的角度来说容器的方案会显得有些复杂,不那么纯粹,会有很多容器的配置文件以及关于类似二进制文件提供的服务如何在容器中提供的问题,容易跑偏。 所以我们这里使用二进制的方式来部署。二进制文件已经这里备好,大家可以打包下载,把下载好的文件放到每个节点上,放在哪个目录随你喜欢,放好后最好设置一下环境变量$PATH,方便后面可以直接使用命令。(科学上网的老铁也可以自己去官网找找)
[下载地址(kubernetes 1.9.0版本)] (https://pan.baidu.com/s/1bMnqWY)
-
将下载的k8s上传到linux服务器上
密码都是vagrant
yum -y install lrzsz #选中文件上传就可以了,这次是在windows环境,上次基础搭建是在mac上 rz复制代码
-
解压k8s,改名
解压后,改名成bin就是为了不在配置环境变量
tar -xvf kubernetes-bins.tar.gz mv ~/kubernetes-bins/ bin复制代码
准备配置文件(所有节点)
上一步我们下载了kubernetes各个组件的二进制文件,这些可执行文件的运行也是需要添加很多参数的,包括有的还会依赖一些配置文件。现在我们就把运行它们需要的参数和配置文件都准备好。
下载配置文件
#安装git yum -y install git #到home目录下载项目 git clone https://github.com/limingios/kubernetes-starter.git #看看git内容 cd ~/kubernetes-starter && ll复制代码
文件说明
-
gen-config.sh
shell脚本,用来根据每个老铁自己的集群环境(ip,hostname等),根据下面的模板,生成适合大家各自环境的配置文件。生成的文件会放到target文件夹下。
-
kubernetes-simple
简易版kubernetes配置模板(剥离了认证授权)。 适合刚接触kubernetes的老铁,首先会让大家在和kubernetes初次见面不会印象太差(太复杂啦~~),再有就是让大家更容易抓住kubernetes的核心部分,把注意力集中到核心组件及组件的联系,从整体上把握kubernetes的运行机制。
-
kubernetes-with-ca
在simple基础上增加认证授权部分。大家可以自行对比生成的配置文件,看看跟simple版的差异,更容易理解认证授权的(认证授权也是kubernetes学习曲线较高的重要原因)
-
service-config
这个先不用关注,它是我们曾经开发的那些微服务配置。 等我们熟悉了kubernetes后,实践用的,通过这些配置,把我们的微服务都运行到kubernetes集群中。
3台机器生成配置
这里会根据大家各自的环境生成kubernetes部署过程需要的配置文件。 在每个节点上都生成一遍,把所有配置都生成好,后面会根据节点类型去使用相关的配置。
#cd到之前下载的git代码目录 cd ~/kubernetes-starter #编辑属性配置(根据文件注释中的说明填写好每个key-value) vi config.properties #生成配置文件,确保执行过程没有异常信息复制代码
生成配置(所有节点)
跟基础环境搭建一样,我们需要生成kubernetes-with-ca的所有相关配置文件
#生成配置 ./gen-config.sh with-ca复制代码
PS:这个截图master_ip应该是192.168.68.101
安装cfssl(所有节点)
cfssl是非常好用的CA工具,我们用它来生成证书和秘钥文件 安装过程比较简单,
#下载 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 \ https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 #修改为可执行权限 chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 #移动到bin目录 mv cfssl_linux-amd64 /usr/local/bin/cfssl mv cfssljson_linux-amd64 /usr/local/bin/cfssljson #验证 cfssl version复制代码
生成根证书(主节点)
根证书是证书信任链的根,各个组件通讯的前提是有一份大家都信任的证书(根证书),每个人使用的证书都是由这个根证书签发的。
#所有证书相关的东西都放在这 mkdir -p /etc/kubernetes/ca #准备生成证书的配置文件 cp ~/kubernetes-starter/target/ca/ca-config.json /etc/kubernetes/ca cp ~/kubernetes-starter/target/ca/ca-csr.json /etc/kubernetes/ca #生成证书和秘钥 cd /etc/kubernetes/ca cfssl gencert -initca ca-csr.json | cfssljson -bare ca #生成完成后会有以下文件(我们最终想要的就是ca-key.pem和ca.pem,一个秘钥,一个证书) ls复制代码
改造etcd(主节点)
准备证书
etcd节点需要提供给其他服务访问,就要验证其他服务的身份,所以需要一个标识自己监听服务的server证书,当有多个etcd节点的时候也需要client证书与etcd集群其他节点交互,当然也可以client和server使用同一个证书因为它们本质上没有区别。
#etcd证书放在这 mkdir -p /etc/kubernetes/ca/etcd #准备etcd证书配置 cp ~/kubernetes-starter/target/ca/etcd/etcd-csr.json /etc/kubernetes/ca/etcd/ cd /etc/kubernetes/ca/etcd/ #使用根证书(ca.pem)签发etcd证书 cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes etcd-csr.json | cfssljson -bare etcd #跟之前类似生成三个文件etcd.csr是个中间证书请求文件,我们最终要的是etcd-key.pem和etcd.pem ls复制代码
更新etcd服务:
cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/ mkdir -p /var/lib/etcd systemctl enable etcd.service systemctl daemon-reload service etcd start #验证etcd服务(endpoints自行替换) ETCDCTL_API=3 etcdctl \ --endpoints=https://192.168.68.101:2379 \ --cacert=/etc/kubernetes/ca/ca.pem \ --cert=/etc/kubernetes/ca/etcd/etcd.pem \ --key=/etc/kubernetes/ca/etcd/etcd-key.pem \ endpoint health复制代码
api-server(主节点)
准备证书
#api-server证书放在这,api-server是核心,文件夹叫kubernetes吧,如果想叫apiserver也可以,不过相关的地方都需要修改哦 mkdir -p /etc/kubernetes/ca/kubernetes #准备apiserver证书配置 cp ~/kubernetes-starter/target/ca/kubernetes/kubernetes-csr.json /etc/kubernetes/ca/kubernetes/ cd /etc/kubernetes/ca/kubernetes/ #使用根证书(ca.pem)签发kubernetes证书 cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes #跟之前类似生成三个文件kubernetes.csr是个中间证书请求文件,我们最终要的是kubernetes-key.pem和kubernetes.pem ll复制代码
api-server服务
生成token认证文件
#生成随机token head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 0b1bd95b94caa5534d1d4a7318d51b0e #按照固定格式写入token.csv,注意替换token内容 echo "0b1bd95b94caa5534d1d4a7318d51b0e,kubelet-bootstrap,10001,\"system:kubelet-bootstrap\"" > /etc/kubernetes/ca/kubernetes/token.csv复制代码
更新api-server服务
cp ~/kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/ systemctl daemon-reload service kube-apiserver start #检查日志 journalctl -f -u kube-apiserver cat /lib/systemd/system/kube-apiserver.service复制代码
controller-manager
controller-manager一般与api-server在同一台机器上,所以可以使用非安全端口与api-server通讯,不需要生成证书和私钥。
controller-manager服务
更新controller-manager服务
cd ~/kubernetes-starter/ cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/ systemctl daemon-reload service kube-controller-manager start #检查日志 journalctl -f -u kube-controller-manager cat /lib/systemd/system/kube-controller-manager.service复制代码
scheduler
scheduler一般与apiserver在同一台机器上,所以可以使用非安全端口与apiserver通讯。不需要生成证书和私钥。
scheduler服务
查看diff 比较会发现两个文件并没有区别,不需要改造
cd ~/kubernetes-starter/ cp ~/kubernetes-starter/target/master-node/kube-scheduler.service /lib/systemd/system/ systemctl enable kube-scheduler.service复制代码
启动服务
service kube-scheduler start #检查日志 journalctl -f -u kube-scheduler cat /lib/systemd/system/kube-scheduler.service复制代码
PS:下次开始kubectl,calico,cni,kube-proxy,kube-dns的认证,授权。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Elasticsearch 集群搭建和集群原理
- Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建
- Spark集群环境搭建
- Zookeeper搭建集群
- FastDFS集群搭建
- Zookeeper集群环境搭建
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++ API设计
[美] Martin Reddy / 刘晓娜、臧秀涛、林健 / 人民邮电出版社 / 2013-8 / 89.00
现代软件开发中的一大难题就是如何编写优质的API。API负责为某个组件提供逻辑接口并隐藏该模块的内部细节。多数程序员依靠的是经验和冒险,从而很难达到健壮、高效、稳定、可扩展性强的要求。Martin Reddy博士在自己多年经验基础之上,对于不同API风格与模式,总结出了API设计的种种最佳策略,着重针对大规模长期开发项目,辅以翔实的代码范例,从而有助于设计决策的成功实施,以及软件项目的健壮性及稳定......一起来看看 《C++ API设计》 这本书的介绍吧!