k8s集群搭建

·
SQL注入 no tag February 24, 2022

k8s安全学习

搭建k8s集群

使用kubeadm搭建 1 node 1 master 的集群、网络插件使用flannel 即可

image-20220222162045032

准备两台Ubuntu虚拟机搭建

关闭防火墙和swap

关闭iptables/ufw:  service ufw stop
关闭swap:  swapoff  -a

然后每台机器上安装好docker

https://www.runoob.com/docker/ubuntu-docker-install.html

在所有节点上安装 kubectl kubelet kubeadm

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。
# apt-get update && apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y kubectl kubelet kubeadm国内请使用aliyun源:
# sudo apt-get update && apt-get install -y apt-transport-https
# sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
# sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
# sudo apt-get update# apt-get install -y kubectl kubelet kubeadm

初始化master节点

pod网络插件是必要安装,以便pod可以相互通信. 请提前确认自己需要使用的pod网络插件,以Flannel为例,为了使Flannel正常工作,执行kubeadm init命令时需要增加--pod-network-cidr=10.244.0.0/16参数

# kubeadm init --pod-network-cidr=10.244.0.0/16     # k8s.gcr.io可以访问的情况下可以直接执行init
# kubeadm init --control-plane-endpoint="192.168.52.130:6443" --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16  # 通过跳转registry的方式安装以上两种init的方式自己根据情况选择执行

如果这里报错的解决方案

https://www.fons.com.cn/118262.html

成功如图

image-20220222174425592

保存这个token

kubeadm join 192.168.52.130:6443 --token 0jh5re.0ita4ui5nz02raw9 \
    --discovery-token-ca-cert-hash sha256:9119db494baca8874d1046b6bd778c5cce384651ed38f40617c0c123cc030dd7

kubectl认证

集群主节点启动之后,我们需要使用kubectl来管理集群,在开始前,我们需要设置其配置文件进行认证。

使用kubectl工具 【master节点操作】\

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

执行完成后,我们使用下面命令,查看我们正在运行的节点

kubectl get nodes

image-20220222175237236

能够看到,目前有一个master节点已经运行了,但是还处于未准备状态

下面我们还需要在Node节点执行其它的命令,将node1和node2加入到我们的master节点上

加入node节点

下面我们需要到 node1 和 node2服务器,执行下面的代码向集群添加新节点

执行在kubeadm init输出的kubeadm join命令:

kubeadm join 192.168.52.130:6443 --token 3x8we4.ic6vjbo3o8imzl0i \
    --discovery-token-ca-cert-hash sha256:481b379f469771693d03b1d572c9d32e892e6686059bcb4bb032fc1774f5f447

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

kubeadm token create --print-join-command

加入了之后就有了两个节点

image-20220222180044355

复制admin.conf并且设置配置

为了在工作节点上也能使用kubectl,而kubectl命令需要使用kubernetes-admin来运行,因此我们需要将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下

复制完成之后,我们就可以设置kubectl的配置文件了,以便我们在工作节点上也可以使用kubectl来管理k8s集群:

#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

至此,k8s工作节点的部署初步完成。接下来,我们需要以同样的方式将其他工作节点加入到集群之中。

查看集群节点状态
集群创建完成之后,我们可以输入以下命令来查看当前节点状态:

image-20220222182432819

至此,node节点也可以使用kubectl了!

部署CNI网络插件

flannel

上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问

kubectl get pods -n kube-system

命令将列出“kube-system”命名空间下的所有pod并且以表格状输出pod的相关附加信息(节点名称)。

image-20220222184252689

# 添加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 命令“kubectl apply”可以用于创建和更新资源,以上命令使用了网络路径的yaml来进行创建flanner   也就是说,可以不下载到本地,直接利用网络路径进行apply

# 查看状态 【kube-system是k8s中的最小单元】
kubectl get pods -n kube-system

连不上GitHub的解决方案

https://blog.csdn.net/weixin_38074756/article/details/109231865

中间报了个小错,解决一下

https://blog.csdn.net/shm19990131/article/details/106517283/

image-20220222201138498

image-20220222201211148

搭建完成

第二条起来发现有节点不工作

image-20220223113021821

kubectl describe pod/coredns-6d8c4cb4d-qjlf8  --namespace kube-system
kubectl logs -f pod/coredns-6d8c4cb4d-qjlf8  --namespace kube-system
kubectl get pods -n kube-system
kubectl get nodes

命令查看日志

最后还是重装了一下,不知道问题

image-20220224090513799

  • 绕过JDK 8u191+等高版本限制
  • MRCTF springcoffe
取消回复

说点什么?
Title
flannel

© 2023 Yang_99的小窝. Using Typecho & Moricolor.