前 言
上一篇文章主要介绍了什么是云原生、云原生安全、Kubernetes 与云原生的关系以及Kubernetes 架构。本篇文章主要从Kubernetes容器测试环境搭建开始。
01 准备
资源准备 1.1
k8s 集群大体上分为两大类:
一主多从:一台 master 节点和多台 node 节点,搭建比较简单,但是有可能出现 master 单机故障。
多主多从:多台 master 节点和多台 node 节点,搭建比较麻烦,但是安全性高。
所以进行k8s 实验环境搭建至少需要三台服务器 ,这里使用的服务器均为centos服务器:
master:192.168.11.235
node1 :192.168.11.236
node2 :192.168.11.237
环境准备 1.2
在三台服务器上均执行如下操作:
1
修改主机名及hosts
修改服务器主机名以及hosts文件配置,方便后续集群节点间的直接调用。
在各个终端输入以下命令修改主机名:
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
在各个终端输入以下命令修改hosts(需要root权限):
vim /etc/hosts
//将以下内容保存在hosts 文件中
192.168.11.235 master
192.168.11.236 node1
192.168.11.237 node2
使用命令查看是否修改成功:
使用ping 命令查看是否已经主机名解析成功:
2
关闭selinux
selinux是linux系统下的一个安全服务,需要关闭它来安装k8s,否则可能会在安装k8s时存在一些问题,在各服务器上输入以下命令:
setenforce 0 //临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config //永久关闭
3
禁用防火墙和iptabs规则
kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则。三台虚拟机需做同样操作:
4
关闭swap
k8s需要禁用swap,否则可能对服务器的性能造成影响,在每台服务器使用vim命令修改注释掉 /dev/mapper/centos-swap swap这一行。
swapoff -a //临时关闭swap
vim /etc/fstab
5
配置阿里云k8s源
修改一下各个服务器的源,方便快速下载。
# 添加 k8s 安装源
cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
mv kubernetes.repo /etc/yum.repos.d/
6
加载网桥过滤模块
在三台服务器上,加载网桥过滤模块,添加网桥过滤和地址转发功能编辑/etc/sysctl.d/kubernetes.conf 文件。
sysctl -p
modprobe br_netfilter
lsmod | grep br_netfilter //查看过滤模块是否加载成功
7
配置ipvs功能
三台服务器配置ipvs功能:
yum install ipset ipvsadmin -y
##配置脚本
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
///三台服务器配置
# 给脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
# 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
注意:完成上面的所有操作后重启服务器。
02安装
安装docker 2.1
1
修改源
2
安装指定版本docker-ce
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
# 添加一个配置文件
# kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了所以这里需要修改下 docker 的配置(在所有服务器上修改):
mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]
}
EOF
3
所有服务器上启动docker 服务
systemctl enable docker
systemctl start docker
4
所有服务器上安装所需组件
yum install -y kubelet kubeadm kubectl //注意版本
5
配置 kubelet 的group
# 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
部署Master 2.2
在master 节点上创建集群:
# 国内网络原因所以指定阿里云仓库
[[email protected] ~]# kubeadm init \
--apiserver-advertise-address=192.168.108.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
如果看到如下图所示代表创建成功,记住红框中的命令:
kubeadm token create --print-join-command //如果忘记可以用这条命令重制
在使用集群前需要以普通用户身份执行以下操作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
部署Node 2.3
将node 节点加入集群中,直接在两个node 服务器中输入之前红框中的命令:
在master 节点输入命令查看节点信息:
kubectl get nodes
如果执行上面的命令报错:
输入以下命令可以解决:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
#echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> ~/.bash_profil
source ~/.bash_profile
在master上安装网络插件flanneld,否则node节点 是 NotReady 状态,安装后稍等会,状态(STATUS)会变为Ready(准备好)。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署DashBoard 2.4
1
查询k8s版本
kubectl version
2
选择Dashboard版本
根据Server Version版本选择Dashboard版本:
https://github.com/kubernetes/dashboard/releases/tag/
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml
3
修改配置
修改recommended.yaml,设置nodePort:30443,并且添加type:NodePort(注意nodePort和NodePort的大小写)
4
应用配置
kubectl apply -f recommended.yaml
查询运行状态:
kubectl get pods -n kubernetes-dashboard
访问https://<master-ip>:30433或https://<node-ip>:30433
5
创建用户
在master节点创建service account并绑定cluster-admin管理员集群角色。
创建用户:
kubectl create serviceaccount dashboard-admin -n kube-system
授权:
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin -
-serviceaccount=kube-system:dashboard-admin
获取Token:
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret |
awk '/dashboard-admin/{print $1}')
使用Token登录dashboard:
到此Kubernetes就完全部署好了。除了在本地部署Kubernetes,许多公有云厂商也推出了各自的 Kubernetes 托管云平台,国外公有云厂商主要以 Google、Amazon、Microsoft、Azure 为主,国内则以阿里、腾讯、华为为主。
总结
本章节主要介绍了Kubernetes实验环境搭建中DashBoard、Master、Node节点的部署的细节以及踩坑的解决方法,后续将依托此实验环境展开一系列云安全攻防技术研究。下一章节内容将介绍k8s的网络环境以及容器内信息收集,敬请期待~