本地k8s搭建(无视网络限制,简单几步搭建)

admin 2025-12-22 03:45:29 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了使用kubeasz工具在本地搭建三节点Kubernetes集群的详细步骤,包括环境准备、Ansible配置、镜像拉取、集群部署和验证等环节。文章解决了网络限制导致的镜像拉取问题,提供了常用kubectl命令和实战操作示例,帮助读者快速搭建本地K8s环境用于学习和实验。通过配置国内镜像源和containerd代理,成功克服了网络限制,实现了K8s集群的完整部署和基本操作。 综合评分: 85 文章分类: 云安全,网络安全,安全工具,应用安全,安全建设


cover_image

本地k8s搭建(无视网络限制,简单几步搭建)

原创

blue澜

逐影安全

2025年8月5日 09:20 北京

《kubeasz: 三节点K8s集群搭建终极指北》

须知

本来这个文章是自己整理然后留存在本地自己看的,没想发出来,但是那天发关于k8s的漏洞的文章时有师傅说想看一下,于是正好今天有时间就发出来了。

    由于自己本地留存了,为了防止吃灰增加自己的阅读兴趣,让AI帮我把正文内容加工了一下,看着可能有点皮😂,获取原markdown文件在文末。

🐧【序章:机器们的入职培训】

先给3台机器洗脑成合格打工人

1️⃣我这里先是使用了一个新Centos 7镜像,然后执行了以下命令,执行完直接本地将虚拟机复制成了3份分别作为Master1node1node2

#由于centos默认网卡是关闭的

cd /etc/sysconfig/network-scripts
#(不是每个人都是ens33别跟着打自己看一下用ip addr)
vi ifcfg-ens33
把ONBOOT=no,改成yes
输入:wq保存并退出
service network restart

# 使用阿里云镜像源替换默认源(解决龟速下载问题)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 永久关闭 SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 临时关闭 SELinux(立即生效)
setenforce 0
# 关闭防火墙服务
systemctl stop firewalld
# 禁止防火墙开机自启
systemctl disable firewalld
# 统一集群时区(防止时空错乱引发事故)
timedatectl set-timezone Asia/Shanghai
#安装python3
yum -y install python3
yum -y install vim

⚠️ 神秘仪式做完这套连招记得对暗号,互相ping一下,确认三胞胎脑波同步!

👑 第1幕:选一个监工(Ansible节点)

钦定Master1当带头大哥,先配置一下域名对应IP

vi /etc/hosts

(我这里缩写了一下)

继续执行如下命令

# 安装Ansible依赖
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
# 限定安装pip旧版本(避免兼容性风波)
pip3 install --upgrade&nbsp;"pip < 21.0"
# 通过阿里云镜像安装Ansible
pip3 install ansible -i https://mirrors.aliyun.com/pypi/simple/

# 生成SSH密钥对(免密登录的基础)
ssh-keygen
# 分发公钥到集群节点(建议先喝杯茶准备输密码)
ssh-copy-id mast1
ssh-copy-id node1
ssh-copy-id node2

🎯 重点检查项如果出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED警告,用ssh-keygen -R 目标IP清除旧指纹


🚀 第2幕:召唤kubeasz神器

准备施展三神器中的”镜像大挪移”

yum -y install git
git&nbsp;clone&nbsp;https://github.com/easzlab/kubeasz.git
cd&nbsp;kubeasz
&nbsp;#拉取镜像等文件
./ezdown -D

❗如果执行./ezdown -D报错,多半又是网络问题,解决方案如下,执行完后重新执行ezdown -D

vi /etc/docker/daemon.json

{
"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

systemctl daemon-reload
systemctl restart docker

这样才是成功

./ezctl new k8s
vim /etc/kubeasz/clusters/k8s/hosts

修改hosts文件只需要改这三个地方即可

🎉一键安装,祝你成功

#一键安装
./ezctl setup k8s all

成功如下

❗安装成功后,还有一点需要注意就是这个时候你pull镜像是会失败的,哎还是因为网络问题,而且kubeasz默认的镜像地址已经不能使用了

💡解决方案

#按照下图修改
vim /etc/containerd/config.toml

systemctl daemon-reload
systemctl restart containerd

还记得上面给的一堆镜像地址吗,除了红色标注的不用改,其余按照下面修改,都一口气粘贴过去

这样会很慢,不过能用就行啊,做实验肯定够了,如果嫌速度慢,只能通过设置官方库,然后设置containerd代理


🔍 终极大考:集群毕业典礼

下面我准备了一下常用命令,很贴心的我已经帮你分类了,你也可以用这些咒语验证集群是否渡劫成功

😎集群与节点管理

# --------------------------
# 集群与节点管理
# --------------------------
# 查看集群基本信息
kubectl cluster-info
# 查看详细集群信息(JSON格式输出)
kubectl cluster-info dump

# 查看节点状态和资源使用(表格视图)
kubectl get nodes

# 高级节点信息查看(带节点IP和运行 Pod)
kubectl get nodes -o wide

# 查看节点详细信息(包含资源分配/Taint/Labels)
kubectl describe node <node-name>

# 禁止调度到指定节点(进入维护模式)
kubectl cordon <node-name>

# 迁移节点工作负载并解除调度限制
kubectl drain <node-name> --ignore-daemonsets

🔎认证与配置

#获取管理员token(使用admin-user账户)
kubectl -n kube-system describe secret admin-user

# 查看kubeconfig配置文件
cat&nbsp;~/.kube/config

# 切换当前操作的命名空间
kubectl config set-context --current --namespace=<namespace>

🤖命名空间管理

# 查看所有命名空间
kubectl get namespaces

# --------------------------
# 资源操作基础
# --------------------------

# 查看所有资源类型及其缩写
kubectl api-resources

# 获取资源配置细节说明(例如查看Pod字段定义)
kubectl explain pod.spec.containers

🎈Pod 管理

# 查看所有命名空间的Pod列表
kubectl get pods -A

# 查看Pod列表(显示节点IP信息)
kubectl get pods -o wide

# 查看Pod详细配置信息
kubectl describe pod <pod-name>

# 进入Pod的容器(常用运维操作)
kubectl&nbsp;exec&nbsp;-it <pod-name> -- /bin/bash

# 在容器内执行命令(不进入交互模式)
kubectl&nbsp;exec&nbsp;<pod-name> --&nbsp;ls&nbsp;-l

# 查看Pod日志(持续跟踪模式)
kubectl logs -f <pod-name> --tail=50

# 强制立即删除Pod(跳过优雅终止周期)
kubectl delete pod <pod-name> --grace-period=0 --force

🛞部署管理

# 查看Deployment列表
kubectl get deployment

# 滚动重启部署(Pod逐个替换)
kubectl rollout restart deployment/<deployment-name>

# 查看部署历史版本
kubectl rollout&nbsp;history&nbsp;deployment/<deployment-name>

# 回滚到指定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=2

🛜服务与网络

# 查看服务端点(实际转发的Pod IP)
kubectl get endpoints <service-name>

# 创建端口转发到本地(临时测试用)
kubectl port-forward svc/<service-name> 8080:80

🛠️配置管理

# 应用YAML文件(声明式配置)
kubectl apply -f nginx.yaml

# 创建新资源(命令式配置)
kubectl create -f nginx.yaml

# 输出资源配置为YAML(导出配置)
kubectl get pod <pod-name> -o yaml

# 生成部署模板(--dry-run 试运行)
kubectl create deployment my-dep --image=nginx --dry-run=client -o yaml > deploy.yaml

# 查看Secret实际内容(需base64解码)
kubectl get secret <secret-name> -o jsonpath='{.data}'&nbsp;| jq&nbsp;'map_values(@base64d)'

📂存储管理

# 查看持久卷声明状态
kubectl get pvc

# 查看存储类配置
kubectl get storageclass

🔎调试诊断

# 创建调试Pod(挂接到目标容器)
kubectl debug -it <pod-name> --image=busybox --target=<container-name>

# 临时Pod执行网络测试(自动清理)
kubectl run tester --image=nginx:alpine --restart=Never --rm&nbsp;-it -- curl http://service-name

附注:建议配合别名使用提升效率

# 常用别名配置示例
alias&nbsp;kgp="kubectl get pods"
alias&nbsp;kdp="kubectl describe pod"
alias&nbsp;klf="kubectl logs -f --tail=50"

✅实战操作

1. 创建pod并暴露接口

Deployment是最常用的 k8S 工作负载控制器用于更高级层次对象,部署和管理 Pod。主要功能有:

  • 副本管理

    :确保应用有指定数量的副本在运行,且这些副本是健康的。

  • 滚动更新

    :可以平滑地更新应用版本,Kubernetes 会逐步替换旧的 Pod,而不是一次性删除所有 Pod。

  • 回滚功能

    :如果新的版本有问题,可以回滚到上一个健康的版本。

  • 自愈机制

    :如果某个 Pod 崩溃或不可用,Kubernetes 会自动创建新的 Pod 来替代它。

  • 创建一个deployment并暴露端口
#创建一个名字为nginx的deployment,运行的pod将拉取nginx镜像并运行(后面是镜像地址的nginx)
kubectl create deployment nginx --image=ccr.ccs.tencentyun.com/library/nginx

Service 是 Kubernetes 中的一种资源类型,主要用于在集群内或者集群外部访问  Pods。Pods 是 Kubernetes 中最小的可调度单元,但 Pods 是临时的,当 Pod 被销毁并重新创建时,它的 IP  地址也会发生变化。为了避免外部访问的 IP 地址发生变化,Kubernetes 引入了 Service 来提供稳定的访问方式。

  • 创建一个Service并让nginx在集群外部可访问
kubectl expose deployment nginx --type=NodePort --port=80
  • 然后我们可以查看这个nginx的Service信息
kubectl get svc nginx

结果如下图所示,这个pod对内的IP为10.101.89.183,供集群中的其他 Pods 访问,对应端口为80,而我们如果通过外部访问的话需要访问30213端口

外部访问

文档下载地址后台回复:本地k8s搭建

求关注

记一次帮丈母娘破解APP,满满的全是思路

破译之眼:AI重构前端渗透对抗新范式

【云安全】k8s漏洞合集 | k8s安全攻防


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:逐影安全 blue澜《本地k8s搭建(无视网络限制,简单几步搭建)》

评论:0   参与:  0