云安全攻防(十二)之 手动搭建 K8S 环境搭建

手动搭建 K8S 环境搭建

首先前期我们准备好三台 Centos7 机器,配置如下:

主机名 IP 系统版本
k8s-master 192.168.41.141 Centos7
k8s-node1 192.168.41.142 Centos7
k8s-node2 192.168.41.143 Centos7

前期准备

首先在三台机器上都执行如下的命令

bash 复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 永久关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 永久关闭 swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 修改/etc/hosts
vim /etc/hosts
192.168.41.141 k8s-master
192.168.41.142 k8s-node1
192.168.41.143 k8s-node2
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system  
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com



然后在三台机器上都配置阿里云的 K8s 源,执行如下的命令

bash 复制代码
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

然后在三台机器上均安装 docker、kubeadm、kubelet、kubectl

安装 docker,在三台机器上均执行如下的命令一键安装

bash 复制代码
curl -s https://get.docker.com/ | sh

如下所示安装完成:

配置docker镜像下载加速器,执行如下的命令:

bash 复制代码
vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
 #查看docker信息,进行确认
systemctl restart docker
docker info  

出现如下信息则显示配置完成

接着执行如下命令安装 kubelet、kubeadm 和 kubectl

bash 复制代码
#安装 kubelet、kubeadm 和 kubectl
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
#设置 kubelet 开机自启
systemctl enable kubelet

部署 K8S-master

在 master 节点执行如下命令初始化 master

bash 复制代码
kubeadm init --apiserver-advertise-address=192.168.41.141 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all

--apiserver-advertise-address 集群通告地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

或者使用配置文件引导:

bash 复制代码
vi kubeadm.conf
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.21.0
imageRepository: registry.aliyuncs.com/google_containers 
networking:
  podSubnet: 10.244.0.0/16 
  serviceSubnet: 10.96.0.0/12 

然后执行以下的命令初始化

bash 复制代码
kubeadm init --config kubeadm.conf --ignore-preflight-errors=all 

初始化完成后,最后会输出一个 join命令,先记住,下面用

然后拷贝kubectl使用的连接k8s认证文件到默认路径:

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署 K8S-node

在两个 node 节点(192.168.41.142/143)执行如下命令即可加入 K8S 集群

bash 复制代码
kubeadm join 192.168.41.141:6443 --token sec4pk.nnihf0tismgn6kax --discovery-token-ca-cert-hash sha256:a8a0adf8b5fd9adb6ac8a2977456bd1671055146ed5711eaab5280d6541986fd 

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

bash 复制代码
kubeadm token create --print-join-command

部署容器网络(CNI)

部署网络 Calico 是一个纯三层的数据中心网络方案,是目前 Kubernetes 主流的网络方案,执行以下的命令下载YAML:

bash 复制代码
wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml --no-check-certificate

下载完后还需要修改里面定义 Pod 网络(CALICO_IPV4POOL_CIDR),与之前

kubeadm init 的 --pod-network-cidr 指定的一样

bash 复制代码
vim calico.yaml

默认 calico.yaml 中所使用的镜像都来源于 docker.io 国外镜像源,这里我们可以删除 docker.io 前缀以使镜像从国内镜像加速站点下载

bash 复制代码
cat calico.yaml |grep 'image:'
sed -i 's#docker.io/##g' calico.yaml

修改完后文件后,部署:

bash 复制代码
#部署
kubectl apply -f calico.yaml
#查看状态,执行完上一条命令需要等一会才全部 running
kubectl get pods -n kube-system

等Calico Pod都Running,节点也会准备就绪

部署 Dashboard

Dashboard 是官方提供的一个 Web UI,可用于基本管理 K8s 资源,执行如下命令下载 yaml 文件。默认 Dashboard 只能集群内部访问,修改 Service 为NodePort 类型,暴露到外部:

bash 复制代码
wget https://github.com/kubernetes/dashboard/releases/tag/v2.4.0/aio/deploy/recommended.yaml

修改如下,nodePort 的端口范围为 30000-32767,这里设置为 31000,并且添加 type:NodePort

bash 复制代码
vim recommended.yaml

执行如下命令应用

bash 复制代码
kubectl apply -f recommended.yaml

在 master 节点创建 service account 并绑定默认 cluster-admin 管理员集群角色,执行如下的命令

bash 复制代码
# 创建用户
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,然后使用输出的 token 登录 Dashboard 就好了

bash 复制代码
eyJhbGciOiJSUzI1NiIsImtpZCI6IjNpbzFJbTg4UjlpcjFBdS1rb1J3NzFtY3BETlhtVkQ3S0hXZWwwU0MwN1UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tYzdzcHAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjAyMTE1OWMtZjcyMC00YTZlLWFiY2MtYzIzYWRhZjBiZjk5Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.aD_ZtS0domXxtWz-2BaGmZebJMqoNvWqHgJ4K7kQ9eir5JvIqTsrxM14dNrUrEFRZC2hw6Gn_xz7Nezy81XPU64HHcbGiNvNU8K7OwvTWwTOpDBRPho1CaxJsKBrlQwoNf1pzoShqO-JdL4kVfJUmKthjUqv8QduwVzEkCWeTXgcHOoPnsOaJSXJzwanAC4e5pIovcjMGQJU4W87T8uVW4bdO4w48c-101-mMYHMouKVRxF8OOTuGHFXUDpYCKAOvfA73gtwoyi_4wiSqS7NSZZTGwFfppUYDomjoA3FUFubZ2xLoc8fN2GoFzzTcylxFHTCfupJM2nUVs9vxQbJw

然后我们浏览器访问 URL:https://master:31000或者 https://node:31000 均可

输入获得的token,就可以完成登陆了

相关推荐
sbjdhjd6 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
liulilittle6 小时前
关于拥塞控制的几点思考
网络·c++·tcp/ip·计算机网络·信息与通信·tcp·通信
AOwhisky6 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
ggaofeng6 小时前
glusterfs如何在k8s中使用
云原生·容器·kubernetes·glusterfs
Phantom Void6 小时前
服务器处理客户端请求的设计方法
linux·运维·网络
小红卒6 小时前
mysql之udf提权
数据库·mysql·网络安全
王码码20356 小时前
办了500M宽带看视频还是卡?我用NAS搭了个测速服务器,宽带有没有缩水一测便知
网络·接口·nas
王码码20357 小时前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web
暮云星影7 小时前
个人总结 搭建Docker监控
docker·容器·grafana·prometheus
ylscode7 小时前
Anthropic Claude Oceanus意外泄露:Mythos系列AI红队测试遭遇API代理滥用危机
网络·人工智能·安全·web安全·安全威胁分析