云原生滲透基礎-Kubernetes環境搭建
服務器準備
環境安裝
設置主機名
修改hosts文件
所有節點關閉 SELinux 和 防火墻
所有節點添加安裝源
所有節點安裝所需組件并進行配置
在主節點使用 kubeadm 初始化集群
將工作節點加入集群
踩坑記
參考鏈接
最近在學習云原生相關的滲透知識,該系列文章記錄學習過程,包括基礎知識(主要是k8s的搭建使用以及一些概念等,docker基礎使用操作不贅述。)、工具的使用、逃逸漏洞復現等。
服務器準備
騰訊云 云服務器,新建三臺服務器(香港地區)。


為三臺服務器命名:
- master:172.19.16.6
- node1:172.19.16.14
- node2:172.19.16.15

環境安裝
設置主機名
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 < 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 < daemon.json{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]}EOFmv daemon.json /etc/docker/
# 重啟生效systemctl daemon-reloadsystemctl restart docke
在主節點使用 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

# 復制授權文件,以便 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

其他節點有安裝 kubectl 也可以查看。
kubectl get pods --all-namespaces
可以看到所有狀態都是Running就成功了:

踩坑記
之前使用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