云安全攻防 | Kubernetes测试环境搭建
2022-12-9 17:36:29 Author: 中尔安全实验室(查看原文) 阅读量:6 收藏

前  言

上一篇文章主要介绍了什么是云原生、云原生安全、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 masterhostnamectl set-hostname node1hostnamectl set-hostname node2

在各个终端输入以下命令修改hosts(需要root权限):

vim /etc/hosts//将以下内容保存在hosts 文件中192.168.11.235 master192.168.11.236 node1192.168.11.237 node2

使用命令查看是否修改成功:

使用ping 命令查看是否已经主机名解析成功:

2

关闭selinux

selinuxlinux系统下的一个安全服务,需要关闭它来安装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 //临时关闭swapvim /etc/fstab

5

配置阿里云k8s源

修改一下各个服务器的源,方便快速下载。

# 添加 k8s 安装源cat <<EOF > kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0EOFmv kubernetes.repo /etc/yum.repos.d/

6

加载网桥过滤模块

在三台服务器上,加载网桥过滤模块,添加网桥过滤和地址转发功能编辑/etc/sysctl.d/kubernetes.conf 文件。

sysctl -p
modprobe br_netfilterlsmod | grep br_netfilter //查看过滤模块是否加载成功

7

配置ipvs功能

三台服务器配置ipvs功能:

yum install ipset ipvsadmin -y
##配置脚本cat <<EOF > /etc/sysconfig/modules/ipvs.modules#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOF
///三台服务器配置# 给脚本文件添加执行权限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/dockercat <<EOF > /etc/docker/daemon.json{  "exec-opts": ["native.cgroupdriver=systemd"],  "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]}EOF

3

所有服务器上启动docker 服务

systemctl enable dockersystemctl 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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_profilsource ~/.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的网络环境以及容器内信息收集,敬请期待~


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDYzNDM2NQ==&mid=2247484412&idx=1&sn=8a270e4e8770051fc2d6cff425bb0a34&chksm=ce67176ef9109e78e85518f42506eb395798348bd2430e93d3a33272de20a04c3707b9d3ca03#rd
如有侵权请联系:admin#unsafe.sh