vlambda博客
学习文章列表

云原生渗透基础-Kubernetes环境搭建

服务器准备环境安装    设置主机名    修改hosts文件    所有节点关闭 SELinux 和 防火墙    所有节点添加安装源    所有节点安装所需组件并进行配置    在主节点使用 kubeadm 初始化集群    将工作节点加入集群    踩坑记参考链接

最近在学习云原生相关的渗透知识,该系列文章记录学习过程,包括基础知识(主要是k8s的搭建使用以及一些概念等,docker基础使用操作不赘述。)、工具的使用、逃逸漏洞复现等。


服务器准备


腾讯云 云服务器,新建三台服务器(香港地区)。



云原生渗透基础-Kubernetes环境搭建


为三台服务器命名:

  • master:172.19.16.6

  • node1:172.19.16.14

  • node2:172.19.16.15


云原生渗透基础-Kubernetes环境搭建


环境安装


设置主机名


hostnamectl set-hostname masterhostnamectl set-hostname node1hostnamectl set-hostname node2
[root@VM-16-6-centos ~]# hostnamectl set-hostname master[root@VM-16-6-centos ~]# hostnamemaster[root@VM-16-6-centos ~]#


修改hosts文件


vim /etc/hosts172.19.16.6 master172.19.16.14 node1172.19.16.15 node2


可以成功ping通:


[root@VM-16-6-centos ~]# ping node1PING node1 (172.19.16.14) 56(84) bytes of data.64 bytes from node1 (172.19.16.14): icmp_seq=1 ttl=64 time=0.215 ms64 bytes from node1 (172.19.16.14): icmp_seq=2 ttl=64 time=0.138 ms64 bytes from node1 (172.19.16.14): icmp_seq=3 ttl=64 time=0.128 ms


所有节点关闭 SELinux 和 防火墙


setenforce 0sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinuxsystemctl stop firewalldsystemctl disable firewalld


所有节点添加安装源


# 添加 k8s 安装源cat <<EOF > kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFmv kubernetes.repo /etc/yum.repos.d/
# 添加 Docker 安装源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


所有节点安装所需组件并进行配置


yum install -y kubelet kubeadm kubectl docker-ce


启动 kubelet、docker,并设置开机启动(所有节点)


systemctl enable kubeletsystemctl start kubeletsystemctl enable dockersystemctl start docker


修改 docker 配置(所有节点)

kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了。


cat <<EOF > daemon.json{  "exec-opts": ["native.cgroupdriver=systemd"],  "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]}EOFmv daemon.json /etc/docker/
# 重启生效systemctl daemon-reloadsystemctl restart docker


在主节点使用 kubeadm 初始化集群


# 初始化集群控制台 Control plane# 失败了可以用 kubeadm reset 重置kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
子网段配置为10.244.0.0/16后面配置的kube-flannel.yml网络插件配置的子网段也是这个。# 记得把 kubeadm join xxx 保存起来# 忘记了重新获取:kubeadm token create --print-join-command


云原生渗透基础-Kubernetes环境搭建


# 复制授权文件,以便 kubectl 可以有权限访问集群mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
# 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群


将工作节点加入集群


kubeadm join 172.19.16.6:6443 --token p62ha4.fj53b6w82wd2bpjf --discovery-token-ca-cert-hash sha256:dd0ebd757ace1c96a1f65004bc6ae8056a211d44e2e5bb0cb6b51e78a8313e32


使用kubectl get node查看节点状态为NotReady状态,需要在主节点上安装一个网络插件:


ubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


云原生渗透基础-Kubernetes环境搭建


其他节点有安装 kubectl 也可以查看。


kubectl get pods --all-namespaces


可以看到所有状态都是Running就成功了:


云原生渗透基础-Kubernetes环境搭建


踩坑记


之前使用kubeadm init初始化集群环境时,没有指定--pod-network-cidr子网与kube-flannel.yml网络插件的子网段不一样,kubectl get pods --all-namespaces查看时,kube-flannel-ds一直提示 CrashLoopBackOff

第二个解决方法:

如果运行kubectl describe pod/pod-name发现 Events 中有下面这个错误。


networkPlugin cni failed to set up pod "test-k8s-68bb74d654-mc6b9_default" network: open /run/flannel/subnet.env: no such file or directory


在每个节点创建文件/run/flannel/subnet.env写入以下内容即可解决:


FLANNEL_NETWORK=10.244.0.0/16FLANNEL_SUBNET=10.244.0.1/24FLANNEL_MTU=1450FLANNEL_IPMASQ=true


这个文件实际上就是在init时根据运行的选项生成的,如果init时没有指定相关选项(如子网段),就可能不存在该文件。


参考链接


  • https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/nd7yOvdY

  • https://www.bilibili.com/video/BV1Tg411P7EB?p=2

  • https://www.cnblogs.com/shunzi115/p/14776507.html

  • https://www.cnblogs.com/zhizihuakai/p/12629514.html


【火线Zone云安全社区群】

进群可以与技术大佬互相交流

进群有机会免费领取节假日礼品

进群可以免费观看技术分享直播

云原生渗透基础-Kubernetes环境搭建


【火线zone社区周激励】

2022.4.4~ 2022.4.10公告

云原生渗透基础-Kubernetes环境搭建


【相关精选文章】




云原生渗透基础-Kubernetes环境搭建

火线Zone是[火线安全平台]运营的云安全社区,内容涵盖云计算、云安全、漏洞分析、攻防等热门主题,研究讨论云安全相关技术,助力所有云上用户实现全面的安全防护。欢迎具备分享和探索精神的云上用户加入火线Zone社区,共建一个云安全优质社区!


//  火线Zone //


点击阅读原文,加入社区,共建一个有技术氛围的优质社区!