本帖最后由 新手小明 于 2023-11-10 16:30 编辑
【容器安全】K8S部署aES组件POC测试 测试环境: ubuntu-20.04.6-live-server-amd64 *2 aES6.0.2 k8s -v1.23.1
K8S部署参考链接:https://blog.csdn.net/qq_40279964/article/details/125429233
1、MGR环境初始化 1)安装aES6.0.2, 2)配置网络,ip为192.168.0.150 3)MGR授权容器高级版; Ps:由于虚拟化资源比较紧张,安装使用的是iso离线部署,分配了8c8g100g的资源; 安装完成后,需要手动重启web服务/sf/edr/manage/bin/eps_services restart
2、操作系统初始化 两台ubuntu,搭建k8s最低配置需要4c8g,资源需要注意,资源不够的话会导致POD节点因内存问题运行异常; 1)配置网络并修改hostname 因为是搭建K8S集群,所以两台主机的hostname必须不同; master主节点ip为192.168.0.152 Node工作节点ip为192.168.0.151 2)操作系统配置hosts,k8s内部网络需要依靠host寻址,所以需要进行修改(2台都要改)
3、K8S环境部署(两台都要操作) 1)首先需要搭建底层容器,这里使用docker # 安装docker所需的工具(安装最新版即可) apt-get update apt-get install docker.io -y # 设置开机启动并启动docker sudo systemctl start docker sudo systemctl enable docker 2)设置K8S运行环境 # 禁用交换分区 swapoff -a # 永久禁用,打开/etc/fstab注释掉swap那一行。 sudo vim /etc/fstab # 修改内核参数(首先确认你的系统已经加载了 br_netfilter 模块,默认是没有该模块的,需要你先安装 bridge-utils) apt-get install -y bridge-utils modprobe br_netfilter lsmod | grep br_netfilter # 如果报错找不到包,需要先更新 apt-get update -y 3)安装加速节点(可能有些环境拉取镜像太慢,可以根据情况省略) mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://3kcpregv.mirror.aliyuncs.com"] } EOF systemctl restart docker
4、安装配置K8S 1)安装 kubelet kubeadm kubectl(master和node都执行) # 安装基础环境 apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl # 执行配置k8s阿里云源 vim /etc/apt/sources.list.d/kubernetes.list #加入以下内容 # 执行更新 apt-get update -y # 安装kubeadm、kubectl、kubelet apt-get install -y kubelet=1.23.1-00 kubeadm=1.23.1-00 kubectl=1.23.1-00 # 阻止自动更新(apt upgrade时忽略)。所以更新的时候先unhold,更新完再hold。 apt-mark hold kubelet kubeadm kubectl 2)创建kubeadm-config.yaml 配置文件,文件内容见三方链接(master执行) Ps:修改 文件中的advertiseAddress 参数为当前master节点的局域网地址; 3)在运行 kubeadm init 之前可以先执行 kubeadm config images pull 来测试与 gcr.io 的连接,kubeadm config images pull尝试是否可以拉取镜像,如果你的服务器在国内,是无法访问"k8s.gcr.io", "gcr.io", "quay.io"(master执行)
先测试: kubeadm config images pull 如能正常拉取请跳过,不能正常拉取见4)
4)#查看kubeadm config所需的镜像(master执行) kubeadm config images list #执行结果如下 k8s.gcr.io/kube-apiserver:v1.23.8 k8s.gcr.io/kube-controller-manager:v1.23.8 k8s.gcr.io/kube-scheduler:v1.23.8 k8s.gcr.io/kube-proxy:v1.23.8 k8s.gcr.io/pause:3.6 k8s.gcr.io/etcd:3.5.1-0 k8s.gcr.io/coredns/coredns:v1.8.6
使用阿里云拉取镜像,再修改镜像名即可 #从国内镜像拉取 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 docker pull coredns/coredns:1.8.6
#将拉取下来的images重命名为kubeadm config所需的镜像名字 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.8 k8s.gcr.io/kube-apiserver:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.8 k8s.gcr.io/kube-controller-manager:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.8 k8s.gcr.io/kube-scheduler:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.8 k8s.gcr.io/kube-proxy:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0 docker tag coredns/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
5)到这里就可以执行初始化操作了(master执行) kubeadm init --config kubeadm-config.yaml Ps:注意这里的yaml文件需要放到当前命令执行目录中,也可以加上路径再执行; 看到successfully,代表初始化成功 上图中,提示中有两件事,先复制变量并执行 再将jion执行token复制到node节点进行执行 Ps:如果忘了密钥,可以使用该命令进行生成 kubeadm token create --print-join-command 6)node加入集群(仅node执行) 这样就是代表加入成功;如有报错需要重置kubeadm,查原因再加入,命令:kubeadm reset Ps:报错原因如果是10248端口链接不上,那就是没加host(安装kubeadm前就得加) 7)mater上查看节点状态 节点状态没有ready,还需要安装网络组件 8)安装网络组件 网络组件可选安装calico和flannel,我这里是calico安装完后一直拉取不了镜像,换成了flannel;两个组件安装一个就行; Calico:
Flannel: sudo mkdir /opt/bin sudo cp flanneld-amd64 /opt/bin/flanneld sudo chmod +x /opt/bin/flanneld Ps:如果上面的链接拉取有问题,可以直接找台能访问该站点的PC下载镜像和yaml文件上传上去操作也行;
遇到一个问题,安装flannel组件时一直没有成功,卡住了,这里flannel没起来,导致coredns也没起来,,, 可以通过该命令查报错 kubectl logs pod名称 -n 命名空间
原因时yaml文件中的cidrs没有添加地址 vim /etc/kubernetes/manifests/kube-controller-manager.yaml
添加以下内容 --allocate-node-cidrs=true --cluster-cidr=10.244.0.0/16 再重启kubectl即可,都起来了 查看节点状态,都正常了 可以安装aES集群链接组件和防御容器了 9)K8S排错命令 Kubectl get POD -A #查看所有POD节点状态 Kubectl get nodes #查看节点状态 Kubectl describe nodes #查看nodes运行细节 kubectl describe POD名称 -n 命名空间 #查看单个POD节点运行信息和报错 kubectl logs POD名称 -n 命名空间 #查看单个POD节点运行日志
5、给K8S安装aESagent 1)安装集群连接组件(aES的集群连接组件镜像和agent镜像,仓库扫描镜像是三合一版本,以下简称agent) 分为两种,有镜像仓库的,把agent镜像传到镜像仓库再拉取;另一种则直接把agent镜像上传到k8s集群进行本地拉取; 选择部署环境,这里是K8S和私有云环境 2)填写镜像所在路径 需要先把agent镜像上传到master节点 使用docker加载集群连接组件镜像 Docker load -i agent安装包名称 再获取镜像的名称 Docker images MGR上填的镜像名称是REPOSITORY:TAG,也就是 containeragent:6.0.2.2603.aES_6.0.2-develop.x86 3)调度范围,安装到哪些节点上 4)配置参数 需要放通MGR的30443端口到K8S集群; 再就是需要先创建好命名空间,命令见上图;
5)安装集群组件 生成配置命令并下载yaml文件上传到k8s集群,并执行命令即可,等待一会儿就能看到集群上线;
6、给K8S集群安装防御容器(就是资产管理中的agent) 分为两种方式,自动部署和手动部署,手动部署和安装集群链接组件类似,但是手动需要在每个节点上都要上传agent进行安装;所有推荐使用自动安装; 1)自动部署 添加任务,设置名称和类型,安装范围,镜像名称和集群连接组件名称一致; 确定并执行即可 等待一会儿,会自动进行安装 查看结果 Agent部署完成 前往资产管理进行查看,正常上线; Ps:注意,容器agent和操作系统agent二选一安装;
7、上传本地POC测试镜像到k8s集群,测试agent扫描能力 由于没有镜像仓库条件,所以采用上传本地镜像的方式进行测试; 下载测试POC镜像并上传到任一一个节点的/tmp目录下 使用docker 进行拉取该镜像,就可以被agent识别到了 Docker load -i 1.0.8-poc.tar 前往MGR平台查看本地镜像 点击该镜像,进行扫描任务,即可进行扫描风险 风险分析中也能看到相关的风险信息 本次测试结束: 中间K8S环境搭建比较费时间。。。。。 |